Zobrazení dvoumístných čísel

Odpovědět
pitovo
Příspěvky: 4
Registrován: 26 kvě 2019, 16:52
Reputation: 0

Zobrazení dvoumístných čísel

Příspěvek od pitovo » 03 úno 2022, 22:32

Zdravím. Jsem v programování arduina nováček, tak se omlouvám, jestli už se to zde řešilo (pročetl jsem předchozí příspěvky a nenašel). Chtěl bych, aby při vypisování data a času z rtc DS3231 se používali dvoumístná čísla (např: 01.07.2022 04:09:05). Zkoušel jsem již pár knihoven (DS3231-1.1.0, Arduino-DS3231-master) a ani v příkladech těch knihoven to nefungovalo. Předpokládám, že by se to dalo vyřešit podmínkou (pokud je jednomístné, přidej nulu), ale myslel jsem si, že by to bylo jednodušší, kdyby se přidal třeba parametr, nebo jednořádková definice formátu data/času. Děkuji za odpovědi.

KamilV
Příspěvky: 476
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Zobrazení dvoumístných čísel

Příspěvek od KamilV » 03 úno 2022, 23:33

Kód: Vybrat vše

DateTime now = RTC.now();
char buf[50];
sprintf(buf, "%2d.%2d.%4d %2d:%2d:%2d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second());
Serial.println(buf);

Uživatelský avatar
Diego
Příspěvky: 87
Registrován: 23 črc 2017, 09:43
Reputation: 0
Kontaktovat uživatele:

Re: Zobrazení dvoumístných čísel

Příspěvek od Diego » 04 úno 2022, 05:08

Já to řešim podmínkou jak píšeš ;)
https://arze.cz - ARduino Zapojení Elektronika

AstroMiK
Příspěvky: 546
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Zobrazení dvoumístných čísel

Příspěvek od AstroMiK » 04 úno 2022, 18:30

Já sprintf v Arduinu taky nepoužívám, bere si totiž strašně moc paměti.

Uvádím 3 příklady (kompilované pro Arduino NANO):

1. příklad je výpis datumu a času bez formátování
- ProgMEM: 1806 bytů
- RAM: 188

2. přiklad má doplněné nuly pomocí podmínek if
- ProgMEM: 1836 bytů
- RAM: 188

3. příklad je doplnění nul pomocí sprintf
- ProgMEM: 3060 bytů
- RAM: 218


Kód: Vybrat vše

//================================
//Projekt zabírá 1806 bytů (5%)  úložného místa pro program. Maximum je 30720 bytů.
//Globální proměnné zabírají 188 bytů (9%)  dynamické paměti, 1860 bytů zůstává pro lokální proměnné. Maximum je 2048 bytů.


void setup(void)
  {
    Serial.begin(9600);
    byte den = 5;
    byte mes = 3;
    int  rok = 2020;
    byte hod = 8;
    byte minu = 6;
    byte sek = 4;

    Serial.print(den);
    Serial.print('.');
    Serial.print(mes);
    Serial.print('.');
    Serial.print(rok);
    Serial.print(' ');
    
    Serial.print(hod);
    Serial.print(':');
    Serial.print(minu);
    Serial.print(':');
    Serial.println(sek);
    
  }

void loop(void)
  {    
  }

Kód: Vybrat vše

//================================
//Projekt zabírá 1836 bytů (5%)  úložného místa pro program. Maximum je 30720 bytů.
//Globální proměnné zabírají 188 bytů (9%)  dynamické paměti, 1860 bytů zůstává pro lokální proměnné. Maximum je 2048 bytů.


void setup(void)
  {
    Serial.begin(9600);
    byte den = 5;
    byte mes = 3;
    int  rok = 2020;
    byte hod = 8;
    byte minu = 6;
    byte sek = 4;

    if(den < 10) Serial.print('0');
    Serial.print(den);
    Serial.print('.');
    if(mes < 10) Serial.print('0');
    Serial.print(mes);
    Serial.print('.');
    Serial.print(rok);
    Serial.print(' ');
    
    if(hod < 10) Serial.print('0');
    Serial.print(hod);
    Serial.print(':');
    if(minu < 10) Serial.print('0');
    Serial.print(minu);
    Serial.print(':');
    if(sek < 10) Serial.print('0');
    Serial.println(sek);
    
  }

void loop(void)
  {
  }


Kód: Vybrat vše

//================================
//Projekt zabírá 3060 bytů (9%)  úložného místa pro program. Maximum je 30720 bytů.
//Globální proměnné zabírají 218 bytů (10%)  dynamické paměti, 1830 bytů zůstává pro lokální proměnné. Maximum je 2048 bytů.

void setup(void)
  {
    Serial.begin(9600);
    char buf[20];
    
    byte den = 5;
    byte mes = 3;
    int  rok = 2020;
    byte hod = 8;
    byte minu = 6;
    byte sek = 4;

    sprintf(buf, "%02d.%02d.%04d %02d:%02d:%02d", den, mes, rok, hod, minu, sek);
    Serial.println(buf);
  }

void loop(void)
  {
  }

Uživatelský avatar
kiRRow
Příspěvky: 1007
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Zobrazení dvoumístných čísel

Příspěvek od kiRRow » 04 úno 2022, 22:57

Uvádím 3 příklady (kompilované pro Arduino NANO):
Krásná práce ;)

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Zobrazení dvoumístných čísel

Příspěvek od pavel1tu » 05 úno 2022, 08:12

U mne vítězí SPRINTF
Při použití na větší projekt v dnešní době nepředpokládám používání Arduin s ATMega,
ale novějších modelů, kde se s pamětí rozhodně šetřit nemusí.

Ale je tu i druhá možnost s podmínkou.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Odpovědět

Kdo je online

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