• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
RTC DS3231 załączanie o określonej godzinie
#1
Witam
Szukałem i nie znalazłem...

Prośba o wrzucenie gołego kodu na włączanie i wyłączenie X pinu (LED) o określonej godzinie za pomocą RTC DS3231, bez wyświetlaczy i innych bajerów jedynie chciałbym aby była wyświetlana informacja w serial monitor.
 
Odpowiedź
#2
Podano na tacy ...... zmodyfikowany kod poniżej

http://www.jarzebski.pl/arduino/komponen...s3231.html


Kod:
#include <Wire.h>
    #include <DS3231.h>
    
    DS3231 clock;
    RTCDateTime dt;
    
    void setup()
    {
      Serial.begin(9600);
    
      // Inicjalizacja DS3231
      Serial.println("Initialize DS3231");;
      clock.begin();

      pinMode(10,OUTPUT;) // inicjacja wyjścia 10
      pinMode(10,OUTPUT;) // inicjacja wyjścia 11
    
      // Wylaczamy alarmy i resetujemy przerwania do przykladu,
      // poniewaz ustawienia sa podtrzymywane bateryjnie
      clock.armAlarm1(false);
      clock.armAlarm2(false);
      clock.clearAlarm1();
      clock.clearAlarm2();
    
      // Ustawiamy date (Year, Month, Day, Hour, Minute, Second)
      clock.setDateTime(2014, 4, 25, 0, 0, 0);
    
      // Ustawiamy Alarm1 na 20s kazdej minutu z dopasowaniem sekund
      // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
      clock.setAlarm1(0, 0, 0, 20, DS3231_MATCH_S);
    
      // Usyawiamy Alarm2 - Kazda pierwsza minuta kazdej godziny z dopasowaniem do minut
      // setAlarm2(Date or Day, Hour, Minute, Mode, Armed = true)
      clock.setAlarm2(0, 0, 1,     DS3231_MATCH_M);
    }
    
    void loop()
    {
      // Odczytujemy date
      dt = clock.getDateTime();
    
      Serial.println(clock.dateFormat("d-m-Y H:i:s - l", dt));
    
      // Sprawdzamy alaram 1
      if (clock.isAlarm1())
      {
        Serial.println("ALARM 1 TRIGGERED!");
        digitalWrite(10,HIGH); // zapala diodę na pinie 10
      }
    
      // Sprawdzamy alaram 1
      if (clock.isAlarm2())
      {
        Serial.println("ALARM 2 TRIGGERED!");
        digitalWrite(11,HIGH); // zapala diodę na pinie 11
      }
    
      delay(1000);
    }
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#3
a jak ustawić godzinę wyłączenia ?

Kod:
#include <Wire.h>
   #include <DS3231.h>
   
   DS3231 clock;
   RTCDateTime dt;
   
   void setup()
   {
     Serial.begin(9600);
   
     // Inicjalizacja DS3231
     Serial.println("Initialize DS3231");;
     clock.begin();

     pinMode(10,OUTPUT); // inicjacja wyjścia 10
     pinMode(11,OUTPUT); // inicjacja wyjścia 11
   
     // Wylaczamy alarmy i resetujemy przerwania do przykladu,
     // poniewaz ustawienia sa podtrzymywane bateryjnie
     clock.armAlarm1(false);
     clock.armAlarm2(false);
     clock.clearAlarm1();
     clock.clearAlarm2();
   
 // Set sketch compiling time
 clock.setDateTime(__DATE__, __TIME__);
   
     // Ustawiamy Alarm1 na 20s kazdej minutu z dopasowaniem sekund
     // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
     clock.setAlarm1(0, 0, 0, 10, DS3231_MATCH_S);
   
     // Usyawiamy Alarm2 - Kazda pierwsza minuta kazdej godziny z dopasowaniem do minut
     // setAlarm2(Date or Day, Hour, Minute, Mode, Armed = true)
     clock.setAlarm2(0, 0, 1,     DS3231_MATCH_M);
   }
   
   void loop()
   {
     // Odczytujemy date
     dt = clock.getDateTime();
   
     Serial.println(clock.dateFormat("d-m-Y H:i:s - l", dt));
   
     // Sprawdzamy alaram 1
     if (clock.isAlarm1())
     {
       Serial.println("ALARM 1 TRIGGERED!");
       digitalWrite(10,HIGH); // zapala diodę na pinie 10
     }
   
     // Sprawdzamy alaram 1
     if (clock.isAlarm2())
     {
       Serial.println("ALARM 2 TRIGGERED!");
       digitalWrite(11,HIGH); // zapala diodę na pinie 11
     }
   
     delay(1000);
   }
 
Odpowiedź
#4
Podstawy . To są podstawy panowie .

Kod:
// Sprawdzamy alaram 1
     if (clock.isAlarm1())
     {
       Serial.println("ALARM 1 TRIGGERED!");
       digitalWrite(10,HIGH); // zapala diodę na pinie 10
     }else{
      digitalWrite(10,LOW); // zapala diodę na pinie 10
      }
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#5
Timer działa (prawie) jak ta lala, dziękuję za podpowiedzi bardzo mi pomogły.

W jaki sposób rozwiązać problem z ustawieniem początkowym zegara, aktualnie jest tak że godzina jest ustawiana wg czasu kompilacji, po restarcie arduino odlicza czas od momentu w którym został wgrany program.

Czy jest możliwość żeby arduino po restarcie zasilania pobierało aktualną faktyczną godzinę z układu RTC , po coś jest ta bateria.
 
Odpowiedź
#6
Ta linijka za to odpowiada

clock.setDateTime(2014, 4, 25, 0, 0, 0);

ustaw zegar i wgraj program . Później linijkę skasuj i wgraj jeszcze raz i po restarcie już będziesz miał aktualny czas

albo zrób jak poniżej i wgraj

// clock.setDateTime(2014, 4, 25, 0, 0, 0);
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#7
(02-04-2016, 00:41)JasQ napisał(a): Podstawy . To są podstawy panowie .

Kod:
 // Sprawdzamy alaram 1
    if (clock.isAlarm1())
    {
      Serial.println("ALARM 1 TRIGGERED!");
      digitalWrite(10,HIGH); // zapala diodę na pinie 10
    }else{
     digitalWrite(10,LOW); // zapala diodę na pinie 10
     }

Witam,
Jak ustawić kilka alarmów?
Potrzebowałbym 4.
I jeszcze jeden problem. Potrzebuje włączyć przekaźnik np o 7:00 każdego dnia a wyłączyć o 20:00 każdego dnia.
Drugi przekaźnik uruchomić o 9:00 i wyłączyć o 19:00 każdego dnia.
Trzeci uruchomić jeden sykl serwa.
Czwarty w rezerwie.
Jak spiąć to z zegarem.
 
Odpowiedź
#8
(10-03-2018, 17:29)sunortas napisał(a):
(02-04-2016, 00:41)JasQ napisał(a): Podstawy . To są podstawy panowie .

Kod:
 // Sprawdzamy alaram 1
    if (clock.isAlarm1())
    {
      Serial.println("ALARM 1 TRIGGERED!");
      digitalWrite(10,HIGH); // zapala diodę na pinie 10
    }else{
     digitalWrite(10,LOW); // zapala diodę na pinie 10
     }

Witam,
Jak ustawić kilka alarmów?
Potrzebowałbym 4.
I jeszcze jeden problem. Potrzebuje włączyć przekaźnik np o 7:00 każdego dnia a wyłączyć o 20:00 każdego dnia.
Drugi przekaźnik uruchomić o 9:00 i wyłączyć o 19:00 każdego dnia.
Trzeci uruchomić jeden sykl serwa.
Czwarty w rezerwie.
Jak spiąć to z zegarem.

Udało mi się rozwiązać problem bez stosowania alarmówSmile
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości