Čeština na Nextion displeji

Odpovědět
LadaKava
Příspěvky: 5
Registrován: 01 dub 2021, 18:24
Reputation: 0

Čeština na Nextion displeji

Příspěvek od LadaKava » 01 dub 2021, 19:34

Potřebuji poradit s následujícím problémem.
Používám Nextion displej s fonty Consolas ve znakové sadě iso-8859-2. Pokud napíši cokoliv v češtině přímo v Nextion editoru čeština se mi pak zobrazí na displeji správně.
Pokud ale pošlu český text z arduina, čeština se zobrazí špatně. Text posílám procedurou například:

send_text("t3","Ztmíváni a čas ");

void send_text(String componentID, String text) { // odesli text
String txt = componentID + ".txt=\"" + text + "\"";
send_Command(txt.c_str());
}

void send_Command(const char* cmd) { // odeslani dat do displeje
nextion.print(cmd);
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
nextion.flush();
}

Prosím, poradí mi někdo co s tím?

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

Re: Čeština na Nextion displeji

Příspěvek od pavel1tu » 01 dub 2021, 21:22

A nebude to tím, že iso-8859-2 je Latin 2 a Arduino IDE díky OS W10 jede ve Windows-1250 ?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

LadaKava
Příspěvky: 5
Registrován: 01 dub 2021, 18:24
Reputation: 0

Re: Čeština na Nextion displeji

Příspěvek od LadaKava » 01 dub 2021, 22:01

Asi ano. Ale co mám tedy dělat?
Ale například dlouhé y je v Windows-1250 na pozici 0xFD a ve iso-8859-2 také na pozici 0xFD. Ale na Nextion ý nefunguje. Místo ý je tam přehlasované A", ale spíš to je A s háčkem.
Naposledy upravil(a) LadaKava dne 01 dub 2021, 22:18, celkem upraveno 1 x.

ondraN
Příspěvky: 599
Registrován: 08 srp 2019, 20:01
Reputation: 1

Re: Čeština na Nextion displeji

Příspěvek od ondraN » 02 dub 2021, 07:46

Můžeš v textu použít řídící sekvenci. Místo znaku dáš například ''\xFD' To způsobí, že se oděšle přesně ta (FD) hexadecimální hodnota. Je to sice pakárna, ale když nic jiného nefunguje, tak alespoň to.
Dává se to přímo do stringu a v jednom stringu jich může být libovolné množství.
https://docs.microsoft.com/cs-cz/cpp/c- ... w=msvc-160

LadaKava
Příspěvky: 5
Registrován: 01 dub 2021, 18:24
Reputation: 0

Re: Čeština na Nextion displeji

Příspěvek od LadaKava » 02 dub 2021, 10:17

Děkuji za radu, opravdu to funguje.
Je to však opravdu velká pakárna. Např. pro dvouřádkový nápis "noční proud" musím napsat
send_text("t0","no\xE8n\xED\x5Crproud");
Nefunguje totiž ani "\r"
Kdyby měl někdo elegantnější řešení, tak budu mít radost.
Díky.

ondraN
Příspěvky: 599
Registrován: 08 srp 2019, 20:01
Reputation: 1

Re: Čeština na Nextion displeji

Příspěvek od ondraN » 02 dub 2021, 12:38

Můžeš si napsat vlastní funkci pro výstup řetězce, která ten řetězec přechroupe a ty znaky co se špatně zobrazí nahradí řídící sekvencí a nakonec ten upravený string pošle. A nebo jen ten řetězec upraví a dál si s ním můžeš pracovat jak budeš potřebovat.
\r je jen jedna hodnota <LF> ale spousta zařízení potřebuje dvě hodnoty <CR><LF> nebo také \r\n

LadaKava
Příspěvky: 5
Registrován: 01 dub 2021, 18:24
Reputation: 0

Re: Čeština na Nextion displeji

Příspěvek od LadaKava » 03 dub 2021, 18:03

Díky za radu. Nejsem tak sběhlý v práci s řetězci, stálo by mě to hodně času. Ale snad se k tomu později dostanu.

LadaKava
Příspěvky: 5
Registrován: 01 dub 2021, 18:24
Reputation: 0

Re: Čeština na Nextion displeji

Příspěvek od LadaKava » 04 dub 2021, 10:38

Děkuji za radu. Do procedury jsem doplnil substituce:
void send_text(String componentID, String text) { // odesli text
text.replace("č","\xE8");
text.replace("í","\xED");
text.replace("\n","\x5Cr");
text.replace("ý","\xFD");
text.replace("ř","\xF8");
text.replace("á","\xE1");
String txt = componentID + ".txt=\"" + text + "\"";
send_Command(txt.c_str());
}
A teď je program funkční a i přehlednější.

ondraN
Příspěvky: 599
Registrován: 08 srp 2019, 20:01
Reputation: 1

Re: Čeština na Nextion displeji

Příspěvek od ondraN » 04 dub 2021, 12:30

No vida že to šlo ;)
Pakárnu přenechme strojům :mrgreen:

Odpovědět

Kdo je online

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