načítání teplot do lcd nextion

crgo1977
Příspěvky: 36
Registrován: 20 led 2018, 20:16
Reputation: 0

načítání teplot do lcd nextion

Příspěvek od crgo1977 » 30 pro 2018, 22:35

Zdravím,než jsem založil toto téma,pozorně jsem pročetl téměř vše,co je tady na fóru.Prosím o pomoc s kódem.
Mám arduino uno,5 snímačů dallas DS18b20 a lcd displej nextion.Program mám v zásadě funkční a dělá to,co potřebuji,ale nevím si už rady s načítáním hodnot do displeje nextion(vlastně posílání hodnot).Proto prosím zkušenější o pomoc.
Přikládám kód.

Kód: Vybrat vše

#include <NexButton.h>
#include <NexConfig.h>
#include <NexDualStateButton.h>
#include <NexNumber.h>
#include <NexText.h>
#include <Nextion.h>

#include <OneWire.h>
#include <DallasTemperature.h>

#include <SoftwareSerial.h> 

//deklarace komunikace RX TX arduina s displejem - na pinech
SoftwareSerial mySerial (0, 1);

//adresy - vstupní piny senzorů
#define BUS_0 A0
#define BUS_1 A1
#define BUS_2 A2
#define BUS_3 A3
#define BUS_4 A4

//adresace sběrnice snímačů
OneWire oneWire0(BUS_0); 
OneWire oneWire1(BUS_1); 
OneWire oneWire2(BUS_2); 
OneWire oneWire3(BUS_3);
OneWire oneWire4(BUS_4);

//adresace senzorů dallas DS18b20
DallasTemperature sensors0(&oneWire0);
DallasTemperature sensors1(&oneWire1);
DallasTemperature sensors2(&oneWire2);
DallasTemperature sensors3(&oneWire3);
DallasTemperature sensors4(&oneWire4);

//definice nastavené teploty
int tx0;
int tx1;
int tx2;
int tx3;
int tx4;

//definice výstupů = relé
int Rele0 = 9;
int Rele1 = 10;
int Rele2 = 11;
int Rele3 = 12;
int Rele4 = 13;

//definice zobrazené teploty-název teploty vstupu
int teplota0;
int teplota1;
int teplota2;
int teplota3;
int teplota4;

//deklarace objektů v displeji nextion
NexText t0 = NexText (0, 1, "t0");
NexText t1 = NexText (0, 2, "t1");
NexText t2 = NexText (0, 3, "t2");
NexText t3 = NexText(0, 4, "t3");
NexText t4 = NexText(0, 5, "t4");
NexNumber n0 = NexNumber (0, 21, "n0");
NexNumber n1 = NexNumber(0, 22, "n1");
NexNumber n2 = NexNumber(0, 23, "n2");
NexNumber n3 = NexNumber(0, 24, "n3");
NexNumber n4 = NexNumber(0, 25, "n4");
NexButton button0 = NexButton(0, 6, "buton0");
NexButton button1 = NexButton(0, 7, "buton1");
NexButton button2 = NexButton(0, 8, "buton2");
NexButton button3 = NexButton(0, 9, "buton3");
NexButton button4 = NexButton(0, 10, "buton4");

char buffer[100] = {0};
char buffer2[100] = {0};
char buffer3[100] = {0};
char buffer4[100] = {0};
char buffer5[100] = {0};
char buffer6[100] = {0};
char buffer7[100] = {0};
char buffer8[100] = {0};
char buffer9[100] = {0};
char buffer10[100] = {0};
char buffer11[100] = {0};
char buffer12[100] = {0};
char buffer13[100] = {0};
char buffer14[100] = {0};
char buffer15[100] = {0};

void setup(void)
{
mySerial.begin(9600);  
Serial.begin(9600);
sensors0.begin();
sensors1.begin();
sensors2.begin();
sensors3.begin();
sensors4.begin();


//nastavená teplota
tx0 = 26;
tx1 = 26;
tx2 = 26;
tx3 = 26;
tx4 = 26;

   Serial.begin(9600);
   }
void loop(void)
{
  //reset snímačů
  sensors0.requestTemperatures();
  sensors1.requestTemperatures();
  sensors2.requestTemperatures();
  sensors3.requestTemperatures();
  sensors4.requestTemperatures();
  //načtení aktuální hodnoty zaslané snímačem
  int teplota0 (sensors0.getTempCByIndex(0));
  int teplota1 (sensors1.getTempCByIndex(0));
  int teplota2 (sensors2.getTempCByIndex(0));
  int teplota3 (sensors3.getTempCByIndex(0));
  int teplota4 (sensors4.getTempCByIndex(0));

  Serial.print("Teplota 0:  ");
  Serial.println(teplota0);
  Serial.print("Teplota 1:  ");
  Serial.println(teplota1);
  Serial.print("Teplota 2:  ");
  Serial.println(teplota2);
  Serial.print("Teplota 3:  ");
  Serial.println(teplota3);
  Serial.print("Teplota 4:  ");
  Serial.println(teplota4);
  delay(100);


//posílání hodnot do nextion
//NexText t0.setText(buffer);
//txt_t1.setText(buffer2);
//txt_t2.setText(buffer3);
//txt_t3.setText(buffer4);
//txt_t4.setText(buffer5);
//Number_n0.setNumber(buffer6);
//Number_n1.setNumber(buffer7);
//Number_n2.setNumber(buffer8);
//Number_n3.setNumber(buffer9);
//Number_n4.setNumber(buffer10);
//button_0.setbuton0(buffer11);
//button_1.setbuton1(buffer12); 
//button_2.setbuton2(buffer13); 
//button_3.setbuton3(buffer14); 
//button_4.setbuton4(buffer15); 
  
//řízení teploty

if(teplota0 >= tx0 ){        //teplota větší než nastavená
  Serial.println("  OFF 0"); //zobrazení v seriovém monitoru
  digitalWrite(Rele0, LOW);      //výstupní pin relé
 }
else{
if(teplota0 = tx0-1 ){       //teplota menší než nastavená
  Serial.println("  ON 0");   //zobrazení v seriovém monitoru
  digitalWrite(Rele0, HIGH);      //výstupní pin relé
}
}
if(teplota1 >= tx1 ){         //teplota větší než nastavená
  Serial.println("  OFF 1");  //zobrazení v seriovém monitoru
  digitalWrite(Rele1, LOW);      //výstupní pin relé
}
else{
if(teplota1 = tx1-1 ){          //teplota menší než nastavená
  Serial.println("  ON 1");     //zobrazení v seriovém monitoru
  digitalWrite(Rele1, HIGH);       //výstupní pin relé
}
}
if(teplota2 >= tx2 ){         //teplota větší než nastavená
  Serial.println("  OFF 2");  //zobrazení v seriovém monitoru
  digitalWrite(Rele2, LOW);      //výstupní pin relé
}
else{
if(teplota2 = tx2-1 ){        //teplota menší než nastavená
  Serial.println("  ON 2");   //zobrazení v seriovém monitoru
  digitalWrite(Rele2, HIGH);     //výstupní pin relé
}
}
if(teplota3 >= tx3 ){         //teplota větší než nastavená
  Serial.println("  OFF 3");  //zobrazení v seriovém monitoru
  digitalWrite(Rele3, LOW);      //výstupní pin relé
}
else{
if(teplota3 = tx3-1 ){         //teplota menší než nastavená
  Serial.println("  ON 3");    //zobrazení v seriovém monitoru
  digitalWrite(Rele3, HIGH);      //výstupní pin relé
}
}
if(teplota4 >= tx4 ){          //teplota větší než nastavená
  Serial.println("  OFF 4");   //zobrazení v seriovém monitoru
  digitalWrite(Rele4, LOW);       //výstupní pin relé
}
else{
if(teplota4 = tx4-1 ){         //teplota menší než nastavená
  Serial.println("  ON 4");    //zobrazení v seriovém monitoru
  digitalWrite(Rele4, HIGH);      //výstupní pin relé
}
}
}

Je možné,že ho budu mít celý koncepčně blbě,ale mám to krátce a než jsem se pustil do programování,vůbec nic jsem nevěděl a nejdříve nastudoval několik knih - tudíž jen teorii.

Prošel jsem též spousty odkazů,příkladů a hotových projektů na internetu,ale nikde jsem nenašel jak mám vlastně poslat hodnoty do displeje.

Do budoucna přemýšlím ještě o rozšíření o další ovládání.

Předem děkuji všem za pomoc.

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

Re: načítání teplot do lcd nextion

Příspěvek od AstroMiK » 31 pro 2018, 08:01

S Nextionem jsem nikdy nedělal, ale vidím, že tam máš syntaktickou chybu v několika podmínkách.

Tohle je úplně špatně:

Kód: Vybrat vše

if(teplota4 = tx4-1 )
Tohle je trochu lepší:

Kód: Vybrat vše

if(teplota4 == tx4-1 )
Ale osobně bych ty podmínky změnil takhle:

Kód: Vybrat vše

if(teplota4 <= tx4-1 )

Protože co když teplota skokově klesne třeba o 2 stupně?
Já vím, že to asi není moc pravděpodobné, ale teoreticky to možné je.
S tou tvou podmínkou by se mohlo stát třeba tohle:
- Relé je sepnuté, teplota roste....
- Při dosažení teploty 26°C (nebo více) se relé vypne.
- Sertvačností teplota ještě trochu vyleze (třeba na 27°C).
- Pak začne klesat 26°C, 24°C, 22°C ...
- Relé je pořád vypnuté a už se nikdy nezapne, protože teplota je nižší, než 25°C (tx4-1).

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

Re: načítání teplot do lcd nextion

Příspěvek od pavel1tu » 31 pro 2018, 09:00

NEXTION je úplně v pohodě ....

https://www.arduinotech.cz/inpage/nexti ... -bastleni/
+ Wiki NEXTION

Až pochopíš základy jak NEXTION spolupracije s Arduinem, zjistíš jak je to jednoduché ...
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

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

Re: načítání teplot do lcd nextion

Příspěvek od pavel1tu » 31 pro 2018, 09:48

Nevím kde jsem to okopíroval,
ale kdysi jsem si nechal udělat školení od jednoho poláka - online, nepochopil jsem to a okopíroval to :-)
On to také někde okopčil a upravil trochu ....

definice - pozor aby seděly ty názvy jak máš definováno v NEXTION

Kód: Vybrat vše

NexProgressBar progTemp     = NexProgressBar(0, 1, "prog_temp"); //ProgressBar teplota
NexText txtTemp             = NexText(0, 2, "txt_temp"); //text teplota
zobrazení - to mám jako funkci kterou jednou za čas volám
posílám tam asi 20 hodnot, tak jsem vykousl jen teplotu

Kód: Vybrat vše

      progTemp.setValue(NamerenaTeplota);  //progressbar teploty
      memset(buffer, 0, sizeof(buffer));
      itoa(NamerenaTeplota, buffer, 10);        
      txtTemp.setText(buffer); //text teplota
jsou to jen výseky z kodu
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

crgo1977
Příspěvky: 36
Registrován: 20 led 2018, 20:16
Reputation: 0

Re: načítání teplot do lcd nextion

Příspěvek od crgo1977 » 31 pro 2018, 13:33

Co se týká kódu,díky.myslel jsem si,že tam budu mít chybu.
Děkuji za radu a pomoc.

Definice do lcd mám nadefinované,ale nepřišel jsem na to,jak poslat hodnoty do displeje.
Skusím upravit podle mých potřeb.Mám problém s tím,že nevím kam to zapsat.

Přesto díky za pomoc.

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

Re: načítání teplot do lcd nextion

Příspěvek od pavel1tu » 31 pro 2018, 14:01

NEXTION je super displej,
výhodou je, že má vlastní CPU, veškeré menu, obrazovky a vše pro žízení domu/alarmu se naprogramuje v něm - nezatěžkávám Arduino.

Pak se po seriové lince buď vyčítají stavy, nebo posílají hodnoty do displeje - právě do těch proměnných které se definují v NEXTION tools a nahrají se do displeje.

Také nám toho ještě dost nechodí :-)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

crgo1977
Příspěvky: 36
Registrován: 20 led 2018, 20:16
Reputation: 0

Re: načítání teplot do lcd nextion

Příspěvek od crgo1977 » 31 pro 2018, 17:57

Také mi jde především o načítání a zobrazení hodnot. Mám v displeji nastaveno,že bych upravoval nastavenou teplotu,ale to se mi pravděpodobně nepovede. Spíše to chci pro zobrazování aktuálních teplot a pokud mi to půjde,tak pro zobrazení ON/OFF relé - abych viděl kde je aktivní.

Právě proto jsem si vybral nextion,jen z toho důvodu,že menu mohu mít v lcd a nemusím to mít v arduinu.

crgo1977
Příspěvky: 36
Registrován: 20 led 2018, 20:16
Reputation: 0

Re: načítání teplot do lcd nextion

Příspěvek od crgo1977 » 28 úno 2019, 22:02

Zdravím,stále se snažím rozchodit načítání do displeje.
Byl by někdo ochotný vložit kód který funguje a pokud je použito UNO,jak je upravená knihovna.
Předem děkuji za ochotu.

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

Re: načítání teplot do lcd nextion

Příspěvek od AstroMiK » 01 bře 2019, 04:37

Tak už jsem se s tím displejem trochu naučil, ale nepoužívám knihovny.
Řídím to přes obyčejný Serial2.print().
Serial2 je druhá sériová komunikační linka (například SoftwareSerial).
Musí mít nastavenou správnou komunikační rychlost.

Takže pak vypadá zobrazení hodnoty na displeji nějak takhe:

Kód: Vybrat vše

// pro textove pole s parametrem objname="t0":
Serial2.print("t0.txt=\"napis\"");      // pred uvozovkama musi byt zpetne lomitko a delka napisu nesmi byt delsi, nez je parametr tx_maxl
SerialFFF();

// pro ciselne pole s parametrem objname="n0":
Serial2.print("n0.val=");
Serial2.print(50);                           // hodnota 50
SerialFFF();

// pro obrazek s parametrem objname="p0" (obrazek musi byt umisteny v resources)
Serial2.print("p0.pic=2");        // do p0 nahraje treti obrazek z resources (pocitaji se od 0)
SerialFFF();
Každý příkaz musí být ukončen sekvencí 3 znaků 0xFF.
Protože se to v programu často opakuje, napsal jsem to jako podprogram SerialFFF().

Kód: Vybrat vše

// ukoncovaci trojznak 0xFF 0xFF 0xFF
void SerialFFF(void)
  {
    Serial2.write(255);
    Serial2.write(255);
    Serial2.write(255);
  }

crgo1977
Příspěvky: 36
Registrován: 20 led 2018, 20:16
Reputation: 0

Re: načítání teplot do lcd nextion

Příspěvek od crgo1977 » 04 bře 2019, 14:56

Zdravím,jaké arduino používáš?
Já mám jen Uno.

Kód vypadá zajímavě,zkusím ho vložit do mého kódu a uvidím.

Každopádně díky za radu.

Odpovědět

Kdo je online

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