The microcontroller program has been changed so that when restarting or turning on the power, all valves are closed.

Files at this revision

API Documentation at this revision

Comitter:
Aleksk
Date:
Fri May 08 12:05:29 2020 +0000
Parent:
0:f2aaa8c6decf
Commit message:
The microcontroller program has been changed so that when restarting or turning on the power, all valves are closed.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- 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();                                                          //начало счёта времени