The values of the EEPROM2 settings are displayed in pc.print in a special line with the current diagnostic data. An additional block has been made in the parser for decoding incoming alarm settings; they are written in EEPROM2.

Dependencies:   _24LCXXX

Revision:
1:1d4ec28f17c4
Parent:
0:f2aaa8c6decf
Child:
2:8230a5a4cc13
--- a/main.cpp	Fri May 01 11:41:23 2020 +0000
+++ b/main.cpp	Fri May 08 12:05:29 2020 +0000
@@ -27,7 +27,7 @@
 
 volatile char chr_a;                                //в прерываниях переменные должны быть защищены  при помощи volatile от оптимизации компилятором
 volatile bool flag_comand_detected = false;         //если строка декодирована правильно то true
-
+volatile bool flag_reset = true;                    //флаг индикатора перезагрузки 
 //______________________________________________________________________________
 void substring(char *s,char *d,int pos,int len) {
 //usage: substring(Source,Destination,pos,len);
@@ -159,19 +159,26 @@
 //***************************************************************************** 
 
 int main() {
-    pc.printf("program started \r\n");
+    
     pc.attach(&onDataReceived, Serial::RxIrq);
     int time, valve1, valve2, countValve1=0, countValve2=0;
     int frequencyValve1, frequencyValve2;
     float raw_value_sum = 0 ;
+                                          //после перезагрузки немедленно закрыть оба клапана
+    digital_4.write(0);                                                       //valve1  off;
+    digital_7.write(0);                                                       //valve2  off;
+        
+    pc.printf("Program started \r\n");
     timer.start();
+    
   while (true){                                                                 //бесконечный цикл
     
-    if (flag_comand_detected) {
-      pc.printf("$press,%d,%d,%d,%d,%d\r\n",
-                 value,delta_value,flag_autoset,flag_plotter,sensor_value);     //текущие данные
+    if (flag_comand_detected) {                                                 //пришла правильная командная строка
+      pc.printf("$press,%d,%d,%d,%d,%d,%d,%d,*\r\n",
+        value,delta_value,flag_autoset,flag_plotter,sensor_value,frequencyValve1,frequencyValve2);     //текущие данные
       //pc.printf("%s\r\n",trueSource);                                         //эхо для отладки канала связи
       flag_comand_detected=false;                                              //в последующих обращениях не печатать пока нет новых уставок из СОМ-порта
+      flag_reset=false;                   //сброс флага перезагрузки (после перезагрузки клапана закрыты, регулятор ждет пока  не будет сброшен этот флаг)
       //plotter.printf("$%d %d %d %d %d;\r\n", digital_4.read()*100-110,
       //  digital_7.read()*100-220, value, sensor_value, time );                //печать в плоттер в другой СОМ-порт
     }
@@ -182,22 +189,24 @@
       counter_cycle1=0;
       sensor_value = raw_value_sum/20 * 3300;                                   // преобразование в напряжение 0-3300 mV  с усреднением
       raw_value_sum = 0 ;
-      //--------------regulator begin-----------------------
-      if (sensor_value > value + delta_value) {
-        valve2 = digital_7.read();
-        digital_7.write(1);                                                     //valve2 = 1;
-        if (valve2 < digital_7.read()) {countValve2++;}                    //счётчик передних фронтов напряжения (срабатывания клапана 2)
-        digital_4.write(0);                                                     //valve1 = 0;
-      } else  if (sensor_value < value - delta_value) {
-        valve1 = digital_4.read();
-        digital_4.write(1);                                                     //valve1 = 1;
-        if (valve1 < digital_4.read()) {countValve1++;}                    //счётчик передних фронтов напряжения (срабатывания клапана 1)
-        digital_7.write(0);                                                     //valve2 = 0; 
-      } else {
-        digital_4.write(0);                                                     //valve1 = 0;
-        digital_7.write(0);                                                     //valve2 = 0; 
+      if (flag_reset == false) {                                                //после перезагрузки уставки получены, можно запускать регулятор
+        //--------------regulator begin-----------------------
+        if (sensor_value > value + delta_value) {
+          valve2 = digital_7.read();
+          digital_7.write(1);                                                     //valve2  on;
+          if (valve2 < digital_7.read()) {countValve2++;}                         //счётчик передних фронтов напряжения (срабатывания клапана 2)
+          digital_4.write(0);                                                     //valve1  off;
+        } else  if (sensor_value < value - delta_value) {
+          valve1 = digital_4.read();
+          digital_4.write(1);                                                     //valve1  on;
+          if (valve1 < digital_4.read()) {countValve1++;}                         //счётчик передних фронтов напряжения (срабатывания клапана 1)
+          digital_7.write(0);                                                     //valve2  off; 
+        } else {
+          digital_4.write(0);                                                     //valve1  off;
+          digital_7.write(0);                                                     //valve2  off; 
+        }
+        //--------------regulator end-------------------------
       }
-      //--------------regulator end-------------------------
       time=timer.read_us();
       if (time > 1000000) {
         timer.reset();                                                          //начало счёта времени