Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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(); //начало счёта времени