The weight is now transmitted in Newtons. For this, two bytes are transferred over the i2c bus instead of one.

Dependencies:   _24LCXXX

Files at this revision

API Documentation at this revision

Comitter:
Aleksk
Date:
Fri Oct 15 10:15:22 2021 +0000
Parent:
11:86a18c130515
Commit message:
The weight is now transmitted in Newtons. For this, two bytes are transferred over the i2c bus instead of one.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Fri Oct 08 11:53:23 2021 +0000
+++ b/main.cpp	Fri Oct 15 10:15:22 2021 +0000
@@ -1,27 +1,28 @@
-// 07.10.2021 Продолжение (клон )mbed-os5-press22
-// По шине i2c Arduino Nano с адресом 2, передает значение веса с дискретностью 1 кг.
-// digital pin 11, pin 12 as an input концевики теперь нормально замкнутые
-// Вернул timer_4. Теперь он периодически открывает выпускной клапан для контроля утечек воды.
-// Вместо pc.printf("Reset ALARM \r\n") теперь plotter.printf("Reset ALARM \r\n") это нужно для парсера программы  Setup_EEPROM
-// Удалена команда pc.printf, посылающая пустую строку раз в секунду и связанный с ней timer_4, т.к. изменена программа оператора (Loc()).
-// Суммирование значений каналов А0 А1 А2 было 9 раз, исправлено на 10.
-// Передаваемые через pc.printf сообщения в РС дополнены контрольными суммами для увеличения надёжности связи.
-//    Введена команда pc.printf, посылающая пустую строку раз в секунду, на случай потери (порчи )данных при пересылке и
+// 11.10.2021 Продолжение (клон )mbed-os5-press22
+//19. Теперь вес принимается по шине i2c в Ньютонах, как на дисплее динамометра.
+//18. По шине i2c Arduino Nano с адресом 2, передает значение веса с дискретностью 1 кг, приём происходит раз в секунду, используется timer.
+//17. digital pin 11, pin 12 as an input концевики теперь нормально замкнутые.
+//16. Вернул timer_4. Теперь он периодически открывает выпускной клапан для контроля утечек воды.
+//15. Вместо pc.printf("Reset ALARM \r\n") теперь plotter.printf("Reset ALARM \r\n") это нужно для парсера программы  Setup_EEPROM.
+//14. Удалена команда pc.printf, посылающая пустую строку раз в секунду и связанный с ней timer_4, т.к. изменена программа оператора (Loc()).
+//13. Суммирование значений каналов А0 А1 А2 было 9 раз, исправлено на 10.
+//12. Передаваемые через pc.printf сообщения в РС дополнены контрольными суммами для увеличения надёжности связи.
+//11. Введена команда pc.printf, посылающая пустую строку раз в секунду, на случай потери (порчи )данных при пересылке и
 //    возможного зависания программы оператора при ожидании символа из serial порта (для этого добавлен timer_4).
-// Значения уставок EEPROM2  выводяться в pc.print в специальной строке с текущими данными диагностики
-// Сделан дополнительный блок в парсере для декодирования приходящих аварийных уставок, они пишутся в  EEPROM2
-// Сделан timer_2 для отсчёта времени открытого состояния вентиля 1
-// Сделан timer_3 для отсчёта времени открытого состояния вентиля 2
-// Подключены цифровые входы D11,D12,D13. Реализованы условия остановки по 10 аварийным событиям.
-// Реализован  сброс события (event_N = 255) через кнопку Стоп в программе оператора 
-// Принимается флаг от кнопки Стоп - полной остановки регулятора - закрытие всех 4-х клапанов и передача статуса кнопки в программу оператора
-// Принимается флаг от кнопок включения - выключения компрессора, - идет команда на дискретный выход digital_6(PB_10)
-// Принимается новая уставка num_chan - переключение номера  активного измерительного канала для обратной связи регулятора. 
-// Эта уставка, как и все остальные,  пишется в EEPROM.
-// Включены все шесть аналоговых входа, читаются пять
-// при получении командной строки с нулевой суммой, по новому флагу flag_zerostart, передаётся в сериал текущие уставки и величины
-// (важно для старта программы на PC), эти нулевые уставки не вводятся в регулятор и не записываются в EEPROM.
-// сторожевой таймер,  истекает через 100мс
+//10. Значения уставок EEPROM2  выводяться в pc.print в специальной строке с текущими данными диагностики.
+//9. Сделан дополнительный блок в парсере для декодирования приходящих аварийных уставок, они пишутся в  EEPROM2.
+//8. Сделан timer_2 для отсчёта времени открытого состояния вентиля 1.
+//   Сделан timer_3 для отсчёта времени открытого состояния вентиля 2.
+//7. Подключены цифровые входы D11,D12,D13. Реализованы условия остановки по 10 аварийным событиям.
+//6. Реализован  сброс события (event_N = 255) через кнопку Стоп в программе оператора .
+//5. Принимается флаг от кнопки Стоп - полной остановки регулятора - закрытие всех 4-х клапанов и передача статуса кнопки в программу оператора.
+//   Принимается флаг от кнопок включения - выключения компрессора, - идет команда на дискретный выход digital_6(PB_10)
+//4. Принимается новая уставка num_chan - переключение номера  активного измерительного канала для обратной связи регулятора. 
+//   эта уставка, как и все остальные,  пишется в EEPROM.
+//3. Включены все шесть аналоговых входа, читаются пять.
+//2. При получении командной строки с нулевой суммой, по новому флагу flag_zerostart, передаётся в сериал текущие уставки и величины
+//   (важно для старта программы на PC), эти нулевые уставки не вводятся в регулятор и не записываются в EEPROM.
+//1. Сторожевой таймер,  истекает через 100мс.
 // 
 
 #include "mbed.h"
@@ -77,7 +78,7 @@
 int numSet, anySet;
 //=================================
 int value_auto=250 ;                                                            //set begin value auto "pressure"
-int WL = 0;                                                                     //напряжение с аналогового входа А0 (WL - вес опресовщика)
+int WL = 0;                                                                     // WL - вес опресовщика
 int sensor_value =0;                                                            //напряжение с аналогового входа А1 (Pa - текущее давление)
 int Pb = 0;                                                                     //напряжение с аналогового входа А2 (Pb - давление в баллоне)
 int Pw1 = 0;                                                                    //напряжение с аналогового входа А3 (Pw1 - давление воды на входе опрессовщика)
@@ -475,7 +476,7 @@
     int time, time_2, time_3, time_4, ks, valve1, valve2, countValve1=0, countValve2=0, temp_valueSensor;
     int frequencyValve1, frequencyValve2;
     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;
-    char cmd[1];                                                                //массив с весом, принятым от slave
+    char cmd[2];                                                                //массив с весом, принятым от slave
     //i2c.read( addr8bit, cmd, 1);                                                 //читаем вес по шине i2c  из slave Arduino_Nano
     //pc.printf("cmd[0] = %x\n", cmd[0]);
 
@@ -649,9 +650,9 @@
         frequencyValve1 =  countValve1;                                         //частота (Гц) срабатывания клапана 1 
         frequencyValve2 =  countValve2;                                         //частота (Гц) срабатывания клапана 2 
         countValve1=0;
-        countValve2=0;
-        i2c.read( addr8bit, cmd, 1);                                            //читаем вес по шине i2c  из slave Arduino_Nano
-        WL=cmd[0];
+        countValve2=0;       
+        i2c.read( addr8bit, cmd, 2);                                            //читаем вес в байтах по шине i2c  из slave Arduino_Nano
+        WL = (cmd[0]<<8)|cmd[1];                                                //преобразовываем байты побитовым сдвигом влево и сложением в десятичное число Ньютонов
         //plotter.printf("cmd[0] = %x\n", cmd[0]);
       }
       //--------------------==_ALARM_scope_Begin==----------------------