Arduino RTC

Domm__
Příspěvky: 7
Registrován: 26 čer 2022, 14:44
Reputation: 0

Re: Arduino RTC

Příspěvek od Domm__ » 29 čer 2022, 20:37

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...

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Arduino RTC

Příspěvek od martinius96 » 29 čer 2022, 21:23

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 ().

Kód: Vybrat vše

Pôvodný zápis   =>   Zmenený zápis
-----------------------------------------
datumCas.hour   => datumCas.hour()
datumCas.minute => datumCas.minute()

Domm__
Příspěvky: 7
Registrován: 26 čer 2022, 14:44
Reputation: 0

Re: Arduino RTC

Příspěvek od Domm__ » 01 črc 2022, 15:08

martinius96 píše:
29 čer 2022, 21:23
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 ().

Kód: Vybrat vše

Pôvodný zápis   =>   Zmenený zápis
-----------------------------------------
datumCas.hour   => datumCas.hour()
datumCas.minute => datumCas.minute()
Díky moc, program už funguje! :idea:
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);
  }
}
[/quote]

Domm__
Příspěvky: 7
Registrován: 26 čer 2022, 14:44
Reputation: 0

Re: Arduino RTC

Příspěvek od Domm__ » 01 črc 2022, 16:30

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

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Arduino RTC

Příspěvek od martinius96 » 01 črc 2022, 23:31

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.

Kód: Vybrat vše

DS3231 begin();
zmeniť podľa tvojho programu na 
rtc.begin();
Č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.

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...
}
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...

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);

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů