Вывод текста в 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. NikitOS

    NikitOS Public enemy Администратор

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

    parovoZZ Гуру

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

    DetSimen Guest

    Используй массивы, 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 Guest

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

    Asper Daffy Иксперд

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

    parovoZZ Гуру

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

    NikitOS Public enemy Администратор

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

    DetSimen Guest

    Время, мошт, и стОит, а день недели - только когда меняется час
     
    Asper Daffy и NikitOS нравится это.
  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 нравится это.