Да, решил. Алгоритм работает четко для 4-х реле.
Код: Выделить всё
#define relePin 04
#define rele1Pin 26
#define rele2Pin 25
#define rele3Pin 32
void testInit(){
pinMode(relePin, OUTPUT);
digitalWrite(relePin, LOW);
pinMode(rele1Pin, OUTPUT);
digitalWrite(relePin, LOW);
pinMode(rele2Pin, OUTPUT);
digitalWrite(relePin, LOW);
pinMode(rele3Pin, OUTPUT);
digitalWrite(relePin, LOW);
}
//==============
void testRele(){ // рабочая функция
if(!releSt && current_temp[3] > 40.0){
// if(!releSt && analogRead(35) > 2000.0){
digitalWrite(relePin, HIGH);
timeStamp();
Serial.println(" Rele \"ON\"");
releSt = 1;
MessText = "Реле 1 включено";
MessLoger(String (MessText), String(Info));
}
if(releSt && current_temp[3] < 35.0){
// if(releSt && analogRead(35) < 1500.0){
digitalWrite(relePin, LOW);
timeStamp();
Serial.println(" Rele \"OFF\"");
releSt = 0;
MessText = "Реле 1 выключено";
MessLoger(String (MessText), String(Info));
}
}
//========================================
void testRele1(){ // рабочая функция
if(!rele1St && current_temp[3] > 30.0){
// if(!releSt && analogRead(35) > 2000.0){
digitalWrite(rele1Pin, HIGH);
timeStamp();
Serial.println(" Rele_1 \"ON\"");
rele1St = 1;
MessText = "Реле 2 включено";
MessLoger(String (MessText), String(Info));
}
if(rele1St && current_temp[3] < 28.0){
// if(releSt && analogRead(35) < 1500.0){
digitalWrite(rele1Pin, LOW);
timeStamp();
Serial.println(" Rele_1 \"OFF\"");
rele1St = 0;
MessText = "Реле 2 выключено";
MessLoger(String (MessText), String(Info));
}
}
void testRele2(){ // рабочая функция
if(!rele2St && current_temp[3] > 25.0){
// if(!releSt && analogRead(35) > 2000.0){
digitalWrite(rele2Pin, HIGH);
timeStamp();
Serial.println(" Rele_2 \"ON\"");
rele2St = 1;
MessText = "Реле 3 включено";
MessLoger(String (MessText), String(Info));
}
if(rele2St && current_temp[3] < 22.0){
// if(releSt && analogRead(35) < 1500.0){
digitalWrite(rele2Pin, LOW);
timeStamp();
Serial.println(" Rele_2 \"OFF\"");
rele2St = 0;
MessText = "Реле 3 выключено";
MessLoger(String (MessText), String(Info));
}
}
void testRele3(){ // рабочая функция
if(!rele3St && current_temp[3] > 20.0){
// if(!releSt && analogRead(35) > 2000.0){
digitalWrite(rele3Pin, HIGH);
timeStamp();
Serial.println(" Rele_3 \"ON\"");
rele3St = 1;
MessText = "Реле 4 включено";
MessLoger(String (MessText), String(Info));
}
if(rele3St && current_temp[3] < 17.0){
// if(releSt && analogRead(35) < 1500.0){
digitalWrite(rele3Pin, LOW);
timeStamp();
Serial.println(" Rele_3 \"OFF\"");
rele3St = 0;
MessText = "Реле 4 выключено";
MessLoger(String (MessText), String(Info));
}
}
Единственная проблема - это всё замечательно для идеальных условий. То есть сервер запущен и работает. При старте ( 10 секунд) температура появится спустя время , указанное во вкладке температуры. То есть через 5 минут. Это очень не правильно. Хотелось бы последнюю температуру забрать из файла логирования. Возможно ли такое ? То есть при старте системы прочитать фаил SD карты.
С визуализацией то же есть один момент. Состояние реле - 0 и 1. Можно это передать на страницу Graf , но масштаб будет мелкий. Единицу надо привести к среднему значению температуры , то есть к 30 единицам. Тогда и на графике можно нормально увидеть момент включения.
Вот тут опять уперся в любительское решение. Профессионально так делать конечно же нельзя.
- Rele_32.jpg (187.31 КБ) 4723 просмотра