RTC DS3231+ AT24C32 překakuje čas

pavel1tu
Příspěvky: 1515
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: RTC DS3231+ AT24C32 překakuje čas

Příspěvek od pavel1tu » 14 led 2020, 06:56

Koukám, že tě to moc nebere,

tu moji obludnost na "posouvání znaků" když je méně než 10h nebo 10min
lze elegantně vyřešit pomocí "sprintf" a formátování výstupu "%02d:%02d"

škoda
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

tosik
Příspěvky: 71
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: RTC DS3231+ AT24C32 překakuje čas

Příspěvek od tosik » 07 úno 2020, 16:12

Ahoj.
Super popsané, konečně se mi podařilo dostat na displej ten čas.
Mám dotaz. Lze z toho dostat i název dne? V popisu DS3231 jsem o tom něco četl, teprve začínám, tak je pro mne ještě problém to najít. Pomůžete mi prosím?

Díky

pavel1tu
Příspěvky: 1515
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: RTC DS3231+ AT24C32 překakuje čas

Příspěvek od pavel1tu » 07 úno 2020, 16:25

Google, dotaz - 3 řádek - odpověď

// Send Day-of-Week
Serial.print(rtc.getDOWStr());

pominu že je to i v příkladech knihovny ;)
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

tosik
Příspěvky: 71
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: RTC DS3231+ AT24C32 překakuje čas

Příspěvek od tosik » 07 úno 2020, 16:52

Píše mi to:
'class DS3231' has no member named 'getDOWStr'

Znamená to, že mám špatnou knihovnu? Nebo to špatně volám?

String test = rtc.getDOWStr();
Serial.println(test);

Příklady z této knihovny mi nejdou zkompilovat, píše mi to:

'tmElements_t' was not declared in this scope

a vadí mu něco kolem tohoto řádku:

tmElements_t tm;

pavel1tu
Příspěvky: 1515
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: RTC DS3231+ AT24C32 překakuje čas

Příspěvek od pavel1tu » 07 úno 2020, 17:31

Tak vyzkoušej, já to nemám jak vyzkoušet, nemám tento RTC, a články se rozcházejí,
pokud máš tuto knihovnu https://github.com/NorthernWidget/DS3231
tak toto je přímo z ní.
Ale je spousta upravených knihoven vycházejících z této ... jestli máš jinou, hoď odkaz ...

Serial.print(rtc.getDoW(), DEC);

DoW by měl být day off week
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

tosik
Příspěvky: 71
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: RTC DS3231+ AT24C32 překakuje čas

Příspěvek od tosik » 07 úno 2020, 19:44

Tak jsem ji nainstaloval a nejde to zkompilovat, najednou to píše:

'RTCDateTime' does not name a type; did you mean 'DateTime'?

Nelíbí se mu:

RTCDateTime datumCas; // vytvoření proměnné pro práci s časem

Tak teď jsem z toho úplně blby...

Kód: Vybrat vše

 //RTC DS3231 hodiny reálného času + AT24C32 paměťový modul
#include <Wire.h>                  // připojení potřebných knihoven
#include <DS3231.h>
DS3231 rtc;                        // inicializace RTC z knihovny
RTCDateTime datumCas;              // vytvoření proměnné pro práci s časem

// LCD 20x4 I2C
#include <Wire.h>                     // knihovny pro LCD přes I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);   // nastavení adresy I2C (0x27 v mém případě) a dále počtu znaků a řádků LCD, zde 20x4

void setup() {
  
Serial.begin(9600);

// LCD 20x4 I2C
  lcd.init();                                // inicializace LCD
  lcd.backlight();                            // zapnutí podsvícení
  lcd.print("Cas ");
  lcd.setCursor( 15, 0);
}

void loop() {

if (Serial.available())
  {
    if (Serial.read() == 'T')  nastav_cas();      // když je první znak velké 'T', nastaví se čas podle následujících čísel
    while (Serial.available())  Serial.read();    // všechno ostatní ze sériové linky se smaže
  } 
  ds3231(10);
  Serial.println("Test");
}

 
 
 //RTC DS3231 hodiny reálného času + AT24C32 paměťový modul
  void ds3231(short DS3231_delay) {
    // načtení času z RTC do proměnné
    datumCas = rtc.getDateTime();
    
    // postupný tisk informací po sériové lince
   /* Serial.print("Datum a cas DS3231: ");
    Serial.print(datumCas.year);   Serial.print("-");
    Serial.print(datumCas.month);  Serial.print("-");
    Serial.print(datumCas.day);    Serial.print(" ");
    Serial.print(datumCas.hour);   Serial.print(":");
    Serial.print(datumCas.minute); Serial.print(":");
    Serial.print(datumCas.second); Serial.println("");*/

    //display
    lcd.setCursor( 5, 1);
    lcd.print(dOw);
    
    // zobrazení datumu
    lcd.setCursor( 5, 2);
    lcd.print(".");
    lcd.setCursor( 8, 2);
    lcd.print(".");

    if (datumCas.day < 10) {  //pokud je mene nez 2 znaky
      lcd.setCursor( 3, 2);
      lcd.print("0");
      lcd.setCursor( 4, 2);
      lcd.print(datumCas.day);
    } else {                         //pokud jsou 2 znaky
      lcd.setCursor( 3, 2);
      lcd.print(datumCas.day);
    }
    
    if (datumCas.month < 10) {  //pokud je mene nez 2 znaky
      lcd.setCursor( 6, 2);
      lcd.print("0");
      lcd.setCursor( 7, 2);
      lcd.print(datumCas.month);
    } else {                         //pokud jsou 2 znaky
      lcd.setCursor( 6, 2);
      lcd.print(datumCas.month);
    }
    
    lcd.setCursor( 9, 2);
    lcd.print(datumCas.year);
    
    
    // zobrazení času
    lcd.setCursor( 6, 3);
    lcd.print(":");
    lcd.setCursor( 9, 3);
    lcd.print(":");

    if (datumCas.hour < 10) {  //pokud je mene nez 2 znaky
      lcd.setCursor( 4, 3);
      lcd.print("0");
      lcd.setCursor( 5, 3);
      lcd.print(datumCas.hour);
    } else {                         //pokud jsou 2 znaky
      lcd.setCursor( 4, 3);
      lcd.print(datumCas.hour);
    }
    if (datumCas.minute < 10) {  //pokud je mene nez 2 znaky
      lcd.setCursor( 7, 3);
      lcd.print("0");
      lcd.setCursor( 8, 3);
      lcd.print(datumCas.minute);
    } else {                         //pokud jsou 2 znaky
      lcd.setCursor( 7, 3);
      lcd.print(datumCas.minute);
    }
    if (datumCas.second < 10) {  //pokud je mene nez 2 znaky
      lcd.setCursor( 10, 3);
      lcd.print("0");
      lcd.setCursor( 11, 3);
      lcd.print(datumCas.second);
    } else {                         //pokud jsou 2 znaky
      lcd.setCursor( 10, 3);
      lcd.print(datumCas.second);
    }

    // pauza na konci smyčky loop
    delay(DS3231_delay);
  }

  void nastav_cas(void) // T 20,1,10,18,56 = 10.ledna 2020 ; 18:56, přes seriový monitor
  {
    delay(10);                               // chvilku pauza, aby se stačil načíst celý řetězec z komunikace
    byte rok    = Serial.parseInt();
    byte mesic  = Serial.parseInt();
    byte den    = Serial.parseInt();
    byte hodina = Serial.parseInt();
    byte minuta = Serial.parseInt();
    byte vterina= Serial.parseInt();
    rtc.setDateTime(rok + 2000, mesic, den, hodina, minuta, vterina);
    Serial.println("Nastaveno");
  }
Použil jsem kód tady od kolegy, co řešil přeskakující čas, jelo mi to, než jsem nainstaloval tu knihovnu z odkazu. Teď nevím, jak z toho ven...

pavel1tu
Příspěvky: 1515
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: RTC DS3231+ AT24C32 překakuje čas

Příspěvek od pavel1tu » 08 úno 2020, 18:36

No, já nevím odkud jsi měl knihovnu, nepíšeš to, tak tu knihovnu co jsi instaloval poslední smaž.

Jak jsem psal, knihoven je spousta, je dobré psát odkud používáš ty tvoje.

Každá knihovna má "ukázky" jak co funguje, ty ukázkové programy ti chodí ?
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

Axamith
Příspěvky: 414
Registrován: 09 srp 2017, 08:17
Reputation: 0

Re: RTC DS3231+ AT24C32 překakuje čas

Příspěvek od Axamith » 08 úno 2020, 19:34

pavel1tu píše:
08 úno 2020, 18:36
. . .
Každá knihovna má "ukázky" jak co funguje, ty ukázkové programy ti chodí ?
To je to první, co dělám po instalaci nové knihovny. Odpadá pak trápení, že mi nejede vlastní kód.

tosik
Příspěvky: 71
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: RTC DS3231+ AT24C32 překakuje čas

Příspěvek od tosik » 10 úno 2020, 09:21

Programuji teprve dva měsíce, takže čerpám hodně z příkladů na netu. Každý používá nějakou jinou knihovnu, takže jich mám nainstalovaných mraky a teď pořádně nevím, kterou potřebuji a ne. Jak tu knihovnu smažu? V IDE, Spravovat knihovny mi to nedovolí odinstalovat? Ve složce "C:\Program Files (x86)\Arduino\libraries" ji taky nevidím... Tak jak se ji zbavím. Jakou knihovnu jsem tam měl předtím už nevím, ale když odstraním všechny, tak si nahraju znova jen ty, co aktuálně používám. Našel jsem i jiný kód jak získat časové údaje a nastavit čas, takže teď používám knihovnu https://github.com/adafruit/RTClib a knihovnu WIRE, která je součástí IDE. Ta však neumí fce, které jsou v knihovnách pro RTC. No aspoň jsem zjistil, kde najdu klíčová slova, která s knihovnou můžu použít a že v ní existují i příklady... :-D

kiRRow
Příspěvky: 485
Registrován: 07 kvě 2019, 07:03
Reputation: 2
Bydliště: Opava

Re: RTC DS3231+ AT24C32 překakuje čas

Příspěvek od kiRRow » 10 úno 2020, 16:16

doinstalovávané knihovny jsou v Dokumenty/Arduino/Libraries

Odpovědět

Kdo je online

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