Не проверяется условие IF

zhekich2.0

✩✩✩✩✩✩✩
17 Апр 2021
4
0
Суть проекта такова: считывать с аналогового порта напряжение, применять к нему коэффициенты и выводить на жк дисплей.
Как должно выглядеть на практике: если датчик не погружен в рабочую среду то на жк дисплее горит 0 (пытался вывести 'load_it' но у меня не получилось) что означает: "датчик не погружён ". При этом у схемы есть погрешность в 0.01 В и именно благодаря ей на дисплей выводится отрицательное значение (-0.01)что может смутить пользователя. Ну и я решил добавить условие (если напряжение меньше нуля то задать переменной значение 0)

Я буду не сказано рад если вы предложите ответ с заменой значений vol1 с напряжения на текст 'load_it'

chek_ckaner:
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);      //назначаем дисплею шины данных

void setup() {
float vol1 = 0;                           //ввод переменной vol1 

lcd.begin(8, 2);
lcd.clear();
}

void loop() {
 float vol1 = ((analogRead(0) * 5.0) / 1024);         //преобразование в вольты
  vol1 = (vol1 - 0.01);                                                  //убираем погрешность
 if (vol1 > 0) { float vol1 = (0);}
 
lcd.setCursor(1, 0);
lcd.print(vol1);

delay(500);
}
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
@zhekich2.0, так обьявите переменную вместо float vol1 = 0; float load_it = 0; И да, глобальная переменная должна быть обьявлена один раз, перед void setup(). А в строке #14 должно быть: if (vol1< 0) { vol1 = (0)}, иначе при любом положительном значении переменная vol1 будет обнуляться.
 
Изменено:

zhekich2.0

✩✩✩✩✩✩✩
17 Апр 2021
4
0
@zhekich2.0, так обьявите переменную вместо float vol1 = 0; float load_it = 0; И да, глобальная переменная должна быть обьявлена один раз, перед void setup().
так 'load it' должна была выводиться на экран вместо 0 зачем нам ее объявлять переменной?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,200
1,287
Москва
а кто сказал, что vol1 больше 0 ? может там 0.000000001 , что для float не редкость. А при выводе 2-х знаков после запятой этого не увидать
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
@zhekich2.0, тогда проверяйте значение vol1, и если оно нулевое, вместо переменной выводите нужный текст.
 

zhekich2.0

✩✩✩✩✩✩✩
17 Апр 2021
4
0
а кто сказал, что vol1 больше 0 ? может там 0.000000001 , что для float не редкость. А при выводе 2-х знаков после запятой этого не увидать
я это предусмотрел и во время теста генерирую сигнал больший 0, к примеру сейчас у меня в переменной 1.94 что больше 0 но на экран выводится не то что ожидалось
 

zhekich2.0

✩✩✩✩✩✩✩
17 Апр 2021
4
0
@zhekich2.0, так обьявите переменную вместо float vol1 = 0; float load_it = 0; И да, глобальная переменная должна быть обьявлена один раз, перед void setup(). А в строке #14 должно быть: if (vol1< 0) { vol1 = (0)}, иначе при любом положительном значении переменная vol1 будет обнуляться.
Спасибо большое, все заработало!!
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
@zhekich2.0, значки < и > перепутали, бывает. ;) Просто внимательнее в следующий раз.:)