Zobrazení dvoumístných čísel
Zobrazení dvoumístných čísel
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.
Re: Zobrazení dvoumístných čísel
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);
Re: Zobrazení dvoumístných čísel
Já to řešim podmínkou jak píšeš 

https://arze.cz - ARduino Zapojení Elektronika
Re: Zobrazení dvoumístných čísel
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
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)
{
}
Re: Zobrazení dvoumístných čísel
Krásná práceUvádím 3 příklady (kompilované pro Arduino NANO):

- 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
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.
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"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host