Arduino RTC
Re: Arduino RTC
A co s chybou:rtc1:30:19: error: cannot convert 'DateTime::hour' from type 'uint8_t (DateTime::)() const {aka unsigned char (DateTime::)() const}' to type 'int'
Zkoušel jsem různé typy proměnné...
Edit:
vlastně mě napadá, to je můj jediný problém - jak vyčíst hodnoty proměnných z času? (Minuty a hodiny) Mám na mysli že potřebuju číst hodnotu hodiny, minuty. Zbytek už bych zvládl, jen jak převést hodnotu z času do proměnné, která se bude v případě minuty aktualizovat každou minutu a v případě hodiny každou hodinu?
Snad mě chápete...
Zkoušel jsem různé typy proměnné...
Edit:
vlastně mě napadá, to je můj jediný problém - jak vyčíst hodnoty proměnných z času? (Minuty a hodiny) Mám na mysli že potřebuju číst hodnotu hodiny, minuty. Zbytek už bych zvládl, jen jak převést hodnotu z času do proměnné, která se bude v případě minuty aktualizovat každou minutu a v případě hodiny každou hodinu?
Snad mě chápete...
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: Arduino RTC
V tvojej knižnici sú funkcie s návratovou hodnotou uint_8, v mojej boli premenné v štruktúre.
Potrebuješ preto prepísať premenné na funkcie - dolpniť zátvorky ().
Potrebuješ preto prepísať premenné na funkcie - dolpniť zátvorky ().
Kód: Vybrat vše
Pôvodný zápis => Zmenený zápis
-----------------------------------------
datumCas.hour => datumCas.hour()
datumCas.minute => datumCas.minute()
Re: Arduino RTC
Díky moc, program už funguje!martinius96 píše: ↑29 čer 2022, 21:23V tvojej knižnici sú funkcie s návratovou hodnotou uint_8, v mojej boli premenné v štruktúre.
Potrebuješ preto prepísať premenné na funkcie - dolpniť zátvorky ().
Kód: Vybrat vše
Pôvodný zápis => Zmenený zápis ----------------------------------------- datumCas.hour => datumCas.hour() datumCas.minute => datumCas.minute()
Pomohl byste ješte se zobrazováním data a času na serial monitoru? Přikládám i svůj ,,hotový" program..
Kód: Vybrat vše
// připojení potřebných knihoven
#include <Wire.h>
#include <DS3231.h>
// inicializace RTC z knihovny
DS3231 rtc;
// vytvoření proměnné pro práci s časem
DateTime datumCas;
boolean active = false; //príznak pre spúšťanie podmienok
unsigned long cas = 0;
int hour;
int minute;
const int rele = 7;
void setup() {
pinMode(rele, OUTPUT);
digitalWrite(rele, HIGH);
// zahájení komunikace po sériové lince
// rychlostí 9600 baud
Serial.begin(9600);
// zahájení komunikace s RTC obvodem
DS3231 begin();
//rtc.setDateTime(__DATE__, "12:34:56"); //MANUALNE NASTAVENIE CASU PRI SPUSTENI - PREPIS STAREHO CASU
}
//v loope() obe podmienky
//NACITAME SI HOUR MINUTE Z RTC, uložíme do premenných hour a minute
// pouzijeme v podmienke
void loop() {
// načtení času z RTC do proměnné
datumCas = rtc.getDate();
hour = datumCas.hour(); //do HOUR zapiseme hodinu z RTC modulu
minute = datumCas.minute(); //do MINUTE zapiseme minuty z RTC modulu
if ((hour = 6 && minute == 0) && (active == false)) { //v 6:00 aktivujeme vystup
cas = millis();
active = true;
digitalWrite(rele, LOW);
}
if ((hour = 18 && minute == 0) && (active == false)) { //v 18:00 aktivujeme vystup
cas = millis();
active = true;
digitalWrite(rele, LOW);
}
if ((millis() - cas >= 60000) && (active == true)) { // vystup bude aktivny minutu (od 6:00 do 6:01 a od 18:00 do 18:01)
active = false;
digitalWrite(rele, HIGH);
}
}
Re: Arduino RTC
Jo a taky nefunguje funkce nastavení času...
V jakém formátu to mám psát?
//rtc.setDate(__DATE__, "12:34:56"); //MANUALNE NASTAVENIE CASU PRI SPUSTENI - PREPIS STAREHO CASU
//rtc.setDate(??DATE??, "12:34:56"); //MANUALNE NASTAVENIE CASU PRI SPUSTENI - PREPIS STAREHO CASU
V jakém formátu to mám psát?
//rtc.setDate(__DATE__, "12:34:56"); //MANUALNE NASTAVENIE CASU PRI SPUSTENI - PREPIS STAREHO CASU
//rtc.setDate(??DATE??, "12:34:56"); //MANUALNE NASTAVENIE CASU PRI SPUSTENI - PREPIS STAREHO CASU
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: Arduino RTC
Vidím v tom programe pár chýb a preto si nemyslím, že sa ti vôbec skompiloval... Chýba ti tam operátor (bodka).
Taktiež tam používaš triedu a voláš do nej funkciu, to predsa nemôže fungovať.
Funkcia sa volá na vytvorený objekt - v tvojom prípade rtc.
Čo sa týka úprav pre výpis času na UART...
Výpis v sekundovom intervale, neviem akú knižnicu využívaš, teda funkcie môžu byť aj iné v prípade tvojej knižnice...
Ako príklad vychádzam z: https://github.com/jarzebski/Arduino-DS3231/ asi nejpoužívanejšia DS3231 knižnica.
Pre nastavenie času sú v podstate 3 spôsoby (ak to podporuje knižnica)
Takýto sketch by si mal nahrať iba raz a potom tvoj pôvodný program, ktorý už len používa čas z RTC.
Ak tento fragment kódu použiješ v setupe, alebo loope(), bude sa ti čas prepisovať pri každom štarte Arduina, alebo za jeho behu.
Tým pádom by si nikdy nemal aktuálny čas z RTC modulu, lebo by si ho stále nastavoval...
Taktiež tam používaš triedu a voláš do nej funkciu, to predsa nemôže fungovať.
Funkcia sa volá na vytvorený objekt - v tvojom prípade rtc.
Kód: Vybrat vše
DS3231 begin();
zmeniť podľa tvojho programu na
rtc.begin();
Výpis v sekundovom intervale, neviem akú knižnicu využívaš, teda funkcie môžu byť aj iné v prípade tvojej knižnice...
Ako príklad vychádzam z: https://github.com/jarzebski/Arduino-DS3231/ asi nejpoužívanejšia DS3231 knižnica.
Kód: Vybrat vše
// do globálnych premenných nad setup()
unsigned long cas2 = 0;
//do loop()
if (millis() - cas2 >= 1000){
cas2 = millis();
datumCas = rtc.getDateTime();
Serial.println(rtc.dateFormat("d-m-Y H:i:s", datumCas)); //mozno naformatovat vystup aj iny...
}
Takýto sketch by si mal nahrať iba raz a potom tvoj pôvodný program, ktorý už len používa čas z RTC.
Ak tento fragment kódu použiješ v setupe, alebo loope(), bude sa ti čas prepisovať pri každom štarte Arduina, alebo za jeho behu.
Tým pádom by si nikdy nemal aktuálny čas z RTC modulu, lebo by si ho stále nastavoval...
Kód: Vybrat vše
// Set sketch compiling time
rtc.setDateTime(__DATE__, __TIME__); //cas kompilacie sketchu a datum kompilacie - systemovy cas tvojho počítača
// Set from UNIX timestamp
// rtc.setDateTime(1397408400); //pocet sekund od 1. Januara 1970
// Manual (YYYY, MM, DD, HH, II, SS)
// rtc.setDateTime(2014, 4, 13, 19, 21, 00);
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů