нужна помощь в программировании ардуинки.
есть исходный код (управление вкл/выкл насоса с отображением этих интервалов на ЖК 1602). Проблема в том что обновление инфы на экране идёт в общем цикле, а это др 30 мин.
первичный код
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей
int onpump; // значение работы 1насоса
int offpump; // значение простоя 1насоса
void setup() {
pinMode(9, OUTPUT); // устанавливаем pin 9 как выход питания насоса
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
pinMode(A0, INPUT); // устанавливаем pin A0 вход управления вкл 1насос
pinMode(A1, INPUT); // устанавливаем pin A1 вход управления выкл 1насос
}
void loop() {
lcd.setCursor(0, 0); // установка курсора в начало 1 строки
lcd.print( "Rabota: " );
lcd.print(onpump/1000);
lcd.print( " sec." );
lcd.setCursor(0, 1); // установка курсора в начало 2 строки
lcd.print( "Pauza: " );
lcd.print(offpump/1000);
lcd.print( " min." );
onpump = analogRead(A0) * 29.33;
offpump = analogRead(A1) * 1173;
digitalWrite(9, HIGH); //включение 1насоса
delay(onpump); // время работы 1насоса
digitalWrite(9, LOW); // пауза 1насоса
delay(offpump); //время простоя 1насоса
}
поскольку 30 мин, для обновления данных на экране крайне долго -
решил "запараллелить процессы"
#include <StaticThreadController.h>
#include <Thread.h>
#include <ThreadController.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей
int onpump; // значение работы 1насоса
int offpump; // значение простоя 1насоса
//int rotation0;
//int rotation1;
int wow;
int pump;
Thread LCD = Thread(); // создаём поток управления экраном
Thread onoffpump = Thread(); // создаём поток управления насосо
void setup() {
pinMode(9, OUTPUT); // устанавливаем pin 9 как выход питания насоса
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
pinMode(9, OUTPUT); // устанавливаем pin 9 выход питания 1насосом
pinMode(A0, INPUT); // устанавливаем pin A0 вход управления вкл 1насос
pinMode(A1, INPUT); // устанавливаем pin A1 вход управления выкл 1насос
LCD.onRun(wow); // назначаем потоку задачу
LCD.setInterval(100); // задаём интервал срабатывания, мсек
onoffpump.onRun(pump); // назначаем потоку задачу
onoffpump.setInterval(100); // задаём интервал срабатывания, мсек }
void loop() {
// Проверим, пришло ли время LCD:
if (LCD.shouldRun())
LCD.run(); // запускаем поток
// Проверим, пришло ли время pump:
if (onoffpump.shouldRun())
onoffpump.run(); // запускаем поток
}
// Поток LCD:
void wow() {
lcd.setCursor(0, 0); // установка курсора в начало 1 строки
lcd.print( "Robota: " );
lcd.print(onpump/1000);
lcd.print( " sec." );
lcd.setCursor(0, 1); // установка курсора в начало 2 строки
lcd.print( "Pauza: " );
lcd.print(offpump/60000);
lcd.print( " min." );
lcd clear();
}
// Поток pump:
void pump() {
rotation0 = analogRead(A0);
rotation1 = analogRead(A1);
onpump = analogRead(A0) * 29.33;
offpump = analogRead(A1) * 1759.53;
digitalWrite(9, HIGH); //включение 1насоса
delay(onpump); // время работы 1насоса
digitalWrite(9, LOW); // пауза 1насоса
delay(offpump); //время простоя 1насоса
}
но выбивает ошибки в потоках.
может кто грамотный проверить, наткнуть на мысль, где я напорол?