Добрый день.
делаю самоделку “умные весы” и есть такая задача:
если на весы попадает предмет вес которого больше 150 грамм, но меньше 500 и вес этого предмета в данном интервале держится 1 секунду (тензодатчик не быстро устаканивается), и тогда по истечению этой 1 секунды (взвешивания этого предмета) даем команду моргать светодиоду 1 секунду и даем команду открыть пин (к нему будет подключен пневмоцилиндр чтобы сбросить предмет с весов как забракованный). держим этот пин открытым 0,5 сек и потом закрываем его. т.е. делаем несколько задач параллельно.
помогите пожалуйста с кодом(
пока есть вот такой код
#include <HX711_ADC.h> // https://github.com/olkal/HX711_ADC
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C library
HX711_ADC LoadCell(4, 5); // dt pin, sck pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD HEX address 0x27
int taree = 6;
int a = 0;
float b = 0;
const int Led1 = 12;
const int Led2 = 11;
bool led1State = 0;
bool led2State = 0;
unsigned long prev_ms1 = 0;
unsigned long prev_ms2 = 0;
void setup() {
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode (taree, INPUT_PULLUP);
LoadCell.begin(); // start connection to HX711
LoadCell.start(1500); // load cells gets 1000ms of time to stabilize
/////////////////////////////////////
LoadCell.setCalFactor(-375); // Calibarate your LOAD CELL with 100g weight, and change the value according to readings
/////////////////////////////////////
lcd.begin(); // begins connection to the LCD module
lcd.backlight(); // turns on the backlight
lcd.setCursor(1, 0); // set cursor to first row
lcd.print("super scales "); // print out to LCD
lcd.setCursor(0, 1); // set cursor to first row
lcd.print(" ...Loading... "); // print out to LCD
delay(3000);
lcd.clear();
}
void loop() {
lcd.setCursor(1, 0); // set cursor to first row
lcd.print("super scales "); // print out to LCD
LoadCell.update(); // retrieves data from the load cell
float i = LoadCell.getData(); // get output value
if (i<0)
{
i = i * (-1);
lcd.setCursor(5, 1);
lcd.print("-");
}
else
{
lcd.setCursor(5, 1);
lcd.print(" ");
}
lcd.setCursor(6, 1); // set cursor to secon row
lcd.print(i, 0); // print out the retrieved value to the second row
lcd.print(" ");
if ((i > 150) && (i < 500))
{
unsigned long currentTime = millis(); // текущее время в миллисекундах
if((led1State == 1) && (currentTime - prev_ms1 >= 1000))
{
led1State = 0; // выключаем
prev_ms1 = currentTime; // запоминаем время
digitalWrite(Led1, led1State); // Гасим светодиод
}
else if ((led1State == 0) && (currentTime - prev_ms1 >= 1000))
{
led1State = 1; // включаем
prev_ms1 = currentTime; // запоминаем время
digitalWrite(Led1, led1State); // Зажигаем светодиод
}
}
if (i>=5000)
{
i=0;
lcd.setCursor(0, 0); // set cursor to secon row
lcd.print(" Over Loaded ");
delay(200);
}
if (digitalRead (taree) == LOW)
{
lcd.setCursor(0, 1); // set cursor to secon row
lcd.print(" ...Taring... ");
LoadCell.start(1000);
lcd.setCursor(0, 1);
lcd.print(" ");
}
}