Проблема с if else if

Bylo4ka
Offline
Зарегистрирован: 22.02.2022

Доброго времени суток. Прощу помочь разобраться с оператором if/else.



#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302, 5, 3, 4); //  RST, CLK, DAT
void setup() {
  Serial.begin(9600);
  time.begin();
  //time.settime(0, 22, 17, 20, 2, 22, 7); // 0  сек, 30 мин, 18 часов, 12, июня, 2020, четверг
}

void loop() {
  int Y = time.Hours;
  if (Y >= 3 && Y < 9) {
    Serial.print(303);

  } else if (Y >= 9 && Y < 15) {
    Serial.print(254);

  } else if (Y >= 15 && Y < 21) {
    Serial.print(362);

  } else if (Y >= 21 && Y < 3) {
    Serial.print(302);
  }

  Serial.println(Y);
  delay(4000);
}

По идее программа должна выводить значение в Serial в зависимости от переменной Y, но по какой то причины этого не происходит, хотя переменная Y принимает нужное значение. ( Y = считывание часов с модуля )

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Очевидно, что для начала нам нужно догадаться, что происходит вместо ожидаемого - так?

Bylo4ka
Offline
Зарегистрирован: 22.02.2022

Не понял вопроса 

rkit
Offline
Зарегистрирован: 23.11.2016

Больше 21 и меньше 3 это круто, конечно

sadman41
Offline
Зарегистрирован: 19.10.2016

И, да, вот это что, альтернативное ответвление математики или какая-то неэвклидова геометрия Y >= 21 && Y < 3 ?

sadman41
Offline
Зарегистрирован: 19.10.2016

Bylo4ka пишет:

Не понял вопроса 


Такая же ерунда.

Bylo4ka
Offline
Зарегистрирован: 22.02.2022

а как же тогда сделать, если время в 24 часовом формате

 

b707
Offline
Зарегистрирован: 26.05.2017

Непонятливый? Хочешь грамотных ответов - грамотно задай вопрос.
Мы уже поняли, что у тебя ИФ не работает так, как ты хотел - но кпк оно работает, пока не ясно.

Bylo4ka
Offline
Зарегистрирован: 22.02.2022

У меня есть переменная Y, это часы и они в 24 часовом формате 

через if я хотел сделать так:

если Y => 3 часов утра и < 9 часов утра, то выводится значение 303

если Y => 9 часов утра и < 15 часов дня, то выводится значение 254

проблема в том что я не знаю как реализовать  20 строку 

 

b707
Offline
Зарегистрирован: 26.05.2017

Bylo4ka пишет:

проблема в том что я не знаю как реализовать  20 строку 

 


а по русски условие сформулировать сможете?

Bylo4ka
Offline
Зарегистрирован: 22.02.2022

значение Y должно быть => 21 Pm и  Y < 3 Am

b707
Offline
Зарегистрирован: 26.05.2017

Это по русски? Математические знаки, Am, Pm?
Ваша проблема в том, что вы даже обычным языком не можете описать что хотите, где уж ваи запрограммировать это...

sadman41
Offline
Зарегистрирован: 19.10.2016

Просто else не подходит?

Bylo4ka
Offline
Зарегистрирован: 22.02.2022

Подходит. Забыл про него походу. Спасибо большое

b707
Offline
Зарегистрирован: 26.05.2017

Булочка, если не понимаете, как сформулировать условие от 21ч до 3 ночи - разбейте его на два - до полуночи и после.

Bylo4ka
Offline
Зарегистрирован: 22.02.2022
   else if (Y >= 21) {
    Serial.print(302);
    
  } else if (Y < 3) {
    Serial.print(302);
  }

Понял вас, все тоже подходит под задачу. Спасибо за помощь.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Кроме && есть еще и ||, так что можно записать в том же стиле, что и раньше.

Green
Offline
Зарегистрирован: 01.10.2015

Хуже, если времена должны меняться. Тогда условие для 21 и 3 не подойдёт для 21 и 23, к примеру.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

Если есть желание создать универсальный алгоритм, нужно исходить из того, что задавать нужно не в тексте программы, а в некотором "внешнем файле" (пусть даже этот "внешний файл" - всего навсего массив констант в теле самого скетча), а также продумать структуру данных, отвечающую заданным требованиям.

Erling
Offline
Зарегистрирован: 23.02.2022

Bylo4ka, по-моему, это хороший повод познакомиться с оператором switch...case.