
The weight is now transmitted in Newtons. For this, two bytes are transferred over the i2c bus instead of one.
main.cpp@12:de8c39bf5da3, 2021-10-15 (annotated)
- Committer:
- Aleksk
- Date:
- Fri Oct 15 10:15:22 2021 +0000
- Revision:
- 12:de8c39bf5da3
- Parent:
- 11:86a18c130515
The weight is now transmitted in Newtons. For this, two bytes are transferred over the i2c bus instead of one.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Aleksk | 12:de8c39bf5da3 | 1 | // 11.10.2021 Продолжение (клон )mbed-os5-press22 |
Aleksk | 12:de8c39bf5da3 | 2 | //19. Теперь вес принимается по шине i2c в Ньютонах, как на дисплее динамометра. |
Aleksk | 12:de8c39bf5da3 | 3 | //18. По шине i2c Arduino Nano с адресом 2, передает значение веса с дискретностью 1 кг, приём происходит раз в секунду, используется timer. |
Aleksk | 12:de8c39bf5da3 | 4 | //17. digital pin 11, pin 12 as an input концевики теперь нормально замкнутые. |
Aleksk | 12:de8c39bf5da3 | 5 | //16. Вернул timer_4. Теперь он периодически открывает выпускной клапан для контроля утечек воды. |
Aleksk | 12:de8c39bf5da3 | 6 | //15. Вместо pc.printf("Reset ALARM \r\n") теперь plotter.printf("Reset ALARM \r\n") это нужно для парсера программы Setup_EEPROM. |
Aleksk | 12:de8c39bf5da3 | 7 | //14. Удалена команда pc.printf, посылающая пустую строку раз в секунду и связанный с ней timer_4, т.к. изменена программа оператора (Loc()). |
Aleksk | 12:de8c39bf5da3 | 8 | //13. Суммирование значений каналов А0 А1 А2 было 9 раз, исправлено на 10. |
Aleksk | 12:de8c39bf5da3 | 9 | //12. Передаваемые через pc.printf сообщения в РС дополнены контрольными суммами для увеличения надёжности связи. |
Aleksk | 12:de8c39bf5da3 | 10 | //11. Введена команда pc.printf, посылающая пустую строку раз в секунду, на случай потери (порчи )данных при пересылке и |
Aleksk | 9:6bd6ac6ca7d4 | 11 | // возможного зависания программы оператора при ожидании символа из serial порта (для этого добавлен timer_4). |
Aleksk | 12:de8c39bf5da3 | 12 | //10. Значения уставок EEPROM2 выводяться в pc.print в специальной строке с текущими данными диагностики. |
Aleksk | 12:de8c39bf5da3 | 13 | //9. Сделан дополнительный блок в парсере для декодирования приходящих аварийных уставок, они пишутся в EEPROM2. |
Aleksk | 12:de8c39bf5da3 | 14 | //8. Сделан timer_2 для отсчёта времени открытого состояния вентиля 1. |
Aleksk | 12:de8c39bf5da3 | 15 | // Сделан timer_3 для отсчёта времени открытого состояния вентиля 2. |
Aleksk | 12:de8c39bf5da3 | 16 | //7. Подключены цифровые входы D11,D12,D13. Реализованы условия остановки по 10 аварийным событиям. |
Aleksk | 12:de8c39bf5da3 | 17 | //6. Реализован сброс события (event_N = 255) через кнопку Стоп в программе оператора . |
Aleksk | 12:de8c39bf5da3 | 18 | //5. Принимается флаг от кнопки Стоп - полной остановки регулятора - закрытие всех 4-х клапанов и передача статуса кнопки в программу оператора. |
Aleksk | 12:de8c39bf5da3 | 19 | // Принимается флаг от кнопок включения - выключения компрессора, - идет команда на дискретный выход digital_6(PB_10) |
Aleksk | 12:de8c39bf5da3 | 20 | //4. Принимается новая уставка num_chan - переключение номера активного измерительного канала для обратной связи регулятора. |
Aleksk | 12:de8c39bf5da3 | 21 | // эта уставка, как и все остальные, пишется в EEPROM. |
Aleksk | 12:de8c39bf5da3 | 22 | //3. Включены все шесть аналоговых входа, читаются пять. |
Aleksk | 12:de8c39bf5da3 | 23 | //2. При получении командной строки с нулевой суммой, по новому флагу flag_zerostart, передаётся в сериал текущие уставки и величины |
Aleksk | 12:de8c39bf5da3 | 24 | // (важно для старта программы на PC), эти нулевые уставки не вводятся в регулятор и не записываются в EEPROM. |
Aleksk | 12:de8c39bf5da3 | 25 | //1. Сторожевой таймер, истекает через 100мс. |
Aleksk | 4:c34b84bfa2fb | 26 | // |
Aleksk | 4:c34b84bfa2fb | 27 | |
Aleksk | 0:f2aaa8c6decf | 28 | #include "mbed.h" |
Aleksk | 2:8230a5a4cc13 | 29 | #include "_24LCXXX.h" |
Aleksk | 2:8230a5a4cc13 | 30 | |
Aleksk | 2:8230a5a4cc13 | 31 | I2C i2c(PB_9,PB_8); // sda, scl |
Aleksk | 2:8230a5a4cc13 | 32 | _24LCXXX eeprom(&i2c, 0x50); |
Aleksk | 11:86a18c130515 | 33 | const int addr7bit = 0x02; // 7 bit I2C address slave Arduino_Nano |
Aleksk | 11:86a18c130515 | 34 | const int addr8bit = 0x02 << 1; // 8bit I2C address, 0x90 |
Aleksk | 0:f2aaa8c6decf | 35 | |
Aleksk | 4:c34b84bfa2fb | 36 | AnalogIn analog_value_0(A0); //подключение аналогового входа A0 |
Aleksk | 4:c34b84bfa2fb | 37 | AnalogIn analog_value_1(A1); //подключение аналогового входа A1 |
Aleksk | 4:c34b84bfa2fb | 38 | AnalogIn analog_value_2(A2); //подключение аналогового входа A2 |
Aleksk | 4:c34b84bfa2fb | 39 | AnalogIn analog_value_3(A3); //подключение аналогового входа A3 |
Aleksk | 4:c34b84bfa2fb | 40 | AnalogIn analog_value_4(A4); //подключение аналогового входа A4 |
Aleksk | 4:c34b84bfa2fb | 41 | AnalogIn analog_value_5(A5); //подключение аналогового входа A5 |
Aleksk | 6:fe0a7180ebb7 | 42 | //DigitalOut led(LED1); |
Aleksk | 0:f2aaa8c6decf | 43 | DigitalOut digital_4(PB_5); //initialize digital pin 4 as an output (high pressure air bulb charge). |
Aleksk | 4:c34b84bfa2fb | 44 | DigitalOut digital_7(PA_8); //initialize digital pin 7 as an output. (high pressure air bulb discharge) |
Aleksk | 4:c34b84bfa2fb | 45 | DigitalOut digital_5(PB_4); //initialize digital pin 5 as an output (valve3,4) |
Aleksk | 4:c34b84bfa2fb | 46 | DigitalOut digital_6(PB_10); //initialize digital pin 6 as an output (compressor on/off) |
Aleksk | 6:fe0a7180ebb7 | 47 | DigitalIn idigital_11(PA_7); //initialize digital pin 11 as an input концевик при растяжении сильфона |
Aleksk | 6:fe0a7180ebb7 | 48 | DigitalIn idigital_12(PA_6); //initialize digital pin 12 as an input концевик при сжатии сильфона |
Aleksk | 7:97881cd71b31 | 49 | DigitalIn idigital_13(PA_5); //initialize digital pin 13 as an input внутрь опрессовщика попала вода |
Aleksk | 4:c34b84bfa2fb | 50 | |
Aleksk | 4:c34b84bfa2fb | 51 | RawSerial plotter(USBTX, USBRX, 115200); // tx, rx for F411RE port for serial_plotter and temporary messages |
Aleksk | 4:c34b84bfa2fb | 52 | RawSerial pc(PA_9, PA_10, 115200); // tx, rx for F411RE port for command string distance PC |
Aleksk | 0:f2aaa8c6decf | 53 | EventQueue *queue = mbed_event_queue(); //инициализация очереди событий RTOS mbed5 |
Aleksk | 6:fe0a7180ebb7 | 54 | Timer timer; //инициализация таймера для определения частот переключений вентилей 1 и 2 |
Aleksk | 6:fe0a7180ebb7 | 55 | Timer timer_2; //инициализация таймера 2 для отсчёта времени открытого состояния вентиля 1 |
Aleksk | 6:fe0a7180ebb7 | 56 | Timer timer_3; //инициализация таймера 3 для отсчёта времени открытого состояния вентиля 2 |
Aleksk | 10:b6de15a30716 | 57 | Timer timer_4; //инициализация таймера 4 для отсчёта периода времени между контрольными открываниями вентиля 2 |
Aleksk | 6:fe0a7180ebb7 | 58 | //========УСТАВКИ_1 EEPROM======== |
Aleksk | 5:bb595cde0c82 | 59 | uint8_t delta_value = 0; //set delta pressure 1...99 |
Aleksk | 6:fe0a7180ebb7 | 60 | uint8_t flag_compressor = 0; //флаг компрессора. При 0 - выключение компрессора, при 1 - включение компрессора |
Aleksk | 6:fe0a7180ebb7 | 61 | uint8_t flag_stopRegulator = 0; //Stop- флаг . При 0 - разрешение работы регулятора, при 1 - запрет и запиране всех клапанов |
Aleksk | 5:bb595cde0c82 | 62 | uint8_t num_chan = 1; //set номер аналогового канала 0...5 (1-as default = Pa) |
Aleksk | 4:c34b84bfa2fb | 63 | int value = 0; //set begin value "pressure" 1...3300 |
Aleksk | 6:fe0a7180ebb7 | 64 | //========УСТАВКИ_2 EEPROM======== |
Aleksk | 6:fe0a7180ebb7 | 65 | int Pd_eeprom = 2000; // mV, максимальное дифференциальное давление (беззнаковое) |
Aleksk | 6:fe0a7180ebb7 | 66 | int frequencyValve1_eeprom = 5; // Гц, максимальная частота переключений клапана 1 |
Aleksk | 6:fe0a7180ebb7 | 67 | int frequencyValve2_eeprom = 5; // Гц, максимальная частота переключений клапана 2 |
Aleksk | 6:fe0a7180ebb7 | 68 | int WL01_eeprom = 10; // mV, минимальный вес опрессовщика |
Aleksk | 6:fe0a7180ebb7 | 69 | int WL99_eeprom = 2000; // mV, максимальный вес опрессовщика |
Aleksk | 6:fe0a7180ebb7 | 70 | int T_1 = 4000; // ms, максимальное время открытого состояния для клапана 1 |
Aleksk | 6:fe0a7180ebb7 | 71 | int T_2 = 4000; // ms, максимальное время открытого состояния для клапана 2 |
Aleksk | 6:fe0a7180ebb7 | 72 | uint8_t event_N = 255; // номер события , по умолчанию 255 - событий нет |
Aleksk | 7:97881cd71b31 | 73 | uint8_t flag_stopRegulatorEEPROM = 0; //если 1 остановка регулятора, когда вручную управляют клапанами через программу SetUp_EEPROM |
Aleksk | 10:b6de15a30716 | 74 | int openTimeV2_H2O = 2; // ms, Время открытого состояния вентиля V2 для датчика влаги должно быть меньше WDlimit=100ms |
Aleksk | 10:b6de15a30716 | 75 | int periodV2_H2O = 10000; // ms, Период открывания вентиля V2 для датчика влаги |
Aleksk | 10:b6de15a30716 | 76 | |
Aleksk | 6:fe0a7180ebb7 | 77 | //======temporary set===== |
Aleksk | 6:fe0a7180ebb7 | 78 | int numSet, anySet; |
Aleksk | 6:fe0a7180ebb7 | 79 | //================================= |
Aleksk | 0:f2aaa8c6decf | 80 | int value_auto=250 ; //set begin value auto "pressure" |
Aleksk | 12:de8c39bf5da3 | 81 | int WL = 0; // WL - вес опресовщика |
Aleksk | 4:c34b84bfa2fb | 82 | int sensor_value =0; //напряжение с аналогового входа А1 (Pa - текущее давление) |
Aleksk | 4:c34b84bfa2fb | 83 | int Pb = 0; //напряжение с аналогового входа А2 (Pb - давление в баллоне) |
Aleksk | 4:c34b84bfa2fb | 84 | int Pw1 = 0; //напряжение с аналогового входа А3 (Pw1 - давление воды на входе опрессовщика) |
Aleksk | 4:c34b84bfa2fb | 85 | int Pw2 = 0; //напряжение с аналогового входа А4 (Pw2 - давление воды в контуре макета) |
Aleksk | 4:c34b84bfa2fb | 86 | int Pd = 0; //напряжение с аналогового входа А5 (Pd - дифференциальное давление опресовщика) |
Aleksk | 2:8230a5a4cc13 | 87 | int counter_cycle1 = 0; //счётчик цикла while(true) |
Aleksk | 2:8230a5a4cc13 | 88 | int counter_cycle2 = 0; //счётчик внутри функции auto_set |
Aleksk | 0:f2aaa8c6decf | 89 | int sig = 1; //знак инкримента для автоустаки |
Aleksk | 6:fe0a7180ebb7 | 90 | |
Aleksk | 0:f2aaa8c6decf | 91 | // FIFO_buffer must be full (only char and '\0') |
Aleksk | 5:bb595cde0c82 | 92 | //#define maxnsym 26 // maximum nbr of symbols FIFO_buffer (вариант без символов окончания) |
Aleksk | 5:bb595cde0c82 | 93 | #define maxnsym 28 // maximum nbr of symbols FIFO_buffer +CR+LF (символы окончания должны быть включены на передаче) |
Aleksk | 5:bb595cde0c82 | 94 | char Source[maxnsym]="$press,1000,25,0,0,1,2050**"; //25 char- string ,весь массив со строкой для поиска 25+1(null terminal)=26 |
Aleksk | 0:f2aaa8c6decf | 95 | //уставки и контрольная сумма умноженная на два, должны быть больше нуля |
Aleksk | 0:f2aaa8c6decf | 96 | char trueSource[maxnsym]; //верифицированная строка для callback |
Aleksk | 2:8230a5a4cc13 | 97 | char trueSourceOld[maxnsym]; //предыдущая верифицированная строка для callback |
Aleksk | 6:fe0a7180ebb7 | 98 | char trueSource2[maxnsym]; //верифицированная строка для callback |
Aleksk | 6:fe0a7180ebb7 | 99 | char trueSource2Old[maxnsym]; //предыдущая верифицированная строка для callback |
Aleksk | 0:f2aaa8c6decf | 100 | |
Aleksk | 4:c34b84bfa2fb | 101 | volatile char chr_a; //в прерываниях переменные должны быть защищены при помощи volatile от оптимизации компилятором |
Aleksk | 4:c34b84bfa2fb | 102 | volatile bool flag_comand_detected = false; //если строка декодирована правильно то true |
Aleksk | 6:fe0a7180ebb7 | 103 | volatile bool flag_comand2_detected = false; //если строка в блоке парсинга уставок eeprom декодирована правильно то true |
Aleksk | 4:c34b84bfa2fb | 104 | volatile bool flag_zerostart = false; //если строка декодирована c нулевой контрольной суммой то true |
Aleksk | 6:fe0a7180ebb7 | 105 | //volatile bool flag_stopRegulator = true; //флаг остановки , закрыть все клапана |
Aleksk | 2:8230a5a4cc13 | 106 | //_____________________________________________________________________________ |
Aleksk | 2:8230a5a4cc13 | 107 | void save_EEPROM () { |
Aleksk | 2:8230a5a4cc13 | 108 | int data2; |
Aleksk | 4:c34b84bfa2fb | 109 | plotter.printf("EEPROM write------\r\n"); |
Aleksk | 2:8230a5a4cc13 | 110 | eeprom.byte_write(0, delta_value); |
Aleksk | 6:fe0a7180ebb7 | 111 | eeprom.byte_write(1, flag_compressor); |
Aleksk | 6:fe0a7180ebb7 | 112 | eeprom.byte_write(2, flag_stopRegulator); |
Aleksk | 5:bb595cde0c82 | 113 | eeprom.byte_write(3, num_chan); |
Aleksk | 2:8230a5a4cc13 | 114 | data2 = value; |
Aleksk | 2:8230a5a4cc13 | 115 | eeprom.nbyte_write( 10, &data2, sizeof(int)); |
Aleksk | 2:8230a5a4cc13 | 116 | } |
Aleksk | 7:97881cd71b31 | 117 | void save_EEPROM2 () { |
Aleksk | 7:97881cd71b31 | 118 | int data2; |
Aleksk | 7:97881cd71b31 | 119 | plotter.printf("EEPROM2 write------\r\n"); |
Aleksk | 7:97881cd71b31 | 120 | eeprom.nbyte_read( 100, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 121 | if (data2 != Pd_eeprom) { //записываем в eeprom только изменившиеся значения (одна из семи уставок) |
Aleksk | 7:97881cd71b31 | 122 | data2 = Pd_eeprom; |
Aleksk | 7:97881cd71b31 | 123 | eeprom.nbyte_write( 100, &data2, sizeof(int)); |
Aleksk | 7:97881cd71b31 | 124 | } |
Aleksk | 7:97881cd71b31 | 125 | eeprom.nbyte_read( 110, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 126 | if (data2 != frequencyValve1_eeprom){ |
Aleksk | 7:97881cd71b31 | 127 | data2 = frequencyValve1_eeprom; |
Aleksk | 7:97881cd71b31 | 128 | eeprom.nbyte_write( 110, &data2, sizeof(int)); |
Aleksk | 7:97881cd71b31 | 129 | } |
Aleksk | 7:97881cd71b31 | 130 | eeprom.nbyte_read( 120, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 131 | if (data2 != frequencyValve2_eeprom){ |
Aleksk | 7:97881cd71b31 | 132 | data2 = frequencyValve2_eeprom; |
Aleksk | 7:97881cd71b31 | 133 | eeprom.nbyte_write( 120, &data2, sizeof(int)); |
Aleksk | 7:97881cd71b31 | 134 | } |
Aleksk | 7:97881cd71b31 | 135 | eeprom.nbyte_read( 130, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 136 | if (data2 != WL01_eeprom){ |
Aleksk | 7:97881cd71b31 | 137 | data2 = WL01_eeprom; |
Aleksk | 7:97881cd71b31 | 138 | eeprom.nbyte_write( 130, &data2, sizeof(int)); |
Aleksk | 7:97881cd71b31 | 139 | } |
Aleksk | 7:97881cd71b31 | 140 | eeprom.nbyte_read( 140, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 141 | if (data2 != WL99_eeprom){ |
Aleksk | 7:97881cd71b31 | 142 | data2 = WL99_eeprom; |
Aleksk | 7:97881cd71b31 | 143 | eeprom.nbyte_write( 140, &data2, sizeof(int)); |
Aleksk | 7:97881cd71b31 | 144 | } |
Aleksk | 7:97881cd71b31 | 145 | eeprom.nbyte_read( 180, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 146 | if (data2 != T_1){ |
Aleksk | 7:97881cd71b31 | 147 | data2 = T_1; |
Aleksk | 7:97881cd71b31 | 148 | eeprom.nbyte_write( 180, &data2, sizeof(int)); |
Aleksk | 7:97881cd71b31 | 149 | } |
Aleksk | 7:97881cd71b31 | 150 | eeprom.nbyte_read( 190, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 151 | if (data2 != T_2){ |
Aleksk | 7:97881cd71b31 | 152 | data2 = T_2; |
Aleksk | 7:97881cd71b31 | 153 | eeprom.nbyte_write( 190, &data2, sizeof(int)); |
Aleksk | 7:97881cd71b31 | 154 | } |
Aleksk | 10:b6de15a30716 | 155 | eeprom.nbyte_read( 200, &data2, sizeof(int) ); |
Aleksk | 10:b6de15a30716 | 156 | if (data2 != openTimeV2_H2O){ |
Aleksk | 10:b6de15a30716 | 157 | data2 = openTimeV2_H2O; |
Aleksk | 10:b6de15a30716 | 158 | eeprom.nbyte_write( 200, &data2, sizeof(int)); |
Aleksk | 10:b6de15a30716 | 159 | } |
Aleksk | 10:b6de15a30716 | 160 | eeprom.nbyte_read( 210, &data2, sizeof(int) ); |
Aleksk | 10:b6de15a30716 | 161 | if (data2 != periodV2_H2O){ |
Aleksk | 10:b6de15a30716 | 162 | data2 = periodV2_H2O; |
Aleksk | 10:b6de15a30716 | 163 | eeprom.nbyte_write( 210, &data2, sizeof(int)); |
Aleksk | 10:b6de15a30716 | 164 | } |
Aleksk | 7:97881cd71b31 | 165 | } |
Aleksk | 2:8230a5a4cc13 | 166 | //_____________________________________________________________________________ |
Aleksk | 2:8230a5a4cc13 | 167 | void load_EEPROM () { |
Aleksk | 2:8230a5a4cc13 | 168 | uint8_t data1; |
Aleksk | 2:8230a5a4cc13 | 169 | int data2; |
Aleksk | 4:c34b84bfa2fb | 170 | plotter.printf("EEPROM read------\r\n"); |
Aleksk | 2:8230a5a4cc13 | 171 | eeprom.nbyte_read( 0, &data1, 1 ); |
Aleksk | 4:c34b84bfa2fb | 172 | plotter.printf("adress 0 =%d \r\n",data1); |
Aleksk | 2:8230a5a4cc13 | 173 | delta_value=data1; |
Aleksk | 2:8230a5a4cc13 | 174 | eeprom.nbyte_read( 1, &data1, 1 ); |
Aleksk | 4:c34b84bfa2fb | 175 | plotter.printf("adress 1 =%d \r\n",data1); |
Aleksk | 6:fe0a7180ebb7 | 176 | flag_compressor=data1; |
Aleksk | 2:8230a5a4cc13 | 177 | eeprom.nbyte_read( 2, &data1, 1 ); |
Aleksk | 4:c34b84bfa2fb | 178 | plotter.printf("adress 2 =%d \r\n",data1); |
Aleksk | 6:fe0a7180ebb7 | 179 | flag_stopRegulator=data1; |
Aleksk | 5:bb595cde0c82 | 180 | eeprom.nbyte_read( 3, &data1, 1 ); |
Aleksk | 5:bb595cde0c82 | 181 | plotter.printf("adress 3 =%d \r\n",data1); |
Aleksk | 5:bb595cde0c82 | 182 | num_chan=data1; |
Aleksk | 2:8230a5a4cc13 | 183 | eeprom.nbyte_read( 10, &data2, sizeof(int) ); |
Aleksk | 4:c34b84bfa2fb | 184 | plotter.printf("adress 10 = %d \r\n",data2); |
Aleksk | 2:8230a5a4cc13 | 185 | value=data2; |
Aleksk | 2:8230a5a4cc13 | 186 | } |
Aleksk | 7:97881cd71b31 | 187 | void load_EEPROM2 () { |
Aleksk | 7:97881cd71b31 | 188 | int data2; |
Aleksk | 7:97881cd71b31 | 189 | plotter.printf("EEPROM2 read------\r\n"); |
Aleksk | 7:97881cd71b31 | 190 | eeprom.nbyte_read( 100, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 191 | //pc.printf("$adress,100,%d,*\r\n",data2); |
Aleksk | 7:97881cd71b31 | 192 | Pd_eeprom=data2; |
Aleksk | 7:97881cd71b31 | 193 | eeprom.nbyte_read( 110, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 194 | //pc.printf("$adress,110,%d,*\r\n",data2); |
Aleksk | 7:97881cd71b31 | 195 | frequencyValve1_eeprom=data2; |
Aleksk | 7:97881cd71b31 | 196 | eeprom.nbyte_read( 120, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 197 | //pc.printf("$adress,120,%d,*\r\n",data2); |
Aleksk | 7:97881cd71b31 | 198 | frequencyValve2_eeprom=data2; |
Aleksk | 7:97881cd71b31 | 199 | eeprom.nbyte_read( 130, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 200 | //pc.printf("$adress,130,%d,*\r\n",data2); |
Aleksk | 7:97881cd71b31 | 201 | WL01_eeprom=data2; |
Aleksk | 7:97881cd71b31 | 202 | eeprom.nbyte_read( 140, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 203 | //pc.printf("$adress,140,%d,*\r\n",data2); |
Aleksk | 7:97881cd71b31 | 204 | WL99_eeprom=data2; |
Aleksk | 7:97881cd71b31 | 205 | eeprom.nbyte_read( 180, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 206 | //pc.printf("$adress,180,%d,*\r\n",data2); |
Aleksk | 7:97881cd71b31 | 207 | T_1=data2; |
Aleksk | 7:97881cd71b31 | 208 | eeprom.nbyte_read( 190, &data2, sizeof(int) ); |
Aleksk | 7:97881cd71b31 | 209 | //pc.printf("$adress,190,%d,*\r\n",data2); |
Aleksk | 7:97881cd71b31 | 210 | T_2=data2; |
Aleksk | 10:b6de15a30716 | 211 | eeprom.nbyte_read( 200, &data2, sizeof(int) ); |
Aleksk | 10:b6de15a30716 | 212 | //pc.printf("$adress,200,%d,*\r\n",data2); |
Aleksk | 10:b6de15a30716 | 213 | openTimeV2_H2O=data2; |
Aleksk | 10:b6de15a30716 | 214 | eeprom.nbyte_read( 210, &data2, sizeof(int) ); |
Aleksk | 10:b6de15a30716 | 215 | //pc.printf("$adress,210,%d,*\r\n",data2); |
Aleksk | 10:b6de15a30716 | 216 | periodV2_H2O=data2; |
Aleksk | 10:b6de15a30716 | 217 | //pc.printf("$adress,%d,%d,%d,%d,%d,%d,%d,%d,%d,*\r\n",Pd_eeprom,frequencyValve1_eeprom,frequencyValve2_eeprom,WL01_eeprom,WL99_eeprom,T_1,T_2,openTimeV2_H2O,periodV2_H2O); |
Aleksk | 7:97881cd71b31 | 218 | } |
Aleksk | 0:f2aaa8c6decf | 219 | //______________________________________________________________________________ |
Aleksk | 0:f2aaa8c6decf | 220 | void substring(char *s,char *d,int pos,int len) { |
Aleksk | 0:f2aaa8c6decf | 221 | //usage: substring(Source,Destination,pos,len); |
Aleksk | 0:f2aaa8c6decf | 222 | char *t; |
Aleksk | 0:f2aaa8c6decf | 223 | s=s+(pos-1); |
Aleksk | 0:f2aaa8c6decf | 224 | t=s+len; |
Aleksk | 0:f2aaa8c6decf | 225 | while (s!=t) { |
Aleksk | 0:f2aaa8c6decf | 226 | *d=*s; |
Aleksk | 0:f2aaa8c6decf | 227 | s++; |
Aleksk | 0:f2aaa8c6decf | 228 | d++; |
Aleksk | 0:f2aaa8c6decf | 229 | } |
Aleksk | 0:f2aaa8c6decf | 230 | *d='\0'; |
Aleksk | 0:f2aaa8c6decf | 231 | } |
Aleksk | 0:f2aaa8c6decf | 232 | //______________________________________________________________________________ |
Aleksk | 0:f2aaa8c6decf | 233 | void onDataReceived(); // callback |
Aleksk | 0:f2aaa8c6decf | 234 | //______________________________________________________________________________ |
Aleksk | 0:f2aaa8c6decf | 235 | void read_serial(void) { |
Aleksk | 0:f2aaa8c6decf | 236 | char Destination[50]; |
Aleksk | 0:f2aaa8c6decf | 237 | int pos,len; |
Aleksk | 0:f2aaa8c6decf | 238 | int controlSum1, controlSum2; |
Aleksk | 6:fe0a7180ebb7 | 239 | int value_, delta_value_, flag_compressor_, flag_stopRegulator_, num_chan_; |
Aleksk | 6:fe0a7180ebb7 | 240 | int controlSumSet1, controlSumSet2; |
Aleksk | 6:fe0a7180ebb7 | 241 | int numSet_, anySet_; |
Aleksk | 0:f2aaa8c6decf | 242 | int ch = '$'; // Код искомого символа |
Aleksk | 0:f2aaa8c6decf | 243 | int indexCh; // Char on position |
Aleksk | 0:f2aaa8c6decf | 244 | char *ach; // Указатель на искомую переменную в строке, по которой осуществляется поиск. |
Aleksk | 0:f2aaa8c6decf | 245 | while(pc.readable()) { |
Aleksk | 0:f2aaa8c6decf | 246 | chr_a = pc.getc(); |
Aleksk | 0:f2aaa8c6decf | 247 | //_____FIFO_buffer_begin_____ |
Aleksk | 0:f2aaa8c6decf | 248 | for ( int i = 2; i < maxnsym; i++) { |
Aleksk | 0:f2aaa8c6decf | 249 | Source[i-2]=Source[i-1]; |
Aleksk | 0:f2aaa8c6decf | 250 | } |
Aleksk | 0:f2aaa8c6decf | 251 | Source[maxnsym-2]=chr_a; //предпоследний элемент |
Aleksk | 0:f2aaa8c6decf | 252 | Source[maxnsym-1] ='\0'; //последний элемент массива это нуль-терминал для формирования конца строки в Си |
Aleksk | 0:f2aaa8c6decf | 253 | //_____FIFO_buffer_end_______ |
Aleksk | 0:f2aaa8c6decf | 254 | } |
Aleksk | 0:f2aaa8c6decf | 255 | ach=strchr (Source,ch); //поиск первого вхождения символа в строку , ищем указатель символа ‘$’ |
Aleksk | 0:f2aaa8c6decf | 256 | if (ach==NULL) { |
Aleksk | 0:f2aaa8c6decf | 257 | //pc.printf ("Char not finded \r\n"); //Символ $ в строке не найден |
Aleksk | 0:f2aaa8c6decf | 258 | goto endParsing; //пропускаем парсинг |
Aleksk | 0:f2aaa8c6decf | 259 | } |
Aleksk | 0:f2aaa8c6decf | 260 | else { |
Aleksk | 0:f2aaa8c6decf | 261 | indexCh = ach-Source+1; //вычитаем указатель из указателя! |
Aleksk | 0:f2aaa8c6decf | 262 | //pc.printf ("Char '$' on position %d\r\n",indexCh); //Искомый символ в строке на позиции |
Aleksk | 0:f2aaa8c6decf | 263 | } |
Aleksk | 0:f2aaa8c6decf | 264 | if (indexCh!=1) { //позиция символа $ не 1 |
Aleksk | 0:f2aaa8c6decf | 265 | //pc.printf ("$ position not 1 \r\n"); |
Aleksk | 0:f2aaa8c6decf | 266 | goto endParsing; //пропускаем парсинг |
Aleksk | 0:f2aaa8c6decf | 267 | } |
Aleksk | 0:f2aaa8c6decf | 268 | |
Aleksk | 0:f2aaa8c6decf | 269 | pos=1; //начало подстроки $press - на 1 позиции |
Aleksk | 0:f2aaa8c6decf | 270 | len=6; //длина подстроки $press равна 6 |
Aleksk | 0:f2aaa8c6decf | 271 | substring(Source,Destination,pos,len); |
Aleksk | 0:f2aaa8c6decf | 272 | //pc.printf("for pos=%d and len=%d resultat is d= %s\r\n", pos, len, Destination); |
Aleksk | 0:f2aaa8c6decf | 273 | |
Aleksk | 0:f2aaa8c6decf | 274 | if (strcmp(Destination,"$press" ) != 0) { //функция возвращает ноль если строки совпадают |
Aleksk | 0:f2aaa8c6decf | 275 | //pc.printf("wrong Destination=%s\r\n",Destination); //печать "неправильной" нулевой строки |
Aleksk | 6:fe0a7180ebb7 | 276 | goto eepromSet ; //в начале сообщения нет $press , переход с следующему блоку приёма |
Aleksk | 0:f2aaa8c6decf | 277 | } |
Aleksk | 0:f2aaa8c6decf | 278 | pos=8; //начало подстроки 1000 - на 8 позиции |
Aleksk | 0:f2aaa8c6decf | 279 | len=4; //длина подстроки 1000 равна 4 |
Aleksk | 0:f2aaa8c6decf | 280 | substring(Source,Destination,pos,len); |
Aleksk | 0:f2aaa8c6decf | 281 | value_=atoi(Destination); |
Aleksk | 4:c34b84bfa2fb | 282 | //if (value_==0) { |
Aleksk | 4:c34b84bfa2fb | 283 | // flag_zerostart = true; //индикатор первого пуска удаленной программы на PC без введенных уставок, надо передать текущее состояние на PC |
Aleksk | 4:c34b84bfa2fb | 284 | // goto endParsing; //уставка должна быть больше еденицы, пропускаем парсинг |
Aleksk | 4:c34b84bfa2fb | 285 | //} |
Aleksk | 0:f2aaa8c6decf | 286 | //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, value_); |
Aleksk | 0:f2aaa8c6decf | 287 | pos=13; //начало подстроки 25 - на 13 позиции |
Aleksk | 0:f2aaa8c6decf | 288 | len=2; //длина подстроки 25 равна 2 |
Aleksk | 0:f2aaa8c6decf | 289 | substring(Source,Destination,pos,len); |
Aleksk | 0:f2aaa8c6decf | 290 | delta_value_=atoi(Destination); |
Aleksk | 4:c34b84bfa2fb | 291 | //if (delta_value_==0) { |
Aleksk | 4:c34b84bfa2fb | 292 | // flag_zerostart = true; //индикатор первого пуска удаленной программы на PC без введенных уставок, надо передать текущее состояние на PC |
Aleksk | 4:c34b84bfa2fb | 293 | // goto endParsing; //уставка отклонения должна быть больше еденицы, пропускаем парсинг |
Aleksk | 4:c34b84bfa2fb | 294 | //} |
Aleksk | 0:f2aaa8c6decf | 295 | //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, delta_value_); |
Aleksk | 0:f2aaa8c6decf | 296 | pos=16; //начало подстроки 0 - на 16 позиции |
Aleksk | 0:f2aaa8c6decf | 297 | len=1; //длина подстроки 0 равна 1 |
Aleksk | 0:f2aaa8c6decf | 298 | substring(Source,Destination,pos,len); |
Aleksk | 6:fe0a7180ebb7 | 299 | flag_compressor_=atoi(Destination); |
Aleksk | 6:fe0a7180ebb7 | 300 | //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, flag_compressor_); |
Aleksk | 0:f2aaa8c6decf | 301 | pos=18; //начало подстроки 0 - на 18 позиции |
Aleksk | 0:f2aaa8c6decf | 302 | len=1; //длина подстроки 0 равна 1 |
Aleksk | 0:f2aaa8c6decf | 303 | substring(Source,Destination,pos,len); |
Aleksk | 6:fe0a7180ebb7 | 304 | flag_stopRegulator_=atoi(Destination); |
Aleksk | 6:fe0a7180ebb7 | 305 | //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, flag_stopRegulator_); |
Aleksk | 5:bb595cde0c82 | 306 | |
Aleksk | 5:bb595cde0c82 | 307 | pos=20; //начало подстроки 1 - на 20 позиции |
Aleksk | 5:bb595cde0c82 | 308 | len=1; //длина подстроки 1 равна 1 |
Aleksk | 5:bb595cde0c82 | 309 | substring(Source,Destination,pos,len); |
Aleksk | 5:bb595cde0c82 | 310 | num_chan_=atoi(Destination); |
Aleksk | 5:bb595cde0c82 | 311 | //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, num_chan_); |
Aleksk | 5:bb595cde0c82 | 312 | |
Aleksk | 5:bb595cde0c82 | 313 | pos=22; //начало подстроки 1025 - на 22 позиции |
Aleksk | 0:f2aaa8c6decf | 314 | len=4; //длина подстроки 1025 равна 4 |
Aleksk | 0:f2aaa8c6decf | 315 | substring(Source,Destination,pos,len); |
Aleksk | 0:f2aaa8c6decf | 316 | controlSum1=atoi(Destination); |
Aleksk | 5:bb595cde0c82 | 317 | if (controlSum1==2) { |
Aleksk | 5:bb595cde0c82 | 318 | flag_zerostart = true; //индикатор первого пуска удаленной программы на PC без введенных уставок, надо передать текущее состояние на PC |
Aleksk | 6:fe0a7180ebb7 | 319 | flag_compressor=flag_compressor_; //здесь можно включать-выключать компрессор, но без записи в EEPROM |
Aleksk | 5:bb595cde0c82 | 320 | goto endParsing; //контрольная сумма должна быть больше двух, пропускаем парсинг |
Aleksk | 0:f2aaa8c6decf | 321 | } |
Aleksk | 0:f2aaa8c6decf | 322 | //pc.printf("for pos=%d and len=%d resultat is d= %s atoi=%d\r\n", pos, len, Destination, controlSum1); |
Aleksk | 6:fe0a7180ebb7 | 323 | controlSum2=(value_+delta_value_+flag_compressor_+flag_stopRegulator_+num_chan_)*2; //удвоение чтобы не было одинаковых чисел в сообщении |
Aleksk | 0:f2aaa8c6decf | 324 | //pc.printf("controlSum1=%d controlSum2=%d\r\n", controlSum1, controlSum2); |
Aleksk | 0:f2aaa8c6decf | 325 | if (controlSum1!=controlSum2) { //не совпала контрольная сумма |
Aleksk | 0:f2aaa8c6decf | 326 | //pc.printf ("controlSum1!=controlSum2 \r\n"); |
Aleksk | 4:c34b84bfa2fb | 327 | goto endParsing; //пропускаем парсинг |
Aleksk | 0:f2aaa8c6decf | 328 | } |
Aleksk | 4:c34b84bfa2fb | 329 | //*********присваиваем проверенные значения глобальным переменным*********** |
Aleksk | 4:c34b84bfa2fb | 330 | strcpy(trueSource,Source); //копировать из Source в trueSource |
Aleksk | 6:fe0a7180ebb7 | 331 | if (value_==0 || delta_value_==0) { //при старте с пустой уставкой не изменяем их в регуляторе и не пишем в EEPROM |
Aleksk | 6:fe0a7180ebb7 | 332 | flag_compressor=flag_compressor_; |
Aleksk | 6:fe0a7180ebb7 | 333 | flag_stopRegulator=flag_stopRegulator_; //для работы кнопки Stop |
Aleksk | 4:c34b84bfa2fb | 334 | } else { |
Aleksk | 4:c34b84bfa2fb | 335 | value=value_; |
Aleksk | 4:c34b84bfa2fb | 336 | delta_value=delta_value_; |
Aleksk | 6:fe0a7180ebb7 | 337 | flag_compressor=flag_compressor_; |
Aleksk | 6:fe0a7180ebb7 | 338 | flag_stopRegulator=flag_stopRegulator_; |
Aleksk | 5:bb595cde0c82 | 339 | num_chan=num_chan_; |
Aleksk | 4:c34b84bfa2fb | 340 | } |
Aleksk | 7:97881cd71b31 | 341 | flag_stopRegulatorEEPROM = 0; //флаг остановки только релейного регулятора (теперь регулятор управляет клапанами!) |
Aleksk | 0:f2aaa8c6decf | 342 | flag_comand_detected=true; //если флаг true, то всем переменным присвоены новые значения уставок |
Aleksk | 6:fe0a7180ebb7 | 343 | goto endParsing ; //завершение блока приема рабочих уставок для работяющего релейного регулятора |
Aleksk | 6:fe0a7180ebb7 | 344 | |
Aleksk | 6:fe0a7180ebb7 | 345 | //========Начало блока приёма аварийных граничных (максимальных) уставок для записи в EEPROM =================== |
Aleksk | 6:fe0a7180ebb7 | 346 | eepromSet: |
Aleksk | 6:fe0a7180ebb7 | 347 | if (strcmp(Destination,"$setup" ) != 0) { //функция возвращает ноль если строки совпадают |
Aleksk | 6:fe0a7180ebb7 | 348 | //pc.printf("wrong Destination=%s\r\n",Destination); //печать "неправильной" нулевой строки |
Aleksk | 6:fe0a7180ebb7 | 349 | goto endParsing ; //в начале сообщения нет $setup , пропускаем парсинг |
Aleksk | 6:fe0a7180ebb7 | 350 | } |
Aleksk | 6:fe0a7180ebb7 | 351 | pos=8; //начало подстроки 123 - на 8 позиции |
Aleksk | 6:fe0a7180ebb7 | 352 | len=3; //длина подстроки 123 равна 3 |
Aleksk | 6:fe0a7180ebb7 | 353 | substring(Source,Destination,pos,len); |
Aleksk | 6:fe0a7180ebb7 | 354 | numSet_=atoi(Destination); |
Aleksk | 6:fe0a7180ebb7 | 355 | pos=12; //начало подстроки 123456 - на 12 позиции |
Aleksk | 6:fe0a7180ebb7 | 356 | len=6; //длина подстроки 123456 равна 6 |
Aleksk | 6:fe0a7180ebb7 | 357 | substring(Source,Destination,pos,len); |
Aleksk | 6:fe0a7180ebb7 | 358 | anySet_ =atoi(Destination); |
Aleksk | 6:fe0a7180ebb7 | 359 | pos=19; //начало подстроки 1234567 - на 19 позиции |
Aleksk | 6:fe0a7180ebb7 | 360 | len=7; //длина подстроки 1234567 равна 7 |
Aleksk | 6:fe0a7180ebb7 | 361 | substring(Source,Destination,pos,len); |
Aleksk | 6:fe0a7180ebb7 | 362 | controlSumSet1 =atoi(Destination); |
Aleksk | 6:fe0a7180ebb7 | 363 | controlSumSet2=(numSet_+anySet_)*2; |
Aleksk | 6:fe0a7180ebb7 | 364 | if (controlSumSet1!=controlSumSet2) { //не совпала контрольная сумма |
Aleksk | 6:fe0a7180ebb7 | 365 | //pc.printf ("controlSumSet1!=controlSumSet2 \r\n"); |
Aleksk | 6:fe0a7180ebb7 | 366 | goto endParsing; //пропускаем парсинг |
Aleksk | 6:fe0a7180ebb7 | 367 | } |
Aleksk | 6:fe0a7180ebb7 | 368 | //*********присваиваем проверенные значения глобальным переменным*********** |
Aleksk | 6:fe0a7180ebb7 | 369 | strcpy(trueSource2,Source); //копировать из Source в trueSource2 |
Aleksk | 6:fe0a7180ebb7 | 370 | if (numSet_==0) { //при старте с пустым номером не изменяем уставки и не пишем в EEPROM |
Aleksk | 6:fe0a7180ebb7 | 371 | goto endParsing; //пропускаем парсинг |
Aleksk | 6:fe0a7180ebb7 | 372 | } else { |
Aleksk | 6:fe0a7180ebb7 | 373 | numSet=numSet_; |
Aleksk | 6:fe0a7180ebb7 | 374 | anySet=anySet_; |
Aleksk | 6:fe0a7180ebb7 | 375 | } |
Aleksk | 7:97881cd71b31 | 376 | //При первом входе в режим $setup из режима $press - Закрываются все клапана |
Aleksk | 7:97881cd71b31 | 377 | if (flag_stopRegulatorEEPROM == 0) { |
Aleksk | 7:97881cd71b31 | 378 | digital_4.write(0); //valve1 off |
Aleksk | 7:97881cd71b31 | 379 | digital_7.write(0); //valve2 off |
Aleksk | 7:97881cd71b31 | 380 | digital_5.write(0); //valve3,4 off |
Aleksk | 7:97881cd71b31 | 381 | digital_6.write(0); //выключение компрессора |
Aleksk | 7:97881cd71b31 | 382 | } |
Aleksk | 0:f2aaa8c6decf | 383 | |
Aleksk | 6:fe0a7180ebb7 | 384 | switch ( numSet ) { |
Aleksk | 6:fe0a7180ebb7 | 385 | case 1: // это двоеточие |
Aleksk | 7:97881cd71b31 | 386 | digital_4.write(anySet); //valve1 |
Aleksk | 6:fe0a7180ebb7 | 387 | plotter.printf("1 Valve1=%d\r\n",anySet); |
Aleksk | 6:fe0a7180ebb7 | 388 | break; |
Aleksk | 6:fe0a7180ebb7 | 389 | case 2: |
Aleksk | 7:97881cd71b31 | 390 | digital_7.write(anySet); //valve2 |
Aleksk | 6:fe0a7180ebb7 | 391 | plotter.printf("2 Valve2=%d\r\n",anySet); |
Aleksk | 6:fe0a7180ebb7 | 392 | break; |
Aleksk | 6:fe0a7180ebb7 | 393 | case 3: |
Aleksk | 7:97881cd71b31 | 394 | digital_5.write(anySet); //valve3,4 |
Aleksk | 6:fe0a7180ebb7 | 395 | plotter.printf("3 Valve3,4=%d\r\n",anySet); |
Aleksk | 6:fe0a7180ebb7 | 396 | break; |
Aleksk | 6:fe0a7180ebb7 | 397 | case 4: |
Aleksk | 7:97881cd71b31 | 398 | digital_6.write(anySet); //компрессор |
Aleksk | 6:fe0a7180ebb7 | 399 | plotter.printf("4 Compressor=%d\r\n",anySet ); |
Aleksk | 6:fe0a7180ebb7 | 400 | break; |
Aleksk | 7:97881cd71b31 | 401 | case 9: |
Aleksk | 7:97881cd71b31 | 402 | if (anySet == 0) { |
Aleksk | 7:97881cd71b31 | 403 | flag_stopRegulator=0; |
Aleksk | 9:6bd6ac6ca7d4 | 404 | plotter.printf("Reset ALARM \r\n"); |
Aleksk | 7:97881cd71b31 | 405 | } else { |
Aleksk | 7:97881cd71b31 | 406 | flag_stopRegulator = 1; |
Aleksk | 7:97881cd71b31 | 407 | } |
Aleksk | 7:97881cd71b31 | 408 | break; |
Aleksk | 6:fe0a7180ebb7 | 409 | case 10: |
Aleksk | 6:fe0a7180ebb7 | 410 | Pd_eeprom = anySet; |
Aleksk | 6:fe0a7180ebb7 | 411 | plotter.printf( "10 Pd_eeprom=%d\r\n",anySet ); |
Aleksk | 6:fe0a7180ebb7 | 412 | break; |
Aleksk | 6:fe0a7180ebb7 | 413 | case 11: |
Aleksk | 6:fe0a7180ebb7 | 414 | frequencyValve1_eeprom = anySet; |
Aleksk | 6:fe0a7180ebb7 | 415 | plotter.printf( "11 frequencyValve1_eeprom=%d\r\n",anySet ); |
Aleksk | 6:fe0a7180ebb7 | 416 | break; |
Aleksk | 6:fe0a7180ebb7 | 417 | case 12: |
Aleksk | 6:fe0a7180ebb7 | 418 | frequencyValve2_eeprom = anySet; |
Aleksk | 6:fe0a7180ebb7 | 419 | plotter.printf( "12 frequencyValve2_eeprom=%d\r\n",anySet ); |
Aleksk | 6:fe0a7180ebb7 | 420 | break; |
Aleksk | 6:fe0a7180ebb7 | 421 | case 13: |
Aleksk | 6:fe0a7180ebb7 | 422 | WL01_eeprom = anySet; |
Aleksk | 6:fe0a7180ebb7 | 423 | plotter.printf( "13 WL01_eeprom=%d\r\n",anySet ); |
Aleksk | 6:fe0a7180ebb7 | 424 | break; |
Aleksk | 6:fe0a7180ebb7 | 425 | case 14: |
Aleksk | 6:fe0a7180ebb7 | 426 | WL99_eeprom = anySet; |
Aleksk | 6:fe0a7180ebb7 | 427 | plotter.printf( "14 WL99_eeprom=%d\r\n",anySet ); |
Aleksk | 6:fe0a7180ebb7 | 428 | break; |
Aleksk | 6:fe0a7180ebb7 | 429 | case 18: |
Aleksk | 6:fe0a7180ebb7 | 430 | T_1 = anySet; |
Aleksk | 6:fe0a7180ebb7 | 431 | plotter.printf( "18 T_1=%d\r\n",anySet ); |
Aleksk | 6:fe0a7180ebb7 | 432 | break; |
Aleksk | 6:fe0a7180ebb7 | 433 | case 19: |
Aleksk | 6:fe0a7180ebb7 | 434 | T_2 = anySet; |
Aleksk | 6:fe0a7180ebb7 | 435 | plotter.printf( "19 T_2=%d\r\n",anySet ); |
Aleksk | 6:fe0a7180ebb7 | 436 | break; |
Aleksk | 10:b6de15a30716 | 437 | case 20: |
Aleksk | 10:b6de15a30716 | 438 | openTimeV2_H2O = anySet; |
Aleksk | 10:b6de15a30716 | 439 | plotter.printf( "20 openTimeV2_H2O=%d\r\n",anySet ); |
Aleksk | 10:b6de15a30716 | 440 | break; |
Aleksk | 10:b6de15a30716 | 441 | case 21: |
Aleksk | 10:b6de15a30716 | 442 | periodV2_H2O = anySet; |
Aleksk | 10:b6de15a30716 | 443 | plotter.printf( "21 periodV2_H2O=%d\r\n",anySet ); |
Aleksk | 10:b6de15a30716 | 444 | break; |
Aleksk | 6:fe0a7180ebb7 | 445 | default: |
Aleksk | 6:fe0a7180ebb7 | 446 | plotter.printf( "Wrong case.\r\n" ); |
Aleksk | 6:fe0a7180ebb7 | 447 | } |
Aleksk | 6:fe0a7180ebb7 | 448 | |
Aleksk | 7:97881cd71b31 | 449 | flag_stopRegulatorEEPROM = 1; //флаг остановки только релейного регулятора (теперь оператор вручную управляет клапанами!) |
Aleksk | 7:97881cd71b31 | 450 | flag_comand2_detected=true; //если флаг true, то всем переменным присвоены новые значения уставок |
Aleksk | 6:fe0a7180ebb7 | 451 | //========Конец блока приёма аварийных граничных (максимальных) уставок для записи в EEPROM =================== |
Aleksk | 6:fe0a7180ebb7 | 452 | |
Aleksk | 0:f2aaa8c6decf | 453 | endParsing: |
Aleksk | 0:f2aaa8c6decf | 454 | |
Aleksk | 0:f2aaa8c6decf | 455 | |
Aleksk | 0:f2aaa8c6decf | 456 | pc.attach(&onDataReceived, Serial::RxIrq); // reattach interrupt - переподключение прерывания перед выходом из функции |
Aleksk | 0:f2aaa8c6decf | 457 | } |
Aleksk | 0:f2aaa8c6decf | 458 | //______________________________________________________________________________ |
Aleksk | 0:f2aaa8c6decf | 459 | void onDataReceived() { |
Aleksk | 0:f2aaa8c6decf | 460 | pc.attach(nullptr, Serial::RxIrq); // detach interrupt |
Aleksk | 0:f2aaa8c6decf | 461 | queue->call(read_serial); // process in a non ISR context - переход к функции приема строки - |
Aleksk | 0:f2aaa8c6decf | 462 | } // - в статусе отключенного прерывания (учим указатели!) |
Aleksk | 0:f2aaa8c6decf | 463 | //______________________________________________________________________________ |
Aleksk | 5:bb595cde0c82 | 464 | void auto_set () { //подпрограмма управления компрессором |
Aleksk | 5:bb595cde0c82 | 465 | |
Aleksk | 7:97881cd71b31 | 466 | if (flag_stopRegulatorEEPROM == 0) { |
Aleksk | 7:97881cd71b31 | 467 | digital_6.write(flag_compressor); //включение-выкючение компрессора |
Aleksk | 7:97881cd71b31 | 468 | } |
Aleksk | 0:f2aaa8c6decf | 469 | } |
Aleksk | 7:97881cd71b31 | 470 | //****************************************************************************************************************** |
Aleksk | 7:97881cd71b31 | 471 | //****************************************************************************************************************** |
Aleksk | 0:f2aaa8c6decf | 472 | |
Aleksk | 0:f2aaa8c6decf | 473 | int main() { |
Aleksk | 1:1d4ec28f17c4 | 474 | |
Aleksk | 0:f2aaa8c6decf | 475 | pc.attach(&onDataReceived, Serial::RxIrq); |
Aleksk | 8:bf73cc68a823 | 476 | int time, time_2, time_3, time_4, ks, valve1, valve2, countValve1=0, countValve2=0, temp_valueSensor; |
Aleksk | 0:f2aaa8c6decf | 477 | int frequencyValve1, frequencyValve2; |
Aleksk | 4:c34b84bfa2fb | 478 | 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 | 12:de8c39bf5da3 | 479 | char cmd[2]; //массив с весом, принятым от slave |
Aleksk | 11:86a18c130515 | 480 | //i2c.read( addr8bit, cmd, 1); //читаем вес по шине i2c из slave Arduino_Nano |
Aleksk | 11:86a18c130515 | 481 | //pc.printf("cmd[0] = %x\n", cmd[0]); |
Aleksk | 11:86a18c130515 | 482 | |
Aleksk | 2:8230a5a4cc13 | 483 | digital_4.write(0); //valve1 off; |
Aleksk | 4:c34b84bfa2fb | 484 | digital_7.write(0); //valve2 off; |
Aleksk | 5:bb595cde0c82 | 485 | digital_5.write(0); //valve3,4 off; |
Aleksk | 5:bb595cde0c82 | 486 | digital_6.write(0); //выключение компрессора |
Aleksk | 10:b6de15a30716 | 487 | //eeprom.nbyte_write( 200, &openTimeV2_H2O, sizeof(int)); //debug set |
Aleksk | 10:b6de15a30716 | 488 | //eeprom.nbyte_write( 210, &periodV2_H2O, sizeof(int)); //debug set |
Aleksk | 2:8230a5a4cc13 | 489 | load_EEPROM (); //загрузка уставок из EEPROM |
Aleksk | 7:97881cd71b31 | 490 | load_EEPROM2 (); //загрузка граничных уставок (аварийных событий)из EEPROM2 |
Aleksk | 6:fe0a7180ebb7 | 491 | if (value >= 1 && delta_value >= 1 && flag_compressor < 2 && flag_stopRegulator < 2 && num_chan < 6) { |
Aleksk | 7:97881cd71b31 | 492 | flag_stopRegulator=0; //уставки из EEPROM похожи на правду, разрешаем работу регулятора |
Aleksk | 2:8230a5a4cc13 | 493 | } else { |
Aleksk | 7:97881cd71b31 | 494 | flag_stopRegulator = 1; //флаг остановки установлен |
Aleksk | 2:8230a5a4cc13 | 495 | pc.printf("Regulator stopped, error in EEPROM \r\n"); |
Aleksk | 2:8230a5a4cc13 | 496 | } |
Aleksk | 2:8230a5a4cc13 | 497 | |
Aleksk | 1:1d4ec28f17c4 | 498 | pc.printf("Program started \r\n"); |
Aleksk | 2:8230a5a4cc13 | 499 | Watchdog &watchdog = Watchdog::get_instance(); |
Aleksk | 7:97881cd71b31 | 500 | watchdog.start(100); //WDlimit = 100 ms |
Aleksk | 0:f2aaa8c6decf | 501 | timer.start(); |
Aleksk | 6:fe0a7180ebb7 | 502 | timer_2.start(); |
Aleksk | 6:fe0a7180ebb7 | 503 | timer_3.start(); |
Aleksk | 10:b6de15a30716 | 504 | timer_4.start(); |
Aleksk | 11:86a18c130515 | 505 | |
Aleksk | 0:f2aaa8c6decf | 506 | while (true){ //бесконечный цикл |
Aleksk | 2:8230a5a4cc13 | 507 | // kick watchdog regularly within provided timeout (сброс собаки в начало счёта) |
Aleksk | 2:8230a5a4cc13 | 508 | watchdog.kick(); |
Aleksk | 11:86a18c130515 | 509 | |
Aleksk | 6:fe0a7180ebb7 | 510 | if (flag_stopRegulator == 1){ event_N = 255;} //сброс события через кнопку Стоп в программе оператора |
Aleksk | 6:fe0a7180ebb7 | 511 | |
Aleksk | 6:fe0a7180ebb7 | 512 | if (flag_stopRegulator == 1 || event_N < 255) { //полный останов регулятора и принудительное запирание всех клапанов |
Aleksk | 4:c34b84bfa2fb | 513 | digital_4.write(0); //valve1 off |
Aleksk | 4:c34b84bfa2fb | 514 | digital_7.write(0); //valve2 off |
Aleksk | 4:c34b84bfa2fb | 515 | digital_5.write(0); //valve3,4 off |
Aleksk | 5:bb595cde0c82 | 516 | //digital_6.write(0); //выключение компрессора |
Aleksk | 4:c34b84bfa2fb | 517 | } |
Aleksk | 4:c34b84bfa2fb | 518 | |
Aleksk | 1:1d4ec28f17c4 | 519 | if (flag_comand_detected) { //пришла правильная командная строка |
Aleksk | 8:bf73cc68a823 | 520 | ks=(value+delta_value+flag_compressor+flag_stopRegulator+ |
Aleksk | 8:bf73cc68a823 | 521 | sensor_value+frequencyValve1+frequencyValve2+ |
Aleksk | 8:bf73cc68a823 | 522 | WL+Pb+Pw1+Pw2+Pd+ |
Aleksk | 8:bf73cc68a823 | 523 | digital_4.read()+digital_7.read()+digital_5.read()+digital_6.read()+event_N+idigital_11.read()+idigital_12.read()+idigital_13.read())*2; |
Aleksk | 8:bf73cc68a823 | 524 | pc.printf("$press,%d,%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 | 525 | value,delta_value,flag_compressor,flag_stopRegulator, |
Aleksk | 4:c34b84bfa2fb | 526 | sensor_value,frequencyValve1,frequencyValve2, |
Aleksk | 4:c34b84bfa2fb | 527 | WL,Pb,Pw1,Pw2,Pd, |
Aleksk | 8:bf73cc68a823 | 528 | digital_4.read(),digital_7.read(),digital_5.read(),digital_6.read(),event_N,idigital_11.read(),idigital_12.read(),idigital_13.read(), |
Aleksk | 8:bf73cc68a823 | 529 | ks); //передача текущих значений в РС |
Aleksk | 7:97881cd71b31 | 530 | |
Aleksk | 0:f2aaa8c6decf | 531 | //pc.printf("%s\r\n",trueSource); //эхо для отладки канала связи |
Aleksk | 4:c34b84bfa2fb | 532 | flag_comand_detected = false; //в последующих обращениях не печатать пока нет новых уставок из СОМ-порта |
Aleksk | 7:97881cd71b31 | 533 | |
Aleksk | 2:8230a5a4cc13 | 534 | if (strcmp(trueSourceOld,trueSource) != 0) { //функция возвращает ноль если командные строки совпадают |
Aleksk | 2:8230a5a4cc13 | 535 | save_EEPROM (); //пишем в память уставки отличные от старых |
Aleksk | 2:8230a5a4cc13 | 536 | load_EEPROM (); |
Aleksk | 2:8230a5a4cc13 | 537 | } |
Aleksk | 2:8230a5a4cc13 | 538 | |
Aleksk | 2:8230a5a4cc13 | 539 | strcpy(trueSourceOld,trueSource); //копировать из trueSource в trueSourceOld |
Aleksk | 0:f2aaa8c6decf | 540 | } |
Aleksk | 4:c34b84bfa2fb | 541 | |
Aleksk | 7:97881cd71b31 | 542 | if (flag_comand2_detected ) { //пришла правильная строка из программы SetUp_EEPROM и передана уставка |
Aleksk | 8:bf73cc68a823 | 543 | ks=(value+delta_value+flag_compressor+flag_stopRegulator+ |
Aleksk | 8:bf73cc68a823 | 544 | sensor_value+frequencyValve1+frequencyValve2+ |
Aleksk | 8:bf73cc68a823 | 545 | WL+Pb+Pw1+Pw2+Pd+ |
Aleksk | 8:bf73cc68a823 | 546 | digital_4.read()+digital_7.read()+digital_5.read()+digital_6.read()+ |
Aleksk | 8:bf73cc68a823 | 547 | event_N+idigital_11.read()+idigital_12.read()+idigital_13.read()+ |
Aleksk | 10:b6de15a30716 | 548 | Pd_eeprom+frequencyValve1_eeprom+frequencyValve2_eeprom+WL01_eeprom+WL99_eeprom+T_1+T_2+openTimeV2_H2O+periodV2_H2O)*2; |
Aleksk | 10:b6de15a30716 | 549 | pc.printf("$press,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,*\r\n", |
Aleksk | 7:97881cd71b31 | 550 | value,delta_value,flag_compressor,flag_stopRegulator, //1,2,3,4 |
Aleksk | 7:97881cd71b31 | 551 | sensor_value,frequencyValve1,frequencyValve2, //5,6,7 |
Aleksk | 7:97881cd71b31 | 552 | WL,Pb,Pw1,Pw2,Pd, //8,9,10,11,12 |
Aleksk | 7:97881cd71b31 | 553 | digital_4.read(),digital_7.read(),digital_5.read(),digital_6.read(), //13,14,15,16 |
Aleksk | 7:97881cd71b31 | 554 | event_N,idigital_11.read(),idigital_12.read(),idigital_13.read(), //17,18,19,20 |
Aleksk | 8:bf73cc68a823 | 555 | Pd_eeprom,frequencyValve1_eeprom,frequencyValve2_eeprom,WL01_eeprom,WL99_eeprom,T_1,T_2, |
Aleksk | 10:b6de15a30716 | 556 | openTimeV2_H2O,periodV2_H2O,ks); //21,22,23,24,25,26,27,28,29,30 |
Aleksk | 7:97881cd71b31 | 557 | flag_comand2_detected = false; //в последующих обращениях не печатать пока нет нового сообщения из СОМ-порта |
Aleksk | 7:97881cd71b31 | 558 | |
Aleksk | 7:97881cd71b31 | 559 | if (strcmp(trueSource2Old,trueSource2) != 0 && numSet >= 10) { //функция возвращает ноль если командные строки совпадают |
Aleksk | 7:97881cd71b31 | 560 | |
Aleksk | 7:97881cd71b31 | 561 | save_EEPROM2 (); //пишем в память все уставки от SetUp_EEPROM если хоть одна изменилась |
Aleksk | 7:97881cd71b31 | 562 | load_EEPROM2 (); |
Aleksk | 7:97881cd71b31 | 563 | } |
Aleksk | 7:97881cd71b31 | 564 | strcpy(trueSource2Old,trueSource2); //копировать из trueSource2 в trueSource2Old |
Aleksk | 7:97881cd71b31 | 565 | //pc.printf("$adress,%d,%d,%d,%d,%d,%d,%d,*\r\n",Pd_eeprom,frequencyValve1_eeprom,frequencyValve2_eeprom,WL01_eeprom,WL99_eeprom,T_1,T_2); |
Aleksk | 7:97881cd71b31 | 566 | } |
Aleksk | 7:97881cd71b31 | 567 | |
Aleksk | 4:c34b84bfa2fb | 568 | if (flag_zerostart) { //пришла командная строка с пустыми уставками (актуально для получения данных на PC при первом запуске) |
Aleksk | 8:bf73cc68a823 | 569 | ks=(value+delta_value+flag_compressor+flag_stopRegulator+ |
Aleksk | 8:bf73cc68a823 | 570 | sensor_value+frequencyValve1+frequencyValve2+ |
Aleksk | 8:bf73cc68a823 | 571 | WL+Pb+Pw1+Pw2+Pd+ |
Aleksk | 8:bf73cc68a823 | 572 | digital_4.read()+digital_7.read()+digital_5.read()+digital_6.read()+event_N+idigital_11.read()+idigital_12.read()+idigital_13.read())*2; |
Aleksk | 8:bf73cc68a823 | 573 | pc.printf("$press,%d,%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 | 574 | value,delta_value,flag_compressor,flag_stopRegulator, |
Aleksk | 4:c34b84bfa2fb | 575 | sensor_value,frequencyValve1,frequencyValve2, |
Aleksk | 4:c34b84bfa2fb | 576 | WL,Pb,Pw1,Pw2,Pd, |
Aleksk | 8:bf73cc68a823 | 577 | digital_4.read(),digital_7.read(),digital_5.read(),digital_6.read(),event_N,idigital_11.read(),idigital_12.read(),idigital_13.read(), |
Aleksk | 8:bf73cc68a823 | 578 | ks); //передача текущих значений в РС |
Aleksk | 4:c34b84bfa2fb | 579 | flag_zerostart = false; |
Aleksk | 4:c34b84bfa2fb | 580 | } |
Aleksk | 8:bf73cc68a823 | 581 | //счет counter_cycle1 идет от еденицы |
Aleksk | 8:bf73cc68a823 | 582 | if (counter_cycle1 < 11 ) { |
Aleksk | 4:c34b84bfa2fb | 583 | float raw_value_0 = analog_value_0.read(); // Чтение аналогового входа 0 (0.0 to 1.0 = full ADC диапазон) |
Aleksk | 4:c34b84bfa2fb | 584 | raw_value_sum_0 = raw_value_sum_0 + raw_value_0; |
Aleksk | 4:c34b84bfa2fb | 585 | float raw_value_1 = analog_value_1.read(); // Чтение аналогового входа 1 (0.0 to 1.0 = full ADC диапазон) |
Aleksk | 4:c34b84bfa2fb | 586 | raw_value_sum_1 = raw_value_sum_1 + raw_value_1; |
Aleksk | 4:c34b84bfa2fb | 587 | float raw_value_2 = analog_value_2.read(); // Чтение аналогового входа 2 (0.0 to 1.0 = full ADC диапазон) |
Aleksk | 4:c34b84bfa2fb | 588 | raw_value_sum_2 = raw_value_sum_2 + raw_value_2; |
Aleksk | 4:c34b84bfa2fb | 589 | } |
Aleksk | 8:bf73cc68a823 | 590 | if (counter_cycle1 >= 11 ) { |
Aleksk | 4:c34b84bfa2fb | 591 | float raw_value_3 = analog_value_3.read(); // Чтение аналогового входа 3 (0.0 to 1.0 = full ADC диапазон) |
Aleksk | 4:c34b84bfa2fb | 592 | raw_value_sum_3 = raw_value_sum_3 + raw_value_3; |
Aleksk | 4:c34b84bfa2fb | 593 | float raw_value_4 = analog_value_4.read(); // Чтение аналогового входа 4 (0.0 to 1.0 = full ADC диапазон) |
Aleksk | 4:c34b84bfa2fb | 594 | raw_value_sum_4 = raw_value_sum_4 + raw_value_4; |
Aleksk | 4:c34b84bfa2fb | 595 | //float raw_value_5 = analog_value_5.read(); // Чтение аналогового входа 5 (0.0 to 1.0 = full ADC диапазон) |
Aleksk | 4:c34b84bfa2fb | 596 | //raw_value_sum_5 = raw_value_sum_5 + raw_value_5; |
Aleksk | 4:c34b84bfa2fb | 597 | } |
Aleksk | 0:f2aaa8c6decf | 598 | |
Aleksk | 8:bf73cc68a823 | 599 | if (counter_cycle1 >= 20 ) { |
Aleksk | 0:f2aaa8c6decf | 600 | counter_cycle1=0; |
Aleksk | 4:c34b84bfa2fb | 601 | |
Aleksk | 11:86a18c130515 | 602 | //WL = raw_value_sum_0/10 * 3300; // преобразование в напряжение 0-3300 mV с усреднением |
Aleksk | 4:c34b84bfa2fb | 603 | raw_value_sum_0 = 0 ; |
Aleksk | 4:c34b84bfa2fb | 604 | sensor_value = raw_value_sum_1/10 * 3300; // преобразование в напряжение 0-3300 mV с усреднением |
Aleksk | 4:c34b84bfa2fb | 605 | raw_value_sum_1 = 0 ; |
Aleksk | 4:c34b84bfa2fb | 606 | Pb = raw_value_sum_2/10 * 3300; // преобразование в напряжение 0-3300 mV с усреднением |
Aleksk | 4:c34b84bfa2fb | 607 | raw_value_sum_2 = 0 ; |
Aleksk | 4:c34b84bfa2fb | 608 | Pw1 = raw_value_sum_3/10 * 3300; // преобразование в напряжение 0-3300 mV с усреднением |
Aleksk | 4:c34b84bfa2fb | 609 | raw_value_sum_3 = 0 ; |
Aleksk | 5:bb595cde0c82 | 610 | Pw2 = raw_value_sum_4/10 * 3300; // преобразование в напряжение 0-3300 mV с усреднением |
Aleksk | 4:c34b84bfa2fb | 611 | raw_value_sum_4 = 0 ; |
Aleksk | 4:c34b84bfa2fb | 612 | //Pd = raw_value_sum_5/20 * 3300; // преобразование в напряжение 0-3300 mV с усреднением |
Aleksk | 4:c34b84bfa2fb | 613 | //raw_value_sum_5 = 0 ; |
Aleksk | 6:fe0a7180ebb7 | 614 | Pd = abs(sensor_value - Pw1); |
Aleksk | 4:c34b84bfa2fb | 615 | |
Aleksk | 5:bb595cde0c82 | 616 | if (num_chan == 1) {temp_valueSensor = sensor_value;} //теперь источник сигнала для регулятора - канал 1 |
Aleksk | 5:bb595cde0c82 | 617 | if (num_chan == 3) {temp_valueSensor = Pw1;} //теперь источник сигнала для регулятора - канал 3 |
Aleksk | 5:bb595cde0c82 | 618 | if (num_chan == 4) {temp_valueSensor = Pw2;} //теперь источник сигнала для регулятора - канал 4 |
Aleksk | 5:bb595cde0c82 | 619 | |
Aleksk | 7:97881cd71b31 | 620 | if (flag_stopRegulator == 0 && event_N == 255 && flag_stopRegulatorEEPROM == 0) { // можно запускать регулятор |
Aleksk | 7:97881cd71b31 | 621 | digital_5.write(1); //valve3,4 открыты - подключаемся к контуру охлаждения макета |
Aleksk | 10:b6de15a30716 | 622 | //-----------Контроль протечки воды через периодическое отпирание Valve2---------- |
Aleksk | 10:b6de15a30716 | 623 | time_4 = timer_4.read_ms(); |
Aleksk | 10:b6de15a30716 | 624 | if (time_4 >= periodV2_H2O) { //Время таймера достигло периода включения вентиля V2 |
Aleksk | 10:b6de15a30716 | 625 | timer_4.reset(); |
Aleksk | 10:b6de15a30716 | 626 | digital_7.write(1); //valve2 on; |
Aleksk | 10:b6de15a30716 | 627 | ThisThread::sleep_for(openTimeV2_H2O); //Время открытого состояния (mc) вентиля V2 должно быть меньше WDlimit=100ms |
Aleksk | 10:b6de15a30716 | 628 | digital_7.write(0); //valve2 off; |
Aleksk | 10:b6de15a30716 | 629 | } |
Aleksk | 1:1d4ec28f17c4 | 630 | //--------------regulator begin----------------------- |
Aleksk | 5:bb595cde0c82 | 631 | if (temp_valueSensor > value + delta_value) { |
Aleksk | 1:1d4ec28f17c4 | 632 | valve2 = digital_7.read(); |
Aleksk | 1:1d4ec28f17c4 | 633 | digital_7.write(1); //valve2 on; |
Aleksk | 1:1d4ec28f17c4 | 634 | if (valve2 < digital_7.read()) {countValve2++;} //счётчик передних фронтов напряжения (срабатывания клапана 2) |
Aleksk | 1:1d4ec28f17c4 | 635 | digital_4.write(0); //valve1 off; |
Aleksk | 5:bb595cde0c82 | 636 | } else if (temp_valueSensor < value - delta_value) { |
Aleksk | 1:1d4ec28f17c4 | 637 | valve1 = digital_4.read(); |
Aleksk | 1:1d4ec28f17c4 | 638 | digital_4.write(1); //valve1 on; |
Aleksk | 1:1d4ec28f17c4 | 639 | if (valve1 < digital_4.read()) {countValve1++;} //счётчик передних фронтов напряжения (срабатывания клапана 1) |
Aleksk | 1:1d4ec28f17c4 | 640 | digital_7.write(0); //valve2 off; |
Aleksk | 1:1d4ec28f17c4 | 641 | } else { |
Aleksk | 1:1d4ec28f17c4 | 642 | digital_4.write(0); //valve1 off; |
Aleksk | 1:1d4ec28f17c4 | 643 | digital_7.write(0); //valve2 off; |
Aleksk | 1:1d4ec28f17c4 | 644 | } |
Aleksk | 1:1d4ec28f17c4 | 645 | //--------------regulator end------------------------- |
Aleksk | 0:f2aaa8c6decf | 646 | } |
Aleksk | 11:86a18c130515 | 647 | time=timer.read_us(); //условие будет выполнятся ровно один раз в секунду |
Aleksk | 0:f2aaa8c6decf | 648 | if (time > 1000000) { |
Aleksk | 0:f2aaa8c6decf | 649 | timer.reset(); //начало счёта времени |
Aleksk | 0:f2aaa8c6decf | 650 | frequencyValve1 = countValve1; //частота (Гц) срабатывания клапана 1 |
Aleksk | 0:f2aaa8c6decf | 651 | frequencyValve2 = countValve2; //частота (Гц) срабатывания клапана 2 |
Aleksk | 0:f2aaa8c6decf | 652 | countValve1=0; |
Aleksk | 12:de8c39bf5da3 | 653 | countValve2=0; |
Aleksk | 12:de8c39bf5da3 | 654 | i2c.read( addr8bit, cmd, 2); //читаем вес в байтах по шине i2c из slave Arduino_Nano |
Aleksk | 12:de8c39bf5da3 | 655 | WL = (cmd[0]<<8)|cmd[1]; //преобразовываем байты побитовым сдвигом влево и сложением в десятичное число Ньютонов |
Aleksk | 11:86a18c130515 | 656 | //plotter.printf("cmd[0] = %x\n", cmd[0]); |
Aleksk | 0:f2aaa8c6decf | 657 | } |
Aleksk | 6:fe0a7180ebb7 | 658 | //--------------------==_ALARM_scope_Begin==---------------------- |
Aleksk | 6:fe0a7180ebb7 | 659 | if (Pd >= Pd_eeprom) { |
Aleksk | 6:fe0a7180ebb7 | 660 | event_N = 0; |
Aleksk | 6:fe0a7180ebb7 | 661 | } |
Aleksk | 6:fe0a7180ebb7 | 662 | if (frequencyValve1 >= frequencyValve1_eeprom) { |
Aleksk | 6:fe0a7180ebb7 | 663 | event_N = 1; |
Aleksk | 6:fe0a7180ebb7 | 664 | } |
Aleksk | 6:fe0a7180ebb7 | 665 | if (frequencyValve2 >= frequencyValve2_eeprom) { |
Aleksk | 6:fe0a7180ebb7 | 666 | event_N = 2; |
Aleksk | 6:fe0a7180ebb7 | 667 | } |
Aleksk | 6:fe0a7180ebb7 | 668 | if (WL <= WL01_eeprom) { |
Aleksk | 6:fe0a7180ebb7 | 669 | event_N = 3; |
Aleksk | 6:fe0a7180ebb7 | 670 | } |
Aleksk | 6:fe0a7180ebb7 | 671 | if (WL >= WL99_eeprom) { |
Aleksk | 6:fe0a7180ebb7 | 672 | event_N = 4; |
Aleksk | 6:fe0a7180ebb7 | 673 | } |
Aleksk | 10:b6de15a30716 | 674 | if (idigital_11.read()==1) { |
Aleksk | 6:fe0a7180ebb7 | 675 | event_N = 5; |
Aleksk | 6:fe0a7180ebb7 | 676 | } |
Aleksk | 10:b6de15a30716 | 677 | if (idigital_12.read()==1) { |
Aleksk | 6:fe0a7180ebb7 | 678 | event_N = 6; |
Aleksk | 6:fe0a7180ebb7 | 679 | } |
Aleksk | 7:97881cd71b31 | 680 | if (idigital_13.read()==0) { |
Aleksk | 6:fe0a7180ebb7 | 681 | event_N = 7; |
Aleksk | 6:fe0a7180ebb7 | 682 | } |
Aleksk | 0:f2aaa8c6decf | 683 | |
Aleksk | 6:fe0a7180ebb7 | 684 | //-----------------Valve1 open time---------------------- |
Aleksk | 7:97881cd71b31 | 685 | if (digital_4.read() == 0 || flag_stopRegulatorEEPROM == 1 ) { // для режима $setup отключаем счёт времени |
Aleksk | 6:fe0a7180ebb7 | 686 | timer_2.reset(); |
Aleksk | 6:fe0a7180ebb7 | 687 | time_2 = 0; |
Aleksk | 6:fe0a7180ebb7 | 688 | } else { |
Aleksk | 6:fe0a7180ebb7 | 689 | time_2 = timer_2.read_ms(); |
Aleksk | 6:fe0a7180ebb7 | 690 | } |
Aleksk | 6:fe0a7180ebb7 | 691 | if (time_2 >= T_1) { |
Aleksk | 6:fe0a7180ebb7 | 692 | event_N = 8; |
Aleksk | 6:fe0a7180ebb7 | 693 | } |
Aleksk | 6:fe0a7180ebb7 | 694 | //-----------------Valve2 open time---------------------- |
Aleksk | 7:97881cd71b31 | 695 | if (digital_7.read() == 0 || flag_stopRegulatorEEPROM == 1) { // для режима $setup отключаем счёт времен |
Aleksk | 6:fe0a7180ebb7 | 696 | timer_3.reset(); |
Aleksk | 6:fe0a7180ebb7 | 697 | time_3 = 0; |
Aleksk | 6:fe0a7180ebb7 | 698 | } else { |
Aleksk | 6:fe0a7180ebb7 | 699 | time_3 = timer_3.read_ms(); |
Aleksk | 6:fe0a7180ebb7 | 700 | } |
Aleksk | 6:fe0a7180ebb7 | 701 | if (time_3 >= T_2) { |
Aleksk | 6:fe0a7180ebb7 | 702 | event_N = 9; |
Aleksk | 6:fe0a7180ebb7 | 703 | } |
Aleksk | 6:fe0a7180ebb7 | 704 | //--------------------==_ALARM_scope_End==---------------------- |
Aleksk | 6:fe0a7180ebb7 | 705 | |
Aleksk | 6:fe0a7180ebb7 | 706 | |
Aleksk | 6:fe0a7180ebb7 | 707 | auto_set(); //включение-выкючение компрессора через flag_compressor |
Aleksk | 10:b6de15a30716 | 708 | //led = !led; //гасим/зажигаем индикаторный светодиод |
Aleksk | 0:f2aaa8c6decf | 709 | } |
Aleksk | 8:bf73cc68a823 | 710 | |
Aleksk | 10:b6de15a30716 | 711 | |
Aleksk | 8:bf73cc68a823 | 712 | |
Aleksk | 0:f2aaa8c6decf | 713 | ThisThread::sleep_for(1); // (mc) правильный оператор задержки для mbed5 |
Aleksk | 0:f2aaa8c6decf | 714 | counter_cycle1++; |
Aleksk | 0:f2aaa8c6decf | 715 | |
Aleksk | 0:f2aaa8c6decf | 716 | } |
Aleksk | 0:f2aaa8c6decf | 717 | } |