• 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
DS3231 ręczne ustawianie czasu i daty
#1
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?
 
Odpowiedź
#2
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;
 
Odpowiedź
#3
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
 
Odpowiedź
#4
"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 .
 
Odpowiedź
#5
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);
}
 
Odpowiedź
#6
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/pr...IME__.html
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#7
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.
 
Odpowiedź
#8
(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?
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#9
Dzięki, sprawdzę to dopiero w czwartek lub piątek jak wrócę do domu.
 
Odpowiedź
#10
To pytanie retoryczne. Ja wiem jaka jest ta wartość. Chciałem abyś zastanowił sie co się w programie dzieje i z czego wynika.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości