#include <M5CoreS3.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Пины
#define RELAY_PIN 2
#define HEATER_PIN 3
#define ONE_WIRE_BUS 4
// Инициализация дисплея и датчика температуры
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Переменные для хранения параметров
struct Step {
float temperature;
int duration;
};
Step steps[10];
int stepCount = 0;
void setup() {
M5.begin();
M5.Lcd.setRotation(1);
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
M5.Lcd.setTextSize(2);
pinMode(RELAY_PIN, OUTPUT);
pinMode(HEATER_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
digitalWrite(HEATER_PIN, LOW);
sensors.begin();
showMainMenu();
}
void loop() {
M5.update();
handleTouch();
}
void showMainMenu() {
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setCursor(0, 0);
M5.Lcd.println("Main Menu");
drawButton(20, 50, 200, 40, "On/Off Pump", TFT_DARKGREY);
drawButton(20, 100, 200, 40, "Set Temp/Time", TFT_DARKGREY);
drawButton(20, 150, 200, 40, "Add Step", TFT_DARKGREY);
drawButton(20, 200, 200, 40, "Start Process", TFT_DARKGREY);
drawButton(20, 250, 200, 40, "Clean System", TFT_DARKGREY);
}
void drawButton(int x, int y, int width, int height, const char* text, uint16_t color) {
M5.Lcd.fillRoundRect(x, y, width, height, 8, color);
M5.Lcd.setTextColor((color == TFT_DARKGREY) ? TFT_WHITE : TFT_BLACK);
M5.Lcd.setCursor(x + 10, y + 10);
M5.Lcd.print(text);
}
void handleTouch() {
if (M5.BtnA.wasPressed()) {
// Обработка нажатия кнопки A
}
if (M5.BtnB.wasPressed()) {
// Обработка нажатия кнопки B
}
if (M5.BtnC.wasPressed()) {
// Обработка нажатия кнопки C
}
}
void addStep(float temp, int duration) {
if (stepCount < 10) {
steps[stepCount].temperature = temp;
steps[stepCount].duration = duration;
stepCount++;
}
}
void startCleaning() {
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setCursor(0, 0);
M5.Lcd.println("Cleaning process...");
digitalWrite(RELAY_PIN, HIGH);
while (sensors.getTempCByIndex(0) < 101) {
digitalWrite(HEATER_PIN, HIGH);
delay(1000);
sensors.requestTemperatures();
}
digitalWrite(HEATER_PIN, LOW);
digitalWrite(RELAY_PIN, LOW);
M5.Lcd.println("Cleaning completed!");
delay(5000);
}