#include <SoftwareSerial.h>
#include <Nextion.h>
#include <EEPROM.h>
String str; //для данных принятых от дисплея
String str2; //для данных принятых от дисплея
String str3; //для данных принятых от дисплея
String str4; //для данных принятых от дисплея
int i = 0; //переменная для строк
bool led1State = HIGH;
int GrinderState = 0; //текущий статус гриндера
int OpticState = 0; //оптический датчик вкл или выкл
int OpticState2 = 0;
//пины
#define Pin_Uln7 13 //uln 7
#define Pin_Uln6 12 //uln 6
#define Pin_Uln5 10 //uln 5
//#define Pin_Uln4 11 //uln 4
#define Pin_Uln3 9 //uln 3
#define Pin_Uln2 8 //uln 2
#define Pin_Uln1 7 //uln 1
#define Pin_Optic A15 // Оптический датчик
//для хранения данных в ипруме
byte hi11;
byte low11;
byte hi12;
byte low12;
byte hi13;
byte low13;
byte hi14;
byte low14;
byte hi15;
byte low15;
//переменные
int ValOptic = 0; //хранение состояния датчика
int val(0);
//int time1; //через сколько от момента срабатывания концевика включить гриндер
//int time2; //через сколько от момента срабатывания концевика выключить гриндер
uint32_t previousMillisOn;
uint32_t previousMillisOff;
uint32_t time1;
uint32_t time2;
SoftwareSerial nextion(11, 3); // синий желтый Nextion TX to pin 2 and RX to pin 3 of Arduino
Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps
void setup() {
loadtoEEP();
Serial.begin(9600);
myNextion.init();
pinMode(Pin_Uln7, OUTPUT);
pinMode(Pin_Uln6, OUTPUT);
pinMode(Pin_Uln5, OUTPUT);
//pinMode(Pin_Uln4, OUTPUT);
pinMode(Pin_Uln3, OUTPUT);
pinMode(Pin_Uln2, OUTPUT);
pinMode(Pin_Uln1, OUTPUT);
pinMode(Pin_Optic, INPUT);
Serial.println(time1);
Serial.println(time2);
//OpticState = 1;
//StartGrinder();
// myNextion.setComponentValue("n0", time1);
// myNextion.setComponentValue("n1", time2);
// myNextion.setComponentValue("x100", dlina);
// myNextion.setComponentText("t5", " ok ");
// myNextion.setComponentValue("karetka", karetka);
//myNextion.sendCommand("page0.tm0.en=1");
}
void loop() {
// put your main code here, to run repeatedly:
String message = myNextion.listen(); //check for message
if (message != "") { // if a message is received...
Serial.println(message); //...print it out
}
// myNextion.setComponentText("t0", "Hello");
// delay(1000);
// int value = 1234;
// myNextion.setComponentText("t0", String(value));
// delay(1000);
if (message == "65 0 2 0 ffff ffff ffff") //Кнопка 1!
{
if (nextion.available() > 0) //если есть данные от дисплея
{
while (nextion.available()) {
str3 += char(nextion.read()); // Читаем принятые от дисплея данные побайтно в строку str
delay(10);
}
for (int i = 0; i < str3.length(); i++) {
str3 = (String(str3)); //добавляем строки
val = str3.toInt(); //конвертируем в числа
str3 = "";
if (val == 1) {
Serial.println("hi");
digitalWrite(13, HIGH); // включает светодиод
}
if (val == 0) {
Serial.println("low");
digitalWrite(13, LOW); // включает светодиод
}
Serial.println(val); //...вывод данных в сериал порт
Serial.println("да уж");
val = (2);
delay(50);
}
}
}
if (message == "65 0 a 1 ffff ffff ffff") //Кнопка перехода на страницу гриндера!
{
Serial.println("2"); //...вывод данных в сериал порт
myNextion.setComponentValue("page1.n0", time1);
myNextion.setComponentValue("page1.n1", time2);
}
if (message == "65 1 4 0 ffff ffff ffff") //Кнопка Сохранить!
{
Serial.println("3"); //...вывод данных в сериал порт
if (nextion.available() > 0) //если есть данные от дисплея
{
while (nextion.available()) {
str += char(nextion.read()); // Читаем принятые от дисплея данные побайтно в строку str
delay(10);
}
for (int i = 0; i < str.length(); i++) {
str = (String(str[i + 0]) + String(str[i + 1]) + String(str[i + 2]) + String(str[i + 3]) + String(str[i + 4])); //добавляем строки
time1 = str.toInt(); //конвертируем в числа
str = ("");
savetoEEP();
delay(50);
}
}
}
if (message == "65 1 4 1 ffff ffff ffff") //Кнопка Сохранить2!
{
Serial.println("4"); //...вывод данных в сериал порт
if (nextion.available() > 0) //если есть данные от дисплея
{
while (nextion.available()) {
str2 += char(nextion.read()); // Читаем принятые от дисплея данные побайтно в строку str
delay(10);
}
for (int i = 0; i < str2.length(); i++) {
str2 = (String(str2[i + 0]) + String(str2[i + 1]) + String(str2[i + 2]) + String(str2[i + 3]) + String(str2[i + 4])); //добавляем строки
time2 = str2.toInt(); //конвертируем в числа
str2 = ("");
savetoEEP();
delay(50);
}
}
}
ValOptic = analogRead(A15); //если датчик сработал то...
if (OpticState2 == 0 and ValOptic >= 1000)
{
OpticState2 = 1;
OpticState = 1;
} if (ValOptic < 1000)
{
OpticState = 0;
}
StartGrinder();
}
void savetoEEP() //Функция сохранения настроек в eeprom
{
hi11 = highByte(time1);
low11 = lowByte(time1);
EEPROM.update(0, hi11);
EEPROM.update(1, low11);
hi12 = highByte(time2);
low12 = lowByte(time2);
EEPROM.update(2, hi12);
EEPROM.update(3, low12);
// hi13 = highByte(ypor); low13 = lowByte(ypor);
// EEPROM.update(4, hi13); EEPROM.update(5, low13);
// hi14 = highByte(ypor2); low14 = lowByte(ypor2);
// EEPROM.update(6, hi14); EEPROM.update(7, low14);
// hi15 = highByte(karetka); low15 = lowByte(karetka);
// EEPROM.update(8, hi15); EEPROM.update(9, low15);
}
void loadtoEEP() //Функция загрузки настроек из eeprom
{
hi11 = EEPROM.read(0);
low11 = EEPROM.read(1);
time1 = word(hi11, low11);
hi12 = EEPROM.read(2);
low12 = EEPROM.read(3);
time2 = word(hi12, low12);
// hi13 = EEPROM.read(4); low13 = EEPROM.read(5);
// ypor = word(hi13, low13);
// hi14 = EEPROM.read(6); low14 = EEPROM.read(7);
// ypor2 = word(hi14, low14);
// hi15 = EEPROM.read(8); low15 = EEPROM.read(9);
// karetka = word(hi15, low15);
}
void StartGrinder() //Старт Гриндера
{
// put your main code here, to run repeatedly:
if (OpticState == 0 and GrinderState == 1) {
if ((millis() - previousMillisOn) > time2) {
OpticState2 = 0;
previousMillisOn = millis();
myNextion.setComponentText("t0", " on");
Serial.println("on");
GrinderState = 0;
}
}
if (OpticState == 1 and GrinderState == 0) {
if ((millis() - previousMillisOn) > time1) {
previousMillisOn = millis();
GrinderState = 1;
myNextion.setComponentText("t0", " off ");
Serial.println("off");
OpticState2 = 0;
}
}
// if (OpticState == 0 and GrinderState == 0) {
// if ((millis() - previousMillisLed1) > time2) {
// previousMillisLed1 = millis();
// myNextion.setComponentText("t0", " err");
// Serial.println("err");
// GrinderState = 0;
// }
// }
}