Не работает оператор if

Всем привет! Я новичок. Делаю часы(Проект не закончен) и у меня не работает оператор if. Подскажите что делать…

#include <AnalogKey.h>
#include <GyverButton.h>
#include <Wire.h>                      // библиотека для управления устройствами по I2C 
#include <LCD_1602_RUS.h>              // подключаем библиотеку LCD_1602_RUS
#include <DS3231.h>
#include <DHT.h>                       // библиотека для dht11
#include <DHT_U.h>                     // библиотека для dht11

#define pin_backlight 6                // пин подсветки дисплея
#define pin_photo A6                   //пин фоторезистра

DS3231  rtc(SDA, SCL);                 // Инициализация DS3231
LCD_1602_RUS LCD(0x27,16,2);           // присваиваем имя LCD для дисплея
DHT dht(5, DHT11);                     // сообщаем к какому порту подключен DHT11
GButton butt1(4, HIGH_PULL, NORM_OPEN);

Time t;
String Hor, Min, Sec, Date, Mon, Year, day, yes_no_bykvi;
int Dow;                       // дни недели
char HH = 18;                  // Часы будильника
char MM = 42;                  // Минуты будильника
bool data_open = 1;            // Дата открыть
bool may_menu_da_net = 1;
bool yes_no_cifri = 0;               //  да нет   

void setup()
{
  pinMode(pin_backlight, OUTPUT);
  pinMode(3, OUTPUT);
  Serial.begin(9600);
  rtc.begin();                         // Инициализировать rtc
  LCD.init(); // инициализация LCD дисплея
  LCD.backlight(); // включение подсветки дисплея
  LCD.clear();
  dht.begin(); // запускаем датчик DHT11
  butt1.setTimeout(1000);

 t = rtc.getTime();
 Date = t.date;
 Mon = t.mon;
 Year = t.year;
 Hor = t.hour;
 Min = t.min;
 Sec = t.sec;
 Dow = t.dow;
  
// Установка времени
//rtc.setDOW(SUNDAY);                  //  Установить день-недели
//rtc.setTime(19, 25, 0);              //  Установить время 16:29:00 (формат 24 часа)
//rtc.setDate(28, 1, 2024);            //  Установить дату 11 декабря 2020 года
}
void loop()
{
  
// Время и дата
  float h = dht.readHumidity();
  float temp = dht.readTemperature();
  
  if (data_open == 1) {
  LCD.setCursor(0,0);
  LCD.print(String(Hor));

  LCD.setCursor(2,0);
  LCD.print(":");

  LCD.setCursor(3,0);
  LCD.print(Min);

  LCD.setCursor(6,0);
  LCD.print(day);

  LCD.setCursor(10,0);
  LCD.print(Date);

  LCD.setCursor(12,0);
  LCD.print("/");

  LCD.setCursor(13,0);
  LCD.print(Mon);

  LCD.setCursor(1,1);
  LCD.print(temp);
  LCD.print("°C");
  LCD.setCursor(9,1);
  LCD.print(h);
  LCD.print("%");

  delay(1);}

 // Присваимаем переменным значения


  // Вывод дней недели
  switch(Dow){
    case 7:
    day = "Вс,";
    break;

    case 1:
    day = "Пн,";
    break;

    case 2:
    day = "Вт,";
    break;

    case 3:
    day = "Ср,";
    break;

    case 4:
    day = "Чт,";
    break;

    case 5:
    day = "Пт,";
    break;

    case 6:
    day = "Сб,";
    break;

    default:
    day = "Ош,";
    break;}

  int val = analogRead(pin_photo);
  int backlight_power = map(val, 0, 1023, 0, 255);
  analogWrite(pin_backlight, backlight_power);

  butt1.tick();

  if (butt1.isPress() && may_menu_da_net == 1){
  data_open = 0;
  may_menu_da_net = 0;
  LCD.clear();
  LCD.setCursor(4,0);
  LCD.print("БУДИЛЬНИК");}

  if (butt1.isPress()){Serial.println("этот if  не работает!!!");}
}

Значит он испортился, возьмите другой.

1 лайк

Что означает "не работает? И в каком конкретно месте кода?

А вообще можно вести речь только о том, что не выполняется заданное в нем условие, т.е. грубо говоря, в 59 строке data_open никогда не принимает значение 1, а уж почему так и нужно разбираться

Подсказываю.

Никогда!

Совсем никогда!

Вообще никогда и ни при каких обстоятельствах!

не употребляйте выражений типа

если, конечно, не хотите, чтобы у Вас сочувственно интересовали чем Вы страдаете - дебильностью или идиотией.

А по сути, поставьте перед Вашим if вывод значения переменной data_open в монитор порта и убедитесь, что if работает именно так, как и должен работать.

1 лайк

Data open == 1 сделал для того, чтобы на дисплее отображалось время, число, и. т.п. Указал в самом коде где именно не работает ( 140 сторока: if (butt1.isPress()){Serial.println(“этот if не работает!!!”);}

Ну и что вы от нас хотите? Выяснить, почему у вас кнопка не нажимается?

Ну, значит поставьте перед этой строкой вывод значения выражения

и опять же убедитесь, что всё работает как и должно.

Шикарный комментарий))
Оператор if работает ВСЕГДА. Только часто не так как хочется человеку)
Переменная нигде не меняется и не имеет volatile, компилятор её выкинул просто, условие тоже.
Сколько строк кода отображается? Походу я опять не вижу продолжения.

Как и я не вижу но вставлял все а так их 143

Народ! Не починили что ли ещё?
У меня только до 95 строки.

ща проду выложу

case 7:
   day = "Вс,";
   break;

   case 1:
   day = "Пн,";
   break;

   case 2:
   day = "Вт,";
   break;

   case 3:
   day = "Ср,";
   break;

   case 4:
   day = "Чт,";
   break;

   case 5:
   day = "Пт,";
   break;

   case 6:
   day = "Сб,";
   break;

   default:
   day = "Ош,";
   break;}

 int val = analogRead(pin_photo);
 int backlight_power = map(val, 0, 1023, 0, 255);
 analogWrite(pin_backlight, backlight_power);

 butt1.tick();

 if (butt1.isPress() && may_menu_da_net == 1){
 data_open = 0;
 may_menu_da_net = 0;
 LCD.clear();
 LCD.setCursor(4,0);
 LCD.print("БУДИЛЬНИК");}


 if (butt1.isPress()){Serial.println("этот if  не работает!!!");}
}

Не починили. Либо разворачивай код (но там без нумерации строк), либо копируй куда-нибудь

Во второй части меняется значение на 0

Все if работают кроме последнего. И местами менял и делал всё что можно и нельзя

Опять происки американцев, ясно.

Может я чего не понимаю, но в этом месте флаг скорее всего сбрасывается в false. Соответственно, во втором if он и не сработает.
Читайте внимательно описания библиотек, с которыми работаете, и их методов

попробую на 0
Читал про библиотеку ну ооооооооооооооочень много (я такой что абы какую не скачаю)

Ну так и прочитайте, не сбрасывается ли флаг нажатия при вызове метода isPress()? А он скорее всего и сбрасывается

нет не помогло…

Таки да. Но “копирование” в правом, верхнем углу, копирует всё правильно

1 лайк