
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.
Diff: main.cpp
- 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(); //начало счёта времени