On the i2c bus, Arduino Nano with address 2, transmits the weight value with a resolution of 1 kg.

Dependencies:   _24LCXXX

Committer:
Aleksk
Date:
Thu Jun 11 20:22:11 2020 +0000
Revision:
6:fe0a7180ebb7
Parent:
5:bb595cde0c82
Child:
7:97881cd71b31
An additional block has been made in the parser for decoding incoming alarm settings for writing to the EEPROM. Additional digital inputs are activated.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Aleksk 6:fe0a7180ebb7 1 // 11.06.2020 Продолжение (клон )mbed-os5-press9
Aleksk 6:fe0a7180ebb7 2 // Сделан дополнительный блок в парсере для декодирования приходящих аварийных уставок для EEPROM
Aleksk 6:fe0a7180ebb7 3 // Сделан timer_2 для отсчёта времени открытого состояния вентиля 1
Aleksk 6:fe0a7180ebb7 4 // Сделан timer_3 для отсчёта времени открытого состояния вентиля 2
Aleksk 6:fe0a7180ebb7 5 // Подключены цифровые входы D11,D12,D13. Реализованы условия остановки по 10 аварийным событиям.
Aleksk 6:fe0a7180ebb7 6 // Реализован сброс события (event_N = 255) через кнопку Стоп в программе оператора
Aleksk 5:bb595cde0c82 7 // Принимается флаг от кнопки Стоп - полной остановки регулятора - закрытие всех 4-х клапанов и передача статуса кнопки в программу оператора
Aleksk 5:bb595cde0c82 8 // Принимается флаг от кнопок включения - выключения компрессора, - идет команда на дискретный выход digital_6(PB_10)
Aleksk 5:bb595cde0c82 9 // Принимается новая уставка num_chan - переключение номера активного измерительного канала для обратной связи регулятора.
Aleksk 5:bb595cde0c82 10 // Эта уставка, как и все остальные, пишется в EEPROM.
Aleksk 5:bb595cde0c82 11 // Включены все шесть аналоговых входа, читаются пять
Aleksk 4:c34b84bfa2fb 12 // при получении командной строки с нулевой суммой, по новому флагу flag_zerostart, передаётся в сериал текущие уставки и величины
Aleksk 4:c34b84bfa2fb 13 // (важно для старта программы на PC), эти нулевые уставки не вводятся в регулятор и не записываются в EEPROM.
Aleksk 4:c34b84bfa2fb 14 // сторожевой таймер, истекает через 100мс
Aleksk 4:c34b84bfa2fb 15 //
Aleksk 4:c34b84bfa2fb 16
Aleksk 0:f2aaa8c6decf 17 #include "mbed.h"
Aleksk 2:8230a5a4cc13 18 #include "_24LCXXX.h"
Aleksk 2:8230a5a4cc13 19
Aleksk 2:8230a5a4cc13 20 I2C i2c(PB_9,PB_8); // sda, scl
Aleksk 2:8230a5a4cc13 21 _24LCXXX eeprom(&i2c, 0x50);
Aleksk 0:f2aaa8c6decf 22
Aleksk 4:c34b84bfa2fb 23 AnalogIn analog_value_0(A0); //подключение аналогового входа A0
Aleksk 4:c34b84bfa2fb 24 AnalogIn analog_value_1(A1); //подключение аналогового входа A1
Aleksk 4:c34b84bfa2fb 25 AnalogIn analog_value_2(A2); //подключение аналогового входа A2
Aleksk 4:c34b84bfa2fb 26 AnalogIn analog_value_3(A3); //подключение аналогового входа A3
Aleksk 4:c34b84bfa2fb 27 AnalogIn analog_value_4(A4); //подключение аналогового входа A4
Aleksk 4:c34b84bfa2fb 28 AnalogIn analog_value_5(A5); //подключение аналогового входа A5
Aleksk 6:fe0a7180ebb7 29 //DigitalOut led(LED1);
Aleksk 0:f2aaa8c6decf 30 DigitalOut digital_4(PB_5); //initialize digital pin 4 as an output (high pressure air bulb charge).
Aleksk 4:c34b84bfa2fb 31 DigitalOut digital_7(PA_8); //initialize digital pin 7 as an output. (high pressure air bulb discharge)
Aleksk 4:c34b84bfa2fb 32 DigitalOut digital_5(PB_4); //initialize digital pin 5 as an output (valve3,4)
Aleksk 4:c34b84bfa2fb 33 DigitalOut digital_6(PB_10); //initialize digital pin 6 as an output (compressor on/off)
Aleksk 6:fe0a7180ebb7 34 DigitalIn idigital_11(PA_7); //initialize digital pin 11 as an input концевик при растяжении сильфона
Aleksk 6:fe0a7180ebb7 35 DigitalIn idigital_12(PA_6); //initialize digital pin 12 as an input концевик при сжатии сильфона
Aleksk 6:fe0a7180ebb7 36 DigitalIn idigital_13(PA_5); //initialize digital pin 12 as an input внутрь опрессовщика попала вода
Aleksk 4:c34b84bfa2fb 37
Aleksk 4:c34b84bfa2fb 38 RawSerial plotter(USBTX, USBRX, 115200); // tx, rx for F411RE port for serial_plotter and temporary messages
Aleksk 4:c34b84bfa2fb 39 RawSerial pc(PA_9, PA_10, 115200); // tx, rx for F411RE port for command string distance PC
Aleksk 0:f2aaa8c6decf 40 EventQueue *queue = mbed_event_queue(); //инициализация очереди событий RTOS mbed5
Aleksk 6:fe0a7180ebb7 41 Timer timer; //инициализация таймера для определения частот переключений вентилей 1 и 2
Aleksk 6:fe0a7180ebb7 42 Timer timer_2; //инициализация таймера 2 для отсчёта времени открытого состояния вентиля 1
Aleksk 6:fe0a7180ebb7 43 Timer timer_3; //инициализация таймера 3 для отсчёта времени открытого состояния вентиля 2
Aleksk 6:fe0a7180ebb7 44 //========УСТАВКИ_1 EEPROM========
Aleksk 5:bb595cde0c82 45 uint8_t delta_value = 0; //set delta pressure 1...99
Aleksk 6:fe0a7180ebb7 46 uint8_t flag_compressor = 0; //флаг компрессора. При 0 - выключение компрессора, при 1 - включение компрессора
Aleksk 6:fe0a7180ebb7 47 uint8_t flag_stopRegulator = 0; //Stop- флаг . При 0 - разрешение работы регулятора, при 1 - запрет и запиране всех клапанов
Aleksk 5:bb595cde0c82 48 uint8_t num_chan = 1; //set номер аналогового канала 0...5 (1-as default = Pa)
Aleksk 4:c34b84bfa2fb 49 int value = 0; //set begin value "pressure" 1...3300
Aleksk 6:fe0a7180ebb7 50 //========УСТАВКИ_2 EEPROM========
Aleksk 6:fe0a7180ebb7 51 int Pd_eeprom = 2000; // mV, максимальное дифференциальное давление (беззнаковое)
Aleksk 6:fe0a7180ebb7 52 int frequencyValve1_eeprom = 5; // Гц, максимальная частота переключений клапана 1
Aleksk 6:fe0a7180ebb7 53 int frequencyValve2_eeprom = 5; // Гц, максимальная частота переключений клапана 2
Aleksk 6:fe0a7180ebb7 54 int WL01_eeprom = 10; // mV, минимальный вес опрессовщика
Aleksk 6:fe0a7180ebb7 55 int WL99_eeprom = 2000; // mV, максимальный вес опрессовщика
Aleksk 6:fe0a7180ebb7 56 int T_1 = 4000; // ms, максимальное время открытого состояния для клапана 1
Aleksk 6:fe0a7180ebb7 57 int T_2 = 4000; // ms, максимальное время открытого состояния для клапана 2
Aleksk 6:fe0a7180ebb7 58 uint8_t event_N = 255; // номер события , по умолчанию 255 - событий нет
Aleksk 6:fe0a7180ebb7 59 //======temporary set=====
Aleksk 6:fe0a7180ebb7 60 int numSet, anySet;
Aleksk 6:fe0a7180ebb7 61 //=================================
Aleksk 0:f2aaa8c6decf 62 int value_auto=250 ; //set begin value auto "pressure"
Aleksk 4:c34b84bfa2fb 63 int WL = 0; //напряжение с аналогового входа А0 (WL - вес опресовщика)
Aleksk 4:c34b84bfa2fb 64 int sensor_value =0; //напряжение с аналогового входа А1 (Pa - текущее давление)
Aleksk 4:c34b84bfa2fb 65 int Pb = 0; //напряжение с аналогового входа А2 (Pb - давление в баллоне)
Aleksk 4:c34b84bfa2fb 66 int Pw1 = 0; //напряжение с аналогового входа А3 (Pw1 - давление воды на входе опрессовщика)
Aleksk 4:c34b84bfa2fb 67 int Pw2 = 0; //напряжение с аналогового входа А4 (Pw2 - давление воды в контуре макета)
Aleksk 4:c34b84bfa2fb 68 int Pd = 0; //напряжение с аналогового входа А5 (Pd - дифференциальное давление опресовщика)
Aleksk 2:8230a5a4cc13 69 int counter_cycle1 = 0; //счётчик цикла while(true)
Aleksk 2:8230a5a4cc13 70 int counter_cycle2 = 0; //счётчик внутри функции auto_set
Aleksk 0:f2aaa8c6decf 71 int sig = 1; //знак инкримента для автоустаки
Aleksk 6:fe0a7180ebb7 72
Aleksk 0:f2aaa8c6decf 73 // FIFO_buffer must be full (only char and '\0')
Aleksk 5:bb595cde0c82 74 //#define maxnsym 26 // maximum nbr of symbols FIFO_buffer (вариант без символов окончания)
Aleksk 5:bb595cde0c82 75 #define maxnsym 28 // maximum nbr of symbols FIFO_buffer +CR+LF (символы окончания должны быть включены на передаче)
Aleksk 5:bb595cde0c82 76 char Source[maxnsym]="$press,1000,25,0,0,1,2050**"; //25 char- string ,весь массив со строкой для поиска 25+1(null terminal)=26
Aleksk 0:f2aaa8c6decf 77 //уставки и контрольная сумма умноженная на два, должны быть больше нуля
Aleksk 0:f2aaa8c6decf 78 char trueSource[maxnsym]; //верифицированная строка для callback
Aleksk 2:8230a5a4cc13 79 char trueSourceOld[maxnsym]; //предыдущая верифицированная строка для callback
Aleksk 6:fe0a7180ebb7 80 char trueSource2[maxnsym]; //верифицированная строка для callback
Aleksk 6:fe0a7180ebb7 81 char trueSource2Old[maxnsym]; //предыдущая верифицированная строка для callback
Aleksk 0:f2aaa8c6decf 82
Aleksk 4:c34b84bfa2fb 83 volatile char chr_a; //в прерываниях переменные должны быть защищены при помощи volatile от оптимизации компилятором
Aleksk 4:c34b84bfa2fb 84 volatile bool flag_comand_detected = false; //если строка декодирована правильно то true
Aleksk 6:fe0a7180ebb7 85 volatile bool flag_comand2_detected = false; //если строка в блоке парсинга уставок eeprom декодирована правильно то true
Aleksk 4:c34b84bfa2fb 86 volatile bool flag_zerostart = false; //если строка декодирована c нулевой контрольной суммой то true
Aleksk 6:fe0a7180ebb7 87 //volatile bool flag_stopRegulator = true; //флаг остановки , закрыть все клапана
Aleksk 2:8230a5a4cc13 88 //_____________________________________________________________________________
Aleksk 2:8230a5a4cc13 89 void save_EEPROM () {
Aleksk 2:8230a5a4cc13 90 int data2;
Aleksk 4:c34b84bfa2fb 91 plotter.printf("EEPROM write------\r\n");
Aleksk 2:8230a5a4cc13 92 eeprom.byte_write(0, delta_value);
Aleksk 6:fe0a7180ebb7 93 eeprom.byte_write(1, flag_compressor);
Aleksk 6:fe0a7180ebb7 94 eeprom.byte_write(2, flag_stopRegulator);
Aleksk 5:bb595cde0c82 95 eeprom.byte_write(3, num_chan);
Aleksk 2:8230a5a4cc13 96 data2 = value;
Aleksk 2:8230a5a4cc13 97 eeprom.nbyte_write( 10, &data2, sizeof(int));
Aleksk 2:8230a5a4cc13 98 }
Aleksk 2:8230a5a4cc13 99 //_____________________________________________________________________________
Aleksk 2:8230a5a4cc13 100 void load_EEPROM () {
Aleksk 2:8230a5a4cc13 101 uint8_t data1;
Aleksk 2:8230a5a4cc13 102 int data2;
Aleksk 4:c34b84bfa2fb 103 plotter.printf("EEPROM read------\r\n");
Aleksk 2:8230a5a4cc13 104 eeprom.nbyte_read( 0, &data1, 1 );
Aleksk 4:c34b84bfa2fb 105 plotter.printf("adress 0 =%d \r\n",data1);
Aleksk 2:8230a5a4cc13 106 delta_value=data1;
Aleksk 2:8230a5a4cc13 107 eeprom.nbyte_read( 1, &data1, 1 );
Aleksk 4:c34b84bfa2fb 108 plotter.printf("adress 1 =%d \r\n",data1);
Aleksk 6:fe0a7180ebb7 109 flag_compressor=data1;
Aleksk 2:8230a5a4cc13 110 eeprom.nbyte_read( 2, &data1, 1 );
Aleksk 4:c34b84bfa2fb 111 plotter.printf("adress 2 =%d \r\n",data1);
Aleksk 6:fe0a7180ebb7 112 flag_stopRegulator=data1;
Aleksk 5:bb595cde0c82 113 eeprom.nbyte_read( 3, &data1, 1 );
Aleksk 5:bb595cde0c82 114 plotter.printf("adress 3 =%d \r\n",data1);
Aleksk 5:bb595cde0c82 115 num_chan=data1;
Aleksk 2:8230a5a4cc13 116 eeprom.nbyte_read( 10, &data2, sizeof(int) );
Aleksk 4:c34b84bfa2fb 117 plotter.printf("adress 10 = %d \r\n",data2);
Aleksk 2:8230a5a4cc13 118 value=data2;
Aleksk 2:8230a5a4cc13 119 }
Aleksk 0:f2aaa8c6decf 120 //______________________________________________________________________________
Aleksk 0:f2aaa8c6decf 121 void substring(char *s,char *d,int pos,int len) {
Aleksk 0:f2aaa8c6decf 122 //usage: substring(Source,Destination,pos,len);
Aleksk 0:f2aaa8c6decf 123 char *t;
Aleksk 0:f2aaa8c6decf 124 s=s+(pos-1);
Aleksk 0:f2aaa8c6decf 125 t=s+len;
Aleksk 0:f2aaa8c6decf 126 while (s!=t) {
Aleksk 0:f2aaa8c6decf 127 *d=*s;
Aleksk 0:f2aaa8c6decf 128 s++;
Aleksk 0:f2aaa8c6decf 129 d++;
Aleksk 0:f2aaa8c6decf 130 }
Aleksk 0:f2aaa8c6decf 131 *d='\0';
Aleksk 0:f2aaa8c6decf 132 }
Aleksk 0:f2aaa8c6decf 133 //______________________________________________________________________________
Aleksk 0:f2aaa8c6decf 134 void onDataReceived(); // callback
Aleksk 0:f2aaa8c6decf 135 //______________________________________________________________________________
Aleksk 0:f2aaa8c6decf 136 void read_serial(void) {
Aleksk 0:f2aaa8c6decf 137 char Destination[50];
Aleksk 0:f2aaa8c6decf 138 int pos,len;
Aleksk 0:f2aaa8c6decf 139 int controlSum1, controlSum2;
Aleksk 6:fe0a7180ebb7 140 int value_, delta_value_, flag_compressor_, flag_stopRegulator_, num_chan_;
Aleksk 6:fe0a7180ebb7 141 int controlSumSet1, controlSumSet2;
Aleksk 6:fe0a7180ebb7 142 int numSet_, anySet_;
Aleksk 0:f2aaa8c6decf 143 int ch = '$'; // Код искомого символа
Aleksk 0:f2aaa8c6decf 144 int indexCh; // Char on position
Aleksk 0:f2aaa8c6decf 145 char *ach; // Указатель на искомую переменную в строке, по которой осуществляется поиск.
Aleksk 0:f2aaa8c6decf 146 while(pc.readable()) {
Aleksk 0:f2aaa8c6decf 147 chr_a = pc.getc();
Aleksk 0:f2aaa8c6decf 148 //_____FIFO_buffer_begin_____
Aleksk 0:f2aaa8c6decf 149 for ( int i = 2; i < maxnsym; i++) {
Aleksk 0:f2aaa8c6decf 150 Source[i-2]=Source[i-1];
Aleksk 0:f2aaa8c6decf 151 }
Aleksk 0:f2aaa8c6decf 152 Source[maxnsym-2]=chr_a; //предпоследний элемент
Aleksk 0:f2aaa8c6decf 153 Source[maxnsym-1] ='\0'; //последний элемент массива это нуль-терминал для формирования конца строки в Си
Aleksk 0:f2aaa8c6decf 154 //_____FIFO_buffer_end_______
Aleksk 0:f2aaa8c6decf 155 }
Aleksk 0:f2aaa8c6decf 156 ach=strchr (Source,ch); //поиск первого вхождения символа в строку , ищем указатель символа ‘$’
Aleksk 0:f2aaa8c6decf 157 if (ach==NULL) {
Aleksk 0:f2aaa8c6decf 158 //pc.printf ("Char not finded \r\n"); //Символ $ в строке не найден
Aleksk 0:f2aaa8c6decf 159 goto endParsing; //пропускаем парсинг
Aleksk 0:f2aaa8c6decf 160 }
Aleksk 0:f2aaa8c6decf 161 else {
Aleksk 0:f2aaa8c6decf 162 indexCh = ach-Source+1; //вычитаем указатель из указателя!
Aleksk 0:f2aaa8c6decf 163 //pc.printf ("Char '$' on position %d\r\n",indexCh); //Искомый символ в строке на позиции
Aleksk 0:f2aaa8c6decf 164 }
Aleksk 0:f2aaa8c6decf 165 if (indexCh!=1) { //позиция символа $ не 1
Aleksk 0:f2aaa8c6decf 166 //pc.printf ("$ position not 1 \r\n");
Aleksk 0:f2aaa8c6decf 167 goto endParsing; //пропускаем парсинг
Aleksk 0:f2aaa8c6decf 168 }
Aleksk 0:f2aaa8c6decf 169
Aleksk 0:f2aaa8c6decf 170 pos=1; //начало подстроки $press - на 1 позиции
Aleksk 0:f2aaa8c6decf 171 len=6; //длина подстроки $press равна 6
Aleksk 0:f2aaa8c6decf 172 substring(Source,Destination,pos,len);
Aleksk 0:f2aaa8c6decf 173 //pc.printf("for pos=%d and len=%d resultat is d= %s\r\n", pos, len, Destination);
Aleksk 0:f2aaa8c6decf 174
Aleksk 0:f2aaa8c6decf 175 if (strcmp(Destination,"$press" ) != 0) { //функция возвращает ноль если строки совпадают
Aleksk 0:f2aaa8c6decf 176 //pc.printf("wrong Destination=%s\r\n",Destination); //печать "неправильной" нулевой строки
Aleksk 6:fe0a7180ebb7 177 goto eepromSet ; //в начале сообщения нет $press , переход с следующему блоку приёма
Aleksk 0:f2aaa8c6decf 178 }
Aleksk 0:f2aaa8c6decf 179 pos=8; //начало подстроки 1000 - на 8 позиции
Aleksk 0:f2aaa8c6decf 180 len=4; //длина подстроки 1000 равна 4
Aleksk 0:f2aaa8c6decf 181 substring(Source,Destination,pos,len);
Aleksk 0:f2aaa8c6decf 182 value_=atoi(Destination);
Aleksk 4:c34b84bfa2fb 183 //if (value_==0) {
Aleksk 4:c34b84bfa2fb 184 // flag_zerostart = true; //индикатор первого пуска удаленной программы на PC без введенных уставок, надо передать текущее состояние на PC
Aleksk 4:c34b84bfa2fb 185 // goto endParsing; //уставка должна быть больше еденицы, пропускаем парсинг
Aleksk 4:c34b84bfa2fb 186 //}
Aleksk 0:f2aaa8c6decf 187 //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, value_);
Aleksk 0:f2aaa8c6decf 188 pos=13; //начало подстроки 25 - на 13 позиции
Aleksk 0:f2aaa8c6decf 189 len=2; //длина подстроки 25 равна 2
Aleksk 0:f2aaa8c6decf 190 substring(Source,Destination,pos,len);
Aleksk 0:f2aaa8c6decf 191 delta_value_=atoi(Destination);
Aleksk 4:c34b84bfa2fb 192 //if (delta_value_==0) {
Aleksk 4:c34b84bfa2fb 193 // flag_zerostart = true; //индикатор первого пуска удаленной программы на PC без введенных уставок, надо передать текущее состояние на PC
Aleksk 4:c34b84bfa2fb 194 // goto endParsing; //уставка отклонения должна быть больше еденицы, пропускаем парсинг
Aleksk 4:c34b84bfa2fb 195 //}
Aleksk 0:f2aaa8c6decf 196 //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, delta_value_);
Aleksk 0:f2aaa8c6decf 197 pos=16; //начало подстроки 0 - на 16 позиции
Aleksk 0:f2aaa8c6decf 198 len=1; //длина подстроки 0 равна 1
Aleksk 0:f2aaa8c6decf 199 substring(Source,Destination,pos,len);
Aleksk 6:fe0a7180ebb7 200 flag_compressor_=atoi(Destination);
Aleksk 6:fe0a7180ebb7 201 //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, flag_compressor_);
Aleksk 0:f2aaa8c6decf 202 pos=18; //начало подстроки 0 - на 18 позиции
Aleksk 0:f2aaa8c6decf 203 len=1; //длина подстроки 0 равна 1
Aleksk 0:f2aaa8c6decf 204 substring(Source,Destination,pos,len);
Aleksk 6:fe0a7180ebb7 205 flag_stopRegulator_=atoi(Destination);
Aleksk 6:fe0a7180ebb7 206 //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, flag_stopRegulator_);
Aleksk 5:bb595cde0c82 207
Aleksk 5:bb595cde0c82 208 pos=20; //начало подстроки 1 - на 20 позиции
Aleksk 5:bb595cde0c82 209 len=1; //длина подстроки 1 равна 1
Aleksk 5:bb595cde0c82 210 substring(Source,Destination,pos,len);
Aleksk 5:bb595cde0c82 211 num_chan_=atoi(Destination);
Aleksk 5:bb595cde0c82 212 //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, num_chan_);
Aleksk 5:bb595cde0c82 213
Aleksk 5:bb595cde0c82 214 pos=22; //начало подстроки 1025 - на 22 позиции
Aleksk 0:f2aaa8c6decf 215 len=4; //длина подстроки 1025 равна 4
Aleksk 0:f2aaa8c6decf 216 substring(Source,Destination,pos,len);
Aleksk 0:f2aaa8c6decf 217 controlSum1=atoi(Destination);
Aleksk 5:bb595cde0c82 218 if (controlSum1==2) {
Aleksk 5:bb595cde0c82 219 flag_zerostart = true; //индикатор первого пуска удаленной программы на PC без введенных уставок, надо передать текущее состояние на PC
Aleksk 6:fe0a7180ebb7 220 flag_compressor=flag_compressor_; //здесь можно включать-выключать компрессор, но без записи в EEPROM
Aleksk 5:bb595cde0c82 221 goto endParsing; //контрольная сумма должна быть больше двух, пропускаем парсинг
Aleksk 0:f2aaa8c6decf 222 }
Aleksk 0:f2aaa8c6decf 223 //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, controlSum1);
Aleksk 6:fe0a7180ebb7 224 controlSum2=(value_+delta_value_+flag_compressor_+flag_stopRegulator_+num_chan_)*2; //удвоение чтобы не было одинаковых чисел в сообщении
Aleksk 0:f2aaa8c6decf 225 //pc.printf("controlSum1=%d controlSum2=%d\r\n", controlSum1, controlSum2);
Aleksk 0:f2aaa8c6decf 226 if (controlSum1!=controlSum2) { //не совпала контрольная сумма
Aleksk 0:f2aaa8c6decf 227 //pc.printf ("controlSum1!=controlSum2 \r\n");
Aleksk 4:c34b84bfa2fb 228 goto endParsing; //пропускаем парсинг
Aleksk 0:f2aaa8c6decf 229 }
Aleksk 4:c34b84bfa2fb 230 //*********присваиваем проверенные значения глобальным переменным***********
Aleksk 4:c34b84bfa2fb 231 strcpy(trueSource,Source); //копировать из Source в trueSource
Aleksk 6:fe0a7180ebb7 232 if (value_==0 || delta_value_==0) { //при старте с пустой уставкой не изменяем их в регуляторе и не пишем в EEPROM
Aleksk 6:fe0a7180ebb7 233 flag_compressor=flag_compressor_;
Aleksk 6:fe0a7180ebb7 234 flag_stopRegulator=flag_stopRegulator_; //для работы кнопки Stop
Aleksk 4:c34b84bfa2fb 235 } else {
Aleksk 4:c34b84bfa2fb 236 value=value_;
Aleksk 4:c34b84bfa2fb 237 delta_value=delta_value_;
Aleksk 6:fe0a7180ebb7 238 flag_compressor=flag_compressor_;
Aleksk 6:fe0a7180ebb7 239 flag_stopRegulator=flag_stopRegulator_;
Aleksk 5:bb595cde0c82 240 num_chan=num_chan_;
Aleksk 4:c34b84bfa2fb 241 }
Aleksk 4:c34b84bfa2fb 242
Aleksk 0:f2aaa8c6decf 243 flag_comand_detected=true; //если флаг true, то всем переменным присвоены новые значения уставок
Aleksk 6:fe0a7180ebb7 244 goto endParsing ; //завершение блока приема рабочих уставок для работяющего релейного регулятора
Aleksk 6:fe0a7180ebb7 245
Aleksk 6:fe0a7180ebb7 246 //========Начало блока приёма аварийных граничных (максимальных) уставок для записи в EEPROM ===================
Aleksk 6:fe0a7180ebb7 247 eepromSet:
Aleksk 6:fe0a7180ebb7 248 if (strcmp(Destination,"$setup" ) != 0) { //функция возвращает ноль если строки совпадают
Aleksk 6:fe0a7180ebb7 249 //pc.printf("wrong Destination=%s\r\n",Destination); //печать "неправильной" нулевой строки
Aleksk 6:fe0a7180ebb7 250 goto endParsing ; //в начале сообщения нет $setup , пропускаем парсинг
Aleksk 6:fe0a7180ebb7 251 }
Aleksk 6:fe0a7180ebb7 252 pos=8; //начало подстроки 123 - на 8 позиции
Aleksk 6:fe0a7180ebb7 253 len=3; //длина подстроки 123 равна 3
Aleksk 6:fe0a7180ebb7 254 substring(Source,Destination,pos,len);
Aleksk 6:fe0a7180ebb7 255 numSet_=atoi(Destination);
Aleksk 6:fe0a7180ebb7 256 pos=12; //начало подстроки 123456 - на 12 позиции
Aleksk 6:fe0a7180ebb7 257 len=6; //длина подстроки 123456 равна 6
Aleksk 6:fe0a7180ebb7 258 substring(Source,Destination,pos,len);
Aleksk 6:fe0a7180ebb7 259 anySet_ =atoi(Destination);
Aleksk 6:fe0a7180ebb7 260 pos=19; //начало подстроки 1234567 - на 19 позиции
Aleksk 6:fe0a7180ebb7 261 len=7; //длина подстроки 1234567 равна 7
Aleksk 6:fe0a7180ebb7 262 substring(Source,Destination,pos,len);
Aleksk 6:fe0a7180ebb7 263 controlSumSet1 =atoi(Destination);
Aleksk 6:fe0a7180ebb7 264 controlSumSet2=(numSet_+anySet_)*2;
Aleksk 6:fe0a7180ebb7 265 if (controlSumSet1!=controlSumSet2) { //не совпала контрольная сумма
Aleksk 6:fe0a7180ebb7 266 //pc.printf ("controlSumSet1!=controlSumSet2 \r\n");
Aleksk 6:fe0a7180ebb7 267 goto endParsing; //пропускаем парсинг
Aleksk 6:fe0a7180ebb7 268 }
Aleksk 6:fe0a7180ebb7 269 //*********присваиваем проверенные значения глобальным переменным***********
Aleksk 6:fe0a7180ebb7 270 strcpy(trueSource2,Source); //копировать из Source в trueSource2
Aleksk 6:fe0a7180ebb7 271 if (numSet_==0) { //при старте с пустым номером не изменяем уставки и не пишем в EEPROM
Aleksk 6:fe0a7180ebb7 272 goto endParsing; //пропускаем парсинг
Aleksk 6:fe0a7180ebb7 273 } else {
Aleksk 6:fe0a7180ebb7 274 numSet=numSet_;
Aleksk 6:fe0a7180ebb7 275 anySet=anySet_;
Aleksk 6:fe0a7180ebb7 276 }
Aleksk 0:f2aaa8c6decf 277
Aleksk 6:fe0a7180ebb7 278 switch ( numSet ) {
Aleksk 6:fe0a7180ebb7 279 case 1: // это двоеточие
Aleksk 6:fe0a7180ebb7 280
Aleksk 6:fe0a7180ebb7 281 plotter.printf("1 Valve1=%d\r\n",anySet);
Aleksk 6:fe0a7180ebb7 282 break;
Aleksk 6:fe0a7180ebb7 283 case 2:
Aleksk 6:fe0a7180ebb7 284 plotter.printf("2 Valve2=%d\r\n",anySet);
Aleksk 6:fe0a7180ebb7 285 break;
Aleksk 6:fe0a7180ebb7 286 case 3:
Aleksk 6:fe0a7180ebb7 287 plotter.printf("3 Valve3,4=%d\r\n",anySet);
Aleksk 6:fe0a7180ebb7 288 break;
Aleksk 6:fe0a7180ebb7 289 case 4:
Aleksk 6:fe0a7180ebb7 290 plotter.printf("4 Compressor=%d\r\n",anySet );
Aleksk 6:fe0a7180ebb7 291 break;
Aleksk 6:fe0a7180ebb7 292 case 10:
Aleksk 6:fe0a7180ebb7 293 Pd_eeprom = anySet;
Aleksk 6:fe0a7180ebb7 294 plotter.printf( "10 Pd_eeprom=%d\r\n",anySet );
Aleksk 6:fe0a7180ebb7 295 break;
Aleksk 6:fe0a7180ebb7 296 case 11:
Aleksk 6:fe0a7180ebb7 297 frequencyValve1_eeprom = anySet;
Aleksk 6:fe0a7180ebb7 298 plotter.printf( "11 frequencyValve1_eeprom=%d\r\n",anySet );
Aleksk 6:fe0a7180ebb7 299 break;
Aleksk 6:fe0a7180ebb7 300 case 12:
Aleksk 6:fe0a7180ebb7 301 frequencyValve2_eeprom = anySet;
Aleksk 6:fe0a7180ebb7 302 plotter.printf( "12 frequencyValve2_eeprom=%d\r\n",anySet );
Aleksk 6:fe0a7180ebb7 303 break;
Aleksk 6:fe0a7180ebb7 304 case 13:
Aleksk 6:fe0a7180ebb7 305 WL01_eeprom = anySet;
Aleksk 6:fe0a7180ebb7 306 plotter.printf( "13 WL01_eeprom=%d\r\n",anySet );
Aleksk 6:fe0a7180ebb7 307 break;
Aleksk 6:fe0a7180ebb7 308 case 14:
Aleksk 6:fe0a7180ebb7 309 WL99_eeprom = anySet;
Aleksk 6:fe0a7180ebb7 310 plotter.printf( "14 WL99_eeprom=%d\r\n",anySet );
Aleksk 6:fe0a7180ebb7 311 break;
Aleksk 6:fe0a7180ebb7 312 case 18:
Aleksk 6:fe0a7180ebb7 313 T_1 = anySet;
Aleksk 6:fe0a7180ebb7 314 plotter.printf( "18 T_1=%d\r\n",anySet );
Aleksk 6:fe0a7180ebb7 315 break;
Aleksk 6:fe0a7180ebb7 316 case 19:
Aleksk 6:fe0a7180ebb7 317 T_2 = anySet;
Aleksk 6:fe0a7180ebb7 318 plotter.printf( "19 T_2=%d\r\n",anySet );
Aleksk 6:fe0a7180ebb7 319 break;
Aleksk 6:fe0a7180ebb7 320 default:
Aleksk 6:fe0a7180ebb7 321 plotter.printf( "Wrong case.\r\n" );
Aleksk 6:fe0a7180ebb7 322 }
Aleksk 6:fe0a7180ebb7 323
Aleksk 6:fe0a7180ebb7 324
Aleksk 6:fe0a7180ebb7 325
Aleksk 6:fe0a7180ebb7 326
Aleksk 6:fe0a7180ebb7 327
Aleksk 6:fe0a7180ebb7 328
Aleksk 6:fe0a7180ebb7 329
Aleksk 6:fe0a7180ebb7 330
Aleksk 6:fe0a7180ebb7 331 flag_comand2_detected=true; //если флаг true, то всем переменным присвоены новые значения уставок
Aleksk 6:fe0a7180ebb7 332 //========Конец блока приёма аварийных граничных (максимальных) уставок для записи в EEPROM ===================
Aleksk 6:fe0a7180ebb7 333
Aleksk 0:f2aaa8c6decf 334 endParsing:
Aleksk 0:f2aaa8c6decf 335
Aleksk 0:f2aaa8c6decf 336
Aleksk 0:f2aaa8c6decf 337 pc.attach(&onDataReceived, Serial::RxIrq); // reattach interrupt - переподключение прерывания перед выходом из функции
Aleksk 0:f2aaa8c6decf 338 }
Aleksk 0:f2aaa8c6decf 339 //______________________________________________________________________________
Aleksk 0:f2aaa8c6decf 340 void onDataReceived() {
Aleksk 0:f2aaa8c6decf 341 pc.attach(nullptr, Serial::RxIrq); // detach interrupt
Aleksk 0:f2aaa8c6decf 342 queue->call(read_serial); // process in a non ISR context - переход к функции приема строки -
Aleksk 0:f2aaa8c6decf 343 } // - в статусе отключенного прерывания (учим указатели!)
Aleksk 0:f2aaa8c6decf 344 //______________________________________________________________________________
Aleksk 5:bb595cde0c82 345 void auto_set () { //подпрограмма управления компрессором
Aleksk 5:bb595cde0c82 346
Aleksk 6:fe0a7180ebb7 347 digital_6.write(flag_compressor); //включение-выкючение компрессора
Aleksk 5:bb595cde0c82 348
Aleksk 0:f2aaa8c6decf 349 }
Aleksk 0:f2aaa8c6decf 350 //*****************************************************************************
Aleksk 0:f2aaa8c6decf 351 //*****************************************************************************
Aleksk 0:f2aaa8c6decf 352
Aleksk 0:f2aaa8c6decf 353 int main() {
Aleksk 1:1d4ec28f17c4 354
Aleksk 0:f2aaa8c6decf 355 pc.attach(&onDataReceived, Serial::RxIrq);
Aleksk 6:fe0a7180ebb7 356 int time, time_2, time_3, valve1, valve2, countValve1=0, countValve2=0, temp_valueSensor;
Aleksk 0:f2aaa8c6decf 357 int frequencyValve1, frequencyValve2;
Aleksk 4:c34b84bfa2fb 358 float raw_value_sum_0=0, raw_value_sum_1=0, raw_value_sum_2=0, raw_value_sum_3=0, raw_value_sum_4=0, raw_value_sum_5=0;
Aleksk 2:8230a5a4cc13 359 digital_4.write(0); //valve1 off;
Aleksk 4:c34b84bfa2fb 360 digital_7.write(0); //valve2 off;
Aleksk 5:bb595cde0c82 361 digital_5.write(0); //valve3,4 off;
Aleksk 5:bb595cde0c82 362 digital_6.write(0); //выключение компрессора
Aleksk 2:8230a5a4cc13 363 load_EEPROM (); //загрузка уставок из EEPROM
Aleksk 6:fe0a7180ebb7 364 if (value >= 1 && delta_value >= 1 && flag_compressor < 2 && flag_stopRegulator < 2 && num_chan < 6) {
Aleksk 2:8230a5a4cc13 365 flag_stopRegulator=false; //уставки из EEPROM похожи на правду, разрешаем работу регулятора
Aleksk 2:8230a5a4cc13 366 } else {
Aleksk 2:8230a5a4cc13 367 flag_stopRegulator = true; //флаг остановки установлен
Aleksk 2:8230a5a4cc13 368 pc.printf("Regulator stopped, error in EEPROM \r\n");
Aleksk 2:8230a5a4cc13 369 }
Aleksk 2:8230a5a4cc13 370
Aleksk 1:1d4ec28f17c4 371 pc.printf("Program started \r\n");
Aleksk 2:8230a5a4cc13 372 Watchdog &watchdog = Watchdog::get_instance();
Aleksk 2:8230a5a4cc13 373 watchdog.start(100); //WDlimit = 100 ms
Aleksk 0:f2aaa8c6decf 374 timer.start();
Aleksk 6:fe0a7180ebb7 375 timer_2.start();
Aleksk 6:fe0a7180ebb7 376 timer_3.start();
Aleksk 1:1d4ec28f17c4 377
Aleksk 0:f2aaa8c6decf 378 while (true){ //бесконечный цикл
Aleksk 2:8230a5a4cc13 379 // kick watchdog regularly within provided timeout (сброс собаки в начало счёта)
Aleksk 2:8230a5a4cc13 380 watchdog.kick();
Aleksk 4:c34b84bfa2fb 381
Aleksk 6:fe0a7180ebb7 382 if (flag_stopRegulator == 1){ event_N = 255;} //сброс события через кнопку Стоп в программе оператора
Aleksk 6:fe0a7180ebb7 383
Aleksk 6:fe0a7180ebb7 384 if (flag_stopRegulator == 1 || event_N < 255) { //полный останов регулятора и принудительное запирание всех клапанов
Aleksk 4:c34b84bfa2fb 385 digital_4.write(0); //valve1 off
Aleksk 4:c34b84bfa2fb 386 digital_7.write(0); //valve2 off
Aleksk 4:c34b84bfa2fb 387 digital_5.write(0); //valve3,4 off
Aleksk 5:bb595cde0c82 388 //digital_6.write(0); //выключение компрессора
Aleksk 4:c34b84bfa2fb 389 }
Aleksk 4:c34b84bfa2fb 390
Aleksk 1:1d4ec28f17c4 391 if (flag_comand_detected) { //пришла правильная командная строка
Aleksk 6:fe0a7180ebb7 392
Aleksk 6:fe0a7180ebb7 393 pc.printf("$press,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,*\r\n",
Aleksk 6:fe0a7180ebb7 394 value,delta_value,flag_compressor,flag_stopRegulator,
Aleksk 4:c34b84bfa2fb 395 sensor_value,frequencyValve1,frequencyValve2,
Aleksk 4:c34b84bfa2fb 396 WL,Pb,Pw1,Pw2,Pd,
Aleksk 6:fe0a7180ebb7 397 digital_4.read(),digital_7.read(),digital_5.read(),digital_6.read(),event_N,idigital_11.read(),idigital_12.read(),idigital_13.read()); //передача текущих значений в РС
Aleksk 4:c34b84bfa2fb 398
Aleksk 4:c34b84bfa2fb 399 // pc.printf("$press,%d,%d,%d,%d,%d,%d,%d,*\r\n",
Aleksk 6:fe0a7180ebb7 400 // value,delta_value,flag_compressor,flag_stopRegulator,
Aleksk 4:c34b84bfa2fb 401 // sensor_value,frequencyValve1,frequencyValve2); //передача текущих значений в РС
Aleksk 4:c34b84bfa2fb 402
Aleksk 0:f2aaa8c6decf 403 //pc.printf("%s\r\n",trueSource); //эхо для отладки канала связи
Aleksk 4:c34b84bfa2fb 404 flag_comand_detected = false; //в последующих обращениях не печатать пока нет новых уставок из СОМ-порта
Aleksk 4:c34b84bfa2fb 405 //flag_stopRegulator = false; //сброс флага, регулятор ждет пока не будет сброшен этот флаг
Aleksk 0:f2aaa8c6decf 406 //plotter.printf("$%d %d %d %d %d;\r\n", digital_4.read()*100-110,
Aleksk 0:f2aaa8c6decf 407 // digital_7.read()*100-220, value, sensor_value, time ); //печать в плоттер в другой СОМ-порт
Aleksk 2:8230a5a4cc13 408 if (strcmp(trueSourceOld,trueSource) != 0) { //функция возвращает ноль если командные строки совпадают
Aleksk 2:8230a5a4cc13 409 save_EEPROM (); //пишем в память уставки отличные от старых
Aleksk 2:8230a5a4cc13 410 load_EEPROM ();
Aleksk 2:8230a5a4cc13 411 }
Aleksk 2:8230a5a4cc13 412
Aleksk 2:8230a5a4cc13 413 strcpy(trueSourceOld,trueSource); //копировать из trueSource в trueSourceOld
Aleksk 0:f2aaa8c6decf 414 }
Aleksk 4:c34b84bfa2fb 415
Aleksk 4:c34b84bfa2fb 416 if (flag_zerostart) { //пришла командная строка с пустыми уставками (актуально для получения данных на PC при первом запуске)
Aleksk 6:fe0a7180ebb7 417 pc.printf("$press,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,*\r\n",
Aleksk 6:fe0a7180ebb7 418 value,delta_value,flag_compressor,flag_stopRegulator,
Aleksk 4:c34b84bfa2fb 419 sensor_value,frequencyValve1,frequencyValve2,
Aleksk 4:c34b84bfa2fb 420 WL,Pb,Pw1,Pw2,Pd,
Aleksk 6:fe0a7180ebb7 421 digital_4.read(),digital_7.read(),digital_5.read(),digital_6.read(),event_N,idigital_11.read(),idigital_12.read(),idigital_13.read()); //передача текущих значений в РС
Aleksk 4:c34b84bfa2fb 422 flag_zerostart = false;
Aleksk 4:c34b84bfa2fb 423 }
Aleksk 4:c34b84bfa2fb 424
Aleksk 4:c34b84bfa2fb 425 if (counter_cycle1 < 10 ) {
Aleksk 4:c34b84bfa2fb 426 float raw_value_0 = analog_value_0.read(); // Чтение аналогового входа 0 (0.0 to 1.0 = full ADC диапазон)
Aleksk 4:c34b84bfa2fb 427 raw_value_sum_0 = raw_value_sum_0 + raw_value_0;
Aleksk 4:c34b84bfa2fb 428 float raw_value_1 = analog_value_1.read(); // Чтение аналогового входа 1 (0.0 to 1.0 = full ADC диапазон)
Aleksk 4:c34b84bfa2fb 429 raw_value_sum_1 = raw_value_sum_1 + raw_value_1;
Aleksk 4:c34b84bfa2fb 430 float raw_value_2 = analog_value_2.read(); // Чтение аналогового входа 2 (0.0 to 1.0 = full ADC диапазон)
Aleksk 4:c34b84bfa2fb 431 raw_value_sum_2 = raw_value_sum_2 + raw_value_2;
Aleksk 4:c34b84bfa2fb 432 }
Aleksk 4:c34b84bfa2fb 433 if (counter_cycle1 >= 10 ) {
Aleksk 4:c34b84bfa2fb 434 float raw_value_3 = analog_value_3.read(); // Чтение аналогового входа 3 (0.0 to 1.0 = full ADC диапазон)
Aleksk 4:c34b84bfa2fb 435 raw_value_sum_3 = raw_value_sum_3 + raw_value_3;
Aleksk 4:c34b84bfa2fb 436 float raw_value_4 = analog_value_4.read(); // Чтение аналогового входа 4 (0.0 to 1.0 = full ADC диапазон)
Aleksk 4:c34b84bfa2fb 437 raw_value_sum_4 = raw_value_sum_4 + raw_value_4;
Aleksk 4:c34b84bfa2fb 438 //float raw_value_5 = analog_value_5.read(); // Чтение аналогового входа 5 (0.0 to 1.0 = full ADC диапазон)
Aleksk 4:c34b84bfa2fb 439 //raw_value_sum_5 = raw_value_sum_5 + raw_value_5;
Aleksk 4:c34b84bfa2fb 440 }
Aleksk 0:f2aaa8c6decf 441
Aleksk 4:c34b84bfa2fb 442 if (counter_cycle1 >= 19 ) {
Aleksk 0:f2aaa8c6decf 443 counter_cycle1=0;
Aleksk 4:c34b84bfa2fb 444
Aleksk 4:c34b84bfa2fb 445 WL = raw_value_sum_0/10 * 3300; // преобразование в напряжение 0-3300 mV с усреднением
Aleksk 4:c34b84bfa2fb 446 raw_value_sum_0 = 0 ;
Aleksk 4:c34b84bfa2fb 447 sensor_value = raw_value_sum_1/10 * 3300; // преобразование в напряжение 0-3300 mV с усреднением
Aleksk 4:c34b84bfa2fb 448 raw_value_sum_1 = 0 ;
Aleksk 4:c34b84bfa2fb 449 Pb = raw_value_sum_2/10 * 3300; // преобразование в напряжение 0-3300 mV с усреднением
Aleksk 4:c34b84bfa2fb 450 raw_value_sum_2 = 0 ;
Aleksk 4:c34b84bfa2fb 451 Pw1 = raw_value_sum_3/10 * 3300; // преобразование в напряжение 0-3300 mV с усреднением
Aleksk 4:c34b84bfa2fb 452 raw_value_sum_3 = 0 ;
Aleksk 5:bb595cde0c82 453 Pw2 = raw_value_sum_4/10 * 3300; // преобразование в напряжение 0-3300 mV с усреднением
Aleksk 4:c34b84bfa2fb 454 raw_value_sum_4 = 0 ;
Aleksk 4:c34b84bfa2fb 455 //Pd = raw_value_sum_5/20 * 3300; // преобразование в напряжение 0-3300 mV с усреднением
Aleksk 4:c34b84bfa2fb 456 //raw_value_sum_5 = 0 ;
Aleksk 6:fe0a7180ebb7 457 Pd = abs(sensor_value - Pw1);
Aleksk 4:c34b84bfa2fb 458
Aleksk 5:bb595cde0c82 459 if (num_chan == 1) {temp_valueSensor = sensor_value;} //теперь источник сигнала для регулятора - канал 1
Aleksk 5:bb595cde0c82 460 if (num_chan == 3) {temp_valueSensor = Pw1;} //теперь источник сигнала для регулятора - канал 3
Aleksk 5:bb595cde0c82 461 if (num_chan == 4) {temp_valueSensor = Pw2;} //теперь источник сигнала для регулятора - канал 4
Aleksk 5:bb595cde0c82 462
Aleksk 6:fe0a7180ebb7 463 if (flag_stopRegulator == 0 && event_N == 255) { // можно запускать регулятор
Aleksk 4:c34b84bfa2fb 464 digital_5.write(1); //valve3,4 открыты - подключаемся к контуру охлаждения макета
Aleksk 1:1d4ec28f17c4 465 //--------------regulator begin-----------------------
Aleksk 5:bb595cde0c82 466 if (temp_valueSensor > value + delta_value) {
Aleksk 1:1d4ec28f17c4 467 valve2 = digital_7.read();
Aleksk 1:1d4ec28f17c4 468 digital_7.write(1); //valve2 on;
Aleksk 1:1d4ec28f17c4 469 if (valve2 < digital_7.read()) {countValve2++;} //счётчик передних фронтов напряжения (срабатывания клапана 2)
Aleksk 1:1d4ec28f17c4 470 digital_4.write(0); //valve1 off;
Aleksk 5:bb595cde0c82 471 } else if (temp_valueSensor < value - delta_value) {
Aleksk 1:1d4ec28f17c4 472 valve1 = digital_4.read();
Aleksk 1:1d4ec28f17c4 473 digital_4.write(1); //valve1 on;
Aleksk 1:1d4ec28f17c4 474 if (valve1 < digital_4.read()) {countValve1++;} //счётчик передних фронтов напряжения (срабатывания клапана 1)
Aleksk 1:1d4ec28f17c4 475 digital_7.write(0); //valve2 off;
Aleksk 1:1d4ec28f17c4 476 } else {
Aleksk 1:1d4ec28f17c4 477 digital_4.write(0); //valve1 off;
Aleksk 1:1d4ec28f17c4 478 digital_7.write(0); //valve2 off;
Aleksk 1:1d4ec28f17c4 479 }
Aleksk 1:1d4ec28f17c4 480 //--------------regulator end-------------------------
Aleksk 0:f2aaa8c6decf 481 }
Aleksk 0:f2aaa8c6decf 482 time=timer.read_us();
Aleksk 0:f2aaa8c6decf 483 if (time > 1000000) {
Aleksk 0:f2aaa8c6decf 484 timer.reset(); //начало счёта времени
Aleksk 0:f2aaa8c6decf 485 frequencyValve1 = countValve1; //частота (Гц) срабатывания клапана 1
Aleksk 0:f2aaa8c6decf 486 frequencyValve2 = countValve2; //частота (Гц) срабатывания клапана 2
Aleksk 0:f2aaa8c6decf 487 countValve1=0;
Aleksk 0:f2aaa8c6decf 488 countValve2=0;
Aleksk 0:f2aaa8c6decf 489 }
Aleksk 6:fe0a7180ebb7 490 //--------------------==_ALARM_scope_Begin==----------------------
Aleksk 6:fe0a7180ebb7 491 if (Pd >= Pd_eeprom) {
Aleksk 6:fe0a7180ebb7 492 event_N = 0;
Aleksk 6:fe0a7180ebb7 493 }
Aleksk 6:fe0a7180ebb7 494 if (frequencyValve1 >= frequencyValve1_eeprom) {
Aleksk 6:fe0a7180ebb7 495 event_N = 1;
Aleksk 6:fe0a7180ebb7 496 }
Aleksk 6:fe0a7180ebb7 497 if (frequencyValve2 >= frequencyValve2_eeprom) {
Aleksk 6:fe0a7180ebb7 498 event_N = 2;
Aleksk 6:fe0a7180ebb7 499 }
Aleksk 6:fe0a7180ebb7 500 if (WL <= WL01_eeprom) {
Aleksk 6:fe0a7180ebb7 501 event_N = 3;
Aleksk 6:fe0a7180ebb7 502 }
Aleksk 6:fe0a7180ebb7 503 if (WL >= WL99_eeprom) {
Aleksk 6:fe0a7180ebb7 504 event_N = 4;
Aleksk 6:fe0a7180ebb7 505 }
Aleksk 6:fe0a7180ebb7 506 if (idigital_11.read()==1) {
Aleksk 6:fe0a7180ebb7 507 event_N = 5;
Aleksk 6:fe0a7180ebb7 508 }
Aleksk 6:fe0a7180ebb7 509 if (idigital_12.read()==1) {
Aleksk 6:fe0a7180ebb7 510 event_N = 6;
Aleksk 6:fe0a7180ebb7 511 }
Aleksk 6:fe0a7180ebb7 512 if (idigital_13.read()==1) {
Aleksk 6:fe0a7180ebb7 513 event_N = 7;
Aleksk 6:fe0a7180ebb7 514 }
Aleksk 0:f2aaa8c6decf 515
Aleksk 6:fe0a7180ebb7 516 //-----------------Valve1 open time----------------------
Aleksk 6:fe0a7180ebb7 517 if (digital_4.read() == 0) {
Aleksk 6:fe0a7180ebb7 518 timer_2.reset();
Aleksk 6:fe0a7180ebb7 519 time_2 = 0;
Aleksk 6:fe0a7180ebb7 520 } else {
Aleksk 6:fe0a7180ebb7 521 time_2 = timer_2.read_ms();
Aleksk 6:fe0a7180ebb7 522 }
Aleksk 6:fe0a7180ebb7 523 if (time_2 >= T_1) {
Aleksk 6:fe0a7180ebb7 524 event_N = 8;
Aleksk 6:fe0a7180ebb7 525 }
Aleksk 6:fe0a7180ebb7 526 //-----------------Valve2 open time----------------------
Aleksk 6:fe0a7180ebb7 527 if (digital_7.read() == 0) {
Aleksk 6:fe0a7180ebb7 528 timer_3.reset();
Aleksk 6:fe0a7180ebb7 529 time_3 = 0;
Aleksk 6:fe0a7180ebb7 530 } else {
Aleksk 6:fe0a7180ebb7 531 time_3 = timer_3.read_ms();
Aleksk 6:fe0a7180ebb7 532 }
Aleksk 6:fe0a7180ebb7 533 if (time_3 >= T_2) {
Aleksk 6:fe0a7180ebb7 534 event_N = 9;
Aleksk 6:fe0a7180ebb7 535 }
Aleksk 6:fe0a7180ebb7 536 //--------------------==_ALARM_scope_End==----------------------
Aleksk 6:fe0a7180ebb7 537
Aleksk 6:fe0a7180ebb7 538
Aleksk 6:fe0a7180ebb7 539 auto_set(); //включение-выкючение компрессора через flag_compressor
Aleksk 6:fe0a7180ebb7 540 //led = !led; //гасим/зажигаем индикаторный светодиод
Aleksk 0:f2aaa8c6decf 541 }
Aleksk 0:f2aaa8c6decf 542 ThisThread::sleep_for(1); // (mc) правильный оператор задержки для mbed5
Aleksk 0:f2aaa8c6decf 543 counter_cycle1++;
Aleksk 0:f2aaa8c6decf 544
Aleksk 0:f2aaa8c6decf 545 }
Aleksk 0:f2aaa8c6decf 546 }