nahodný výstup z Nextion display
Úvodní stránka › Fórum › Vaše projekty › Arduino › nahodný výstup z Nextion display
- Toto téma obsahuje celkem 6 odpovědí. Do diskuze (4 diskutující) se naposledy zapojil uživatel posjirka a poslední změna proběhla před 7 roky a 10 měsíci.
-
AutorPříspěvky
-
15.8.2016 v 14:15 #7922KuldaCzÚčastník
Zdraví potřeboval bych od vás radu ohledně Nextion displaye . Vytvářím přihlašovací konzoly na Nextion dysplay a kontrola se provádí přes arduino uno. ůj problem je , že když zmáčknu tlačítko na dysplaji aby odeslalo kod s textem , tak je 1 ku 50 šance , že kod který dojde do arduina je správný a zbytek je špatně přeložený kod, který by vůbec neměl vycházet. Jo a ten Nextion dysplay je čínská verze.
Takhle by měl vypadat výstup :
70 233
A takhle vypadá většino:Éšú˙˙˙ ˙˙˙ .¦˙˙˙ ¸™3˙˙˙ ý˙˙˙ ô˙˙˙
A tohle je jen malý vytržek.
15.8.2016 v 21:24 #7925Zbyšek VodaSprávceDobrý den,
máte dobře nastavenou rychlost komunikace v sériovém monitoru?
Kdyžtak sem prosím nasdílejte kód a zkusíme to nějak pořešit.16.8.2016 v 10:07 #7930KuldaCzÚčastníkDobrá , zde je můj kod:
#include <SoftwareSerial.h> #include <Nextion.h> #include <SPI.h> #include <SD.h> SoftwareSerial nextion(8, 7);// Nextion TX to pin 8 and RX to pin 7 of Arduino Nextion myNex(nextion, 9600); File sd, lok, zk; String loged; void setup() { Serial.begin(9600); SD.begin(4); myNex.init(); } void loop() { String heslo = myNex.listen(); sd = SD.open("prih.txt"); loged = sd.read(); sd.close(); if(heslo !=""){ // kontrola jestly nekdo něco zmáčknul Serial.println(heslo); zk = SD.open("zk.txt", FILE_WRITE); zk.println(heslo); zk.close(); if(heslo == "70 233"){ SD.remove("prih.txt"); if(!SD.exists("prih.txt")){ lok = SD.open("log.txt", FILE_WRITE); sd = SD.open("prih.txt", FILE_WRITE); loged = '1'; sd.print("1"); lok.println("233"); myNex.sendCommand("va0.val=11"); sd.close(); lok.close(); } } } //Kontrola přihlášenosti if(loged=="1"){ myNex.sendCommand("pr.val=1"); }else{ myNex.sendCommand("pr.val=0"); } }
16.8.2016 v 13:18 #7934Zbyšek VodaSprávceDobrý den, napadá mě, že by problém mohl být v porovnání:
heslo !=""
Jazyk C++ má totiž řetězce implementované jako objekty – vy používáte objekt String. A u nich je potíž, že nejdou jednoduše porovnávat jako primitivní datové typy. Dojde totiž k porovnání jejich refenrencí a ne jejich hodnot (aspoň myslím).Takže u
String s1 = "A"; String s2 = "A";
myslím neplatí rovnost s1 == s2.
Vy tedy porovnáváte objekt heslo, který je typu String s prázdným řetězcem „“. Dojde k porovnání referencí (něco jako adresa v paměti). Ty dva se ve vašem případě nikdy rovnat nebudou, tedy bude podmínka
heslo !=""
vždy true.K porovnávání hodnot řetězců se používá metody equals – viz https://www.arduino.cc/en/Reference/StringEquals
Tento problém s porovnáváním řetězců tam pak máte několikrát.
Snad to pojede 🙂
16.8.2016 v 18:14 #7935KuldaCzÚčastníkNechápejte to špatně , ale to o čem vy píšete nemá s tím nic společné , to jen kontroluje , jestli přichází nějaká zpráva , nebo jestli je to jen prázdný nonsense.
22.12.2016 v 18:05 #9726fundumpÚčastníkDobry den prajem.
Ja som zacal pouzivat tieto Nextion displaye, objednavam ich od vyrobcu a cenovo su rovnako na tom ako z ciny (ebay …)
Vela veci este neviem ale kazdopadne mi to bezi na seriovej komunikacii o rychlosti 115200.
Ked som skusal pomalsiu rychlost, tak mi to nefungovalo spravne. Tak neviem ci som aspon trochu poradil.
S pozdravom fundump
23.12.2016 v 19:38 #9745posjirkaÚčastníkrozhodně se jedná o chybu bu´d v:
– nastavení rychlosti seriove linky
– nastavení serial monitoru (ukončovací znaky … NewLine, CR, …)
– knihovny SW seriové linky.Nejspáíš to bude to varinata 1 nebo 3. Dělá mi to taky u komunikace s GSM modulem a te´d jsem to na nějákou dobu odložil. mezitím jsem se dozvěděl, že SoftwareSerial není úplně ideální a je lepší použít její novější verzi/odnož.:
https://github.com/sirleech/NewSoftSerialzkus tuto knihovnu, nebo si sniž rychlost komunikaci na 9600 Bd (hlavně si to nastav na to LCD jinak je ti to prd platné. Otázka zní jestli to jde)
Jinak bys musel použít jinou desku (MEGA), která má 2 seriové linky (UART) přímo HW integrované v desce, takže nemuíš nic simulovat. Už hodně dlouho přemýšlím nad deskou METABOARD, která by měla být Arduino kmpatibilní (né 100%, protože má jiné zapojení ) a využívá V-USB pro programování a komunikaci, zatím co HW UART má volný pro jiné aplikace. Pro tebe by o bylo ideální řešení. Bohužel nemám vyzkoušeno 🙁
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.