Arduino Polska Forum
DS3231 ręczne ustawianie czasu i daty - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: DS3231 ręczne ustawianie czasu i daty (/watek-ds3231-r%C4%99czne-ustawianie-czasu-i-daty)

Strony: 1 2


DS3231 ręczne ustawianie czasu i daty - id1 - 28-01-2017

Witam,
Jestem początkującym więc proszę o wyrozumiałość Wink , a mianowicie próbuje zrobić sterownik do akwarium i borykam się jak ustawiać czas i datę za pomocą switch-ów.
Przeszukałem internet i nie znalazłem, a standardowe kody z bibliotek mają ustawienia czasu i daty albo do wpisania w kodzie albo z automatu przy wgrywaniu z kompa się ładuje.
Czy ktoś mógł by mnie pokierować jak napisać kod do zmiany ? Może ma ktoś napisany przykład?


RE: DS3231 ręczne ustawianie czasu i daty - -adamek - 29-01-2017

Skoro mają do wpisania w kodzie to można zastąpić je zmiennymi odpowiednio ustawić i zapodać do kodu .
Np :jeżeli naciśnięto przycisk godzina++; if(godzina==23)godzina=0;


RE: DS3231 ręczne ustawianie czasu i daty - id1 - 29-01-2017

Wstawiłem do kodu linijki jak napisałeś, kod kompiluje się i wgrywa ale nie zmienia się godzina po naciśnięciu przycisku. Może źle coś napisałem?
Poniżej wstawiam kod.


Kod:
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);

#include <DS3231.h>
DS3231  rtc(SDA, SCL);
Time  t;

#define OK 4

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

}

void loop()
{
 if(digitalRead(OK)==LOW) // gdy wcisniemy przycisk
 {
   t.hour ++;
   delay(100);
   if(t.hour==23)
   t.hour=0;
 }

 lcd.setCursor(4,3);
 lcd.print(rtc.getTimeStr());
}
a może trzeba użyć jeszcze tej funkcji jakoś ?

Kod:
rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
ona chyba zapisuje do pamięci czas


RE: DS3231 ręczne ustawianie czasu i daty - -adamek - 29-01-2017

"a może trzeba użyć jeszcze tej funkcji jakoś ?" Trzeba koniecznie i przydało by się wyświetlać godziny minuty i wszystko co się ustawia bo tak to jest jak randka w ciemno z godziną ,zamiast "12" zmienna hour .


RE: DS3231 ręczne ustawianie czasu i daty - id1 - 29-01-2017

Serdeczne dzięki Big Grin idzie ustawić czas, tylko jest jeden mankament, przy pierwszym naciśnięciu jakiegokolwiek przycisku ustawień (godz., min. czy sek.) to czas resetuje się do zera. Potem można ustawiać już normalnie. Czy jest jakaś opcja by tego uniknąć? Bo przecież jak chcę tylko przestawić zegar o jedną minutę to muszę wszystko na nowo ustawiać. Sad
Kod:
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);

#include <DS3231.h>
DS3231  rtc(SDA, SCL);
Time  t;

#define UP 3       // przycisk  UP na Pin3
#define DOWN 2     // przycisk  DOWN na pinie 2
#define OK 4       // przycisk  OK na pinie 4

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

pinMode(DOWN,INPUT_PULLUP);    // konfiguracja pinów dla przycisków
pinMode(UP,INPUT_PULLUP);      // konfiguracja pinów dla przycisków
pinMode(OK,INPUT_PULLUP);      // konfiguracja pinów dla przycisków
}

void loop()
{
 if(digitalRead(OK)==LOW) // gdy wcisniemy przycisk
 {
   t.hour ++;
   delay(100);
   if(t.hour > 23)
   {
   t.hour=0;
   }
   rtc.setTime(t.hour, t.min, t.sec);    
 }

 if(digitalRead(DOWN)==LOW) // gdy wcisniemy przycisk
 {
   t.min ++;
   delay(100);
   if(t.min > 59)
   {
   t.min=0;
   }
   rtc.setTime(t.hour, t.min, t.sec);    
 }

 if(digitalRead(UP)==LOW) // gdy wcisniemy przycisk
 {
   t.sec ++;
   delay(100);
   if(t.sec > 23)
   {
   t.sec=0;
   }
   rtc.setTime(t.hour, t.min, t.sec);    
 }

 lcd.setCursor(4,3);
 lcd.print(rtc.getTimeStr());
 delay(100);
}



RE: DS3231 ręczne ustawianie czasu i daty - namok - 29-01-2017

Skoro możesz czas zapisać do rtc to i możesz go stamtąd odczytać. To jak to zrobić znajdziesz w opisie/przykłądach biblioteki której używasz.
Możesz też skorzystać z makra __TIME__: http://www.cprogramming.com/reference/preprocessor/__TIME__.html


RE: DS3231 ręczne ustawianie czasu i daty - id1 - 30-01-2017

Zapis i odczyt w przykładzie biblioteki jest i na nim bazowałem, a chciałem się dowiedzieć co powoduje wyzerowanie czasu kiedy zaczynam ustawianie godziny czy minuty.


RE: DS3231 ręczne ustawianie czasu i daty - namok - 31-01-2017

(30-01-2017, 23:00)id1 napisał(a): Zapis i odczyt w przykładzie biblioteki jest i na nim bazowałem, a chciałem się dowiedzieć co powoduje wyzerowanie czasu kiedy zaczynam ustawianie godziny czy minuty.

Czas "jest przechowywany" w module DS3231. W swoim programie ustawiasz go za pomocą zmiennej "t". Jaka jest wartość tej zmiennej przy pierwszym uruchomieniu?


RE: DS3231 ręczne ustawianie czasu i daty - id1 - 31-01-2017

Dzięki, sprawdzę to dopiero w czwartek lub piątek jak wrócę do domu.


RE: DS3231 ręczne ustawianie czasu i daty - namok - 31-01-2017

To pytanie retoryczne. Ja wiem jaka jest ta wartość. Chciałem abyś zastanowił sie co się w programie dzieje i z czego wynika.