Вывод текста в serial при определенном дне недели

Тема в разделе "Arduino & Shields", создана пользователем TheNail314, 7 авг 2019.

  1. TheNail314

    TheNail314 Нерд

    Здравствуйте! Появилась необходимость вывода в serial port текста, который будет появляться наряду с датой и временем на экране. Никак не могу понять, как считать данные из rtc.getDOWStr() определенного дня недели и далее работать с числами, обозначающими каждый из этих дней. Например, я каждую секунду опрашиваю свой модуль DS3231 о том, какой сейчас день недели. Если это понедельник, то записываю его в int MON = 1, вторник int TUE = 2 и т. д. Затем, если это понедельник или же что-то еще, я с помощью функции if
    Код (C++):
    if (вот здесь не ясно, что же писать == 1) { Serial.println("Word, word, word...");
    else и т. д.
    определяю что, и когда мне писать. Но как правильно это все расписать?

    (Arduino UNO, ds3231, libа в прикрепленном файле)

    Код (C++):
    #include <LiquidCrystal_I2C.h>
    #include <Wire.h>
    #include <DS3231.h>

    LiquidCrystal_I2C lcd(0x3F,16,2);

    DS3231  rtc(SDA, SCL);

    void setup() {
      Serial.begin(115200);
      rtc.begin();
      lcd.init();
      lcd.backlight();
     

      //rtc.setDOW(TUESDAY);    
      //rtc.setTime(22, 15, 1);    
      //rtc.setDate(6, 8, 2019);  
    }

    void loop() {
      lcd.print(rtc.getTimeStr(1));
      lcd.setCursor(0,1);
      lcd.print(rtc.getTemp());
     
      //День недели (целое слово)
      Serial.print(rtc.getDOWStr());
      Serial.print(" ");
     
      //Дата в формате dd.mm.yy
      Serial.print(rtc.getDateStr(1,1));
      Serial.print(" -- ");
     
      //Время в формате hh.mm
      Serial.println(rtc.getTimeStr(1));
     
      //Температура
      Serial.print("Temperature: ");
      Serial.print(rtc.getTemp());
      Serial.println(" C");
       
      delay (1000);
      lcd.clear();
    }

     
     

    Вложения:

  2. b707

    b707 Гуру

    странная идея с отдельной переменной для каждого дня... По моему именно этот подход и загнал вас в тупик.
    Заведите ОДНУ ПЕРЕМЕННУЮ int weekday и присваивайте ей номер дня недели, то есть в понедельник - weekday =1. во вторник weekday = 2 и так далее
    Потом делаете обыкновенный switch(weekday) и выводите нужную надпись в зависимости от дня
     
    Последнее редактирование: 7 авг 2019
    arkadyf, Daniil, TheNail314 и ещё 1-му нравится это.
  3. BAR__MEN

    BAR__MEN Вселенский Няш Команда форума

    Что за хрень?
    Зачем так делать?
     
  4. parovoZZ

    parovoZZ Гуру

    Хрень обыкновенная. Сорняк. Из семейства оболтусовых.
     
    BAR__MEN нравится это.
  5. DetSimen

    DetSimen Гуру

    Используй массивы, Luke!!!

    Код (C++):
    const char *const DOWStr[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}

    // принимает день недели от 0 до 6, отдает указатель на строку из массива

    const char *getDOWString(const byte ADOW){
      if (ADOW<7)  return DOWStr[ADOW];
      return NULL;
    }


    .
    .
    .

    byte dow = RTC.getTime().dow;
    Serial.print(getDOWString(dow-1));
    А можно ить и в PROGMEM запхать, и строки и сам массив
     
    Последнее редактирование: 8 авг 2019
    TheNail314 и Asper Daffy нравится это.
  6. Asper Daffy

    Asper Daffy Гуру

    А зачем каждую секунду проверять какой нынче день недели? Надеешься, что однажды ответит: "С утра четверг был"?
     
    TheNail314 и arkadyf нравится это.
  7. parovoZZ

    parovoZZ Гуру

    а нельзя так делать?
     
  8. DetSimen

    DetSimen Гуру

    А вдруг чо интересное пропустишь?
     
    TheNail314, Asper Daffy и BAR__MEN нравится это.
  9. Asper Daffy

    Asper Daffy Гуру

    Это кому как. ТС - нельзя.
     
  10. parovoZZ

    parovoZZ Гуру

    поломается чо?
    Ну будет он каждые две секунды опрашивать часы. Остальное время delay(). Так можно ТС?
     
  11. ДеКодер

    ДеКодер Нерд

    А откуда железяка узнает сколько времени ?
     
  12. BAR__MEN

    BAR__MEN Вселенский Няш Команда форума

     
    ДеКодер нравится это.
  13. ДеКодер

    ДеКодер Нерд

    Ну тогда ежесекундно проверять время однозначно не стоит.
     
    TheNail314 нравится это.
  14. DetSimen

    DetSimen Гуру

    Время, мошт, и стОит, а день недели - только когда меняется час
     
    Asper Daffy и BAR__MEN нравится это.
  15. TheNail314

    TheNail314 Нерд

    я и не говорю, что предлагаю что-то дельное, поэтому и спрашиваю мнение других людей, их предложения. Я мало чего понимаю в с++, только - только учусь. Большое спасибо b707 (http://forum.amperka.ru/members/b707.13414/) и DetSimen (http://forum.amperka.ru/members/detsimen.12462/) за НАСТОЯЩУЮ помощь и дельные советы, теперь мне хотя бы ясно как стоит делать, а как НЕ стоит. Но вот подколы и какие-то шуточки мне вовсе не нужны. Да, я понимаю, что на те готовый код заливай и пользуйся это неправильно и не нужно, но неужели нельзя хотя бы навести на нужную тропу? В чем смысл ваших шуток? Кому они нужны? Если Вам, проженным самоварам доставляет смеяться над неумельцами и чайниками, которые заходят в тупик и обращаются за советом на форумы, прошу, создайте отдельную ветку и там угарайте с наших косяков. Здесь мне хотелось бы услышать совет или какую-либо полезную информацию по волнующей меня теме.
     
  16. TheNail314

    TheNail314 Нерд

    Спасибо большое! Приму к сведению
     
  17. b707

    b707 Гуру

    Да что накинулись на парня. Ну запрашивает он день недели каждую секунду - и я б, наверно. также делал.
    Обьясняю - Он, скорее всего, получает разом весь "timestamp", где и часы с минутами и секундами, и день недели, и даже год. Понятно, что большая часть этих данных почти не меняется. но получать их разом проще, чем выдумывать отдельную логику на смену часа. дня или месяца...
    ИМХО
     
    ДеКодер и DetSimen нравится это.