Temperatuur instellen.

Software die niet past in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Temperatuur instellen.

Berichtdoor nicoverduin » 26 Mei 2017, 19:08

Welnee joh... die zitten allemaal op pagina index = 3.
En inderdaad die vraag had je al een tijdje terug gesteld.... helaas nooit meer antwoord op gekregen....
@ben: Omdat je alles zo door elkaar zit te gebruiken moet je echt aan een andere structuur gaan nadenken.... Maar goed anders wachten we gewoon een stuk of 100 posts.... tot het kwartje valt...
Scherm 0 is totaal oninteressant als je op scherm 3 bezig bent en omgekeerd.Daar heeft Koepel al eens eerder wat over gezegd... Alleen dat scherm vullen dat nodig is. Je moet dus functies gaan maken die gebruikt worden voor het opbouwen_en_tonen_van_een_pagina en een voor het continu_updaten_van_een_pagina Die laatste is bijvoorbeeld de meters.
Zelf zou ik in jouw geval (ook al is het tegen dovemansoren) gewoon eens die tutorials gaan doen en ze echt begrijpen......
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Temperatuur instellen.

Berichtdoor benvo » 26 Mei 2017, 19:15

Koepel schreef:Nu ben ik ook in de war. Zitten 't11' en 't12' niet op pagina 0 ?

In setup() heb ik NexInit(); met daarna voor de zekerheid een delay(100);.

Vervolgens ga ik er van uit dat default pagina 0 aktief is, maar die maak ik ook zelf aktief. Daarna ga ik nog binnen setup() schrijven naar componenten van pagina 0.


De tekst velden 11 en 12 zitten op pagina 3, uiteraard in mijn instelling scherm.
Op pagina O zitten al mijn meters en de klok/ datum, deze is dus actief.

Eigenlijk zit het zo in elkaar:
pagina 0 is de dashboard pagina met alle meters (3x licht, 1x temperatuur, 1x pH meter. tijd/datum
pagina 1 is een pagina die verwijst naar instelpagina's
pagina 2 is de tijd/datum instelpagina
pagina 3 is de temperatuur instelpagina.

Maak ik het zo meer begrijpelijk hoe het zou moeten werken?

Groet,
Ben.

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Temperatuur instellen.

Berichtdoor benvo » 26 Mei 2017, 20:05

Nu alleen het sketch deel van de instelling pagina. Ook dit levert niet iets op.

cpp code
#include <Nextion.h>


float maxTemp = 29; //maximum temperatuur
float minTemp = 22; //minimum temperatuur

//Declaratie button objects (page, Id, component naam)

NexButton b14 = NexButton(3, 3, "b14"); //plus maximum temperatuur
NexButton b15 = NexButton(3, 4, "b15"); //min maximum temperatuur
NexButton b16 = NexButton(3, 5, "b16"); //plus minimum temperatuur
NexButton b17 = NexButton(3, 6, "b17"); //min minimum temperatuur



//Instelling tekstvelden toegestane temperatuur bereik tussen minimum en maximum

NexText t11 = NexText(3, 7, "t11"); //maximum temperatuur in het tekstveld pagina 3
NexText t12 = NexText(3, 8, "t12"); //minimum temperatuur in het tekstveld pagina 3

char buffer[20]; //buffergrootte





NexTouch *nex_listen_list[] =
{

&b14,
&b15,
&b16,
&b17,
&t11,
&t12,
NULL
};

//Je ziet nu op de arduino dat de buttons wel een reactie geven maar er gebeurd niets.
//Na het loslaten van de desbetreffende knop zal de tekstwaarde met één wijzigen.

void b14PopCallback(void*ptr)
{
maxTemp += 1.0; // na loslaten van de knop wordt er één opgeteld.
dtostrf(maxTemp, 5, 2, buffer); // De float waarde wordt omgezet naar tekst en wegeschreven naar de buffer
t11.setText(buffer); // Schrijft (nieuwe) waarde vanuit de buffer in tekstveld 11 van het display
}

void b15PopCallback(void*ptr)
{
maxTemp -= 1.0; //na het loslaten van de knop wordt er één afgetrokken.
dtostrf(maxTemp, 5, 2, buffer);
t11.setText(buffer);
}

void b16PopCallback(void*ptr)
{
minTemp += 1.0;
dtostrf(maxTemp, 5, 2, buffer);
t12.setText(buffer);
}

void b17PopCallback(void*ptr)
{
maxTemp -= 1.0;
dtostrf(maxTemp, 5, 2, buffer);
t12.setText(buffer);
}


void setup(void) {

nexInit();


//initialisatie van het Nextion scherm
b14.attachPop(b14PopCallback, &b14);
b15.attachPop(b15PopCallback, &b15);
b16.attachPop(b16PopCallback, &b16);
b17.attachPop(b17PopCallback, &b17);

// Dit zet de maximum en minimum beginwaardes op mijn instelblad temperatuur.

t11.setText(buffer); //werkt niet,drukt nu niets af.
t12.setText(buffer); //werkt niet drukt niets af.


}


void loop() {

dtostrf(maxTemp, 5, 2, buffer);
dtostrf(minTemp, 5, 2, buffer);
nexLoop(nex_listen_list);
}


Groet,
Ben

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Temperatuur instellen.

Berichtdoor nicoverduin » 26 Mei 2017, 20:19

Er is feitelijk ook niets veranderd... je begint met p0 en nergens ga je naar pag 3
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Temperatuur instellen.

Berichtdoor benvo » 27 Mei 2017, 11:06

In dit deel van de sketch verwijst niets naar pagina 0. Wanneer ik dit deel alleen gebruik, dit deel waar alles op pagina 3 ingesteld is, dan werkt er nog niets. Jou opmerking hierover is mij dus niet duidelijk.

Dank voor de reactie.

Groet,
Ben.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Temperatuur instellen.

Berichtdoor nicoverduin » 27 Mei 2017, 12:27

En zie je ook dan pagina 3?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Temperatuur instellen.

Berichtdoor benvo » 27 Mei 2017, 15:30

Inderdaad zie ik ook pagina 3. (De instellingen/wijzigingen kan ik ook alleen maar zien op deze pagina)

Verder heb ik gewijzigd dat er niet voortdurend weggeschreven wordt. Dat werkt ook goed.
De begin waardes worden een keer in tekstveld 11 en 12 gezet. Daarna zou er alleen gewijzigd moeten worden na een CallBack. (plus 1.0 of min 1.0) Maar juist dat doet niets. Ook heb ik goed nagekeken of er wellicht een fout in de button werking zit. Dit is niet het geval. Zodra ik het Touchscreen aanraak zie ik dat ook in de Editor, bijvoorbeeld.
Dit heb ik verandert in de loop:

dtostrf(maxTemp, 5, 2, buffer_temp);
if (strcmp(buffer_temp, buffer) != 0)
{
t11.setText(buffer_temp);
strcpy(buffer, buffer_temp);
}
dtostrf(minTemp, 5, 2, buffer_temp);
if (strcmp(buffer_temp, buffer) != 0)
{
t12.setText(buffer_temp);
strcpy(buffer, buffer_temp);
}

Groet,
Ben.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Temperatuur instellen.

Berichtdoor nicoverduin » 27 Mei 2017, 15:43

Ik mis nexloop()....laat maar keek verkeerd
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Temperatuur instellen.

Berichtdoor benvo » 27 Mei 2017, 16:03

Oh, die staat er wel hoor.

Voor de duidelijkheid laat ik pagina 3 zien:
https://www.photobox.co.uk/my/photo?alb ... 9783915463

en de hoofdpagina (dashboard):
https://www.photobox.co.uk/my/photo?alb ... 9783915866

en de deel sketch voor de temperatuur:

cpp code
#include <Nextion.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h> // Zit al in de Arduino IDE



// Data aansluiting is aangesloten op pin 7 on the Arduino.

#define ONE_WIRE_BUS 7

// Legt een oneWire aan om te communiceren met elk oneWire apparaat.

OneWire oneWire(ONE_WIRE_BUS);

// Verbind onze oneWire referentie aan Dallas Temperature.

DallasTemperature sensors(&oneWire);

NexGauge temp = NexGauge(0, 5, "z4"); //Zet de indentificatie van de meter in NexGauge pointer

NexPicture p0 = NexPicture(0, 8, "p0"); //Zet de indentificatie van het plaatje in NexPicture p2

const int TxPin = 16; //Tx Pin 16
int setPic = LOW; //Low of High geeft de keuze van het plaatje

float maxTemp = 29; //maximum temperatuur
float minTemp = 22; //minimum temperatuur

//Declaratie button objects (page, Id, component naam)

NexButton b14 = NexButton(3, 3, "b14"); //plus maximum temperatuur
NexButton b15 = NexButton(3, 4, "b15"); //min maximum temperatuur
NexButton b16 = NexButton(3, 5, "b16"); //plus minimum temperatuur
NexButton b17 = NexButton(3, 6, "b17"); //min minimum temperatuur



//Instelling tekstvelden toegestane temperatuur bereik tussen minimum en maximum

NexText t11 = NexText(3, 7, "t11"); //maximum temperatuur in het tekstveld pagina 3
NexText t12 = NexText(3, 8, "t12"); //minimum temperatuur in het tekstveld pagina 3

char buffer[20]; //buffergrootte
char buffer_temp[10];



NexTouch *nex_listen_list[] =
{

&b14,
&b15,
&b16,
&b17,
&t11,
&t12,
NULL
};

//Na het loslaten van de desbetreffende knop zal de tekstwaarde met één wijzigen.

void b14PopCallback(void*ptr)
{
maxTemp += 1.0; // na loslaten van de knop wordt er één opgeteld.
dtostrf(maxTemp, 5, 2, buffer_temp); // De float waarde wordt omgezet naar tekst en wegeschreven naar de buffer
t11.setText(buffer_temp); // Schrijft (nieuwe) waarde vanuit de buffer in tekstveld 11 van het display
}

void b15PopCallback(void*ptr)
{
maxTemp -= 1.0; //na het loslaten van de knop wordt er één afgetrokken.
dtostrf(maxTemp, 5, 2, buffer_temp);
t11.setText(buffer_temp); // Schrijft (nieuwe) waarde vanuit de buffer in tekstveld 11 van het display
}
void b16PopCallback(void*ptr)
{
minTemp += 1.0;
dtostrf(minTemp, 5, 2, buffer_temp);
t12.setText(buffer_temp); // Schrijft (nieuwe) waarde vanuit de buffer in tekstveld 12 van het display
}

void b17PopCallback(void*ptr)
{
maxTemp -= 1.0;
dtostrf(minTemp, 5, 2, buffer_temp);
t12.setText(buffer_temp); // Schrijft (nieuwe) waarde vanuit de buffer in tekstveld 12 van het display
}


void setup(void) {

nexInit(); //initialisatie van het Nextion scherm
Wire.begin();

b14.attachPop(b14PopCallback, &b14);
b15.attachPop(b15PopCallback, &b15);
b16.attachPop(b16PopCallback, &b16);
b17.attachPop(b17PopCallback, &b17);



pinMode(TxPin, OUTPUT); //Pin wordt als uitgang gebruikt


sensors.begin(); //initialisatie van de sensors

}

void loop(void) {

// Dit zet de maximum en minimum beginwaardes op mijn instelblad temperatuur.

dtostrf(maxTemp, 5, 2, buffer_temp);
if (strcmp(buffer_temp, buffer) != 0)
{
t11.setText(buffer_temp);
strcpy(buffer, buffer_temp);
}
dtostrf(minTemp, 5, 2, buffer_temp);
if (strcmp(buffer_temp, buffer) != 0)
{
t12.setText(buffer_temp);
strcpy(buffer, buffer_temp);
}

sensors.requestTemperatures(); // Vraagt om de temperatuurmeting.
float x = sensors.getTempCByIndex(0); //Zet de verkregen gemeten waarde in x

//Omrekening waarde naar graden voor de temperatuurschaal
// Temperature (linear)
// temperature = 0, angle = -45 degrees
// temperature = 50, angle = +225 degrees.
// range of temperature is 50
// range of angle is 270 (225 + 45)
//float temperature;
float angle = (x / 50.0 * 270.0) - 45.0;
int degrees = int(angle);
temp.setValue(degrees);
if (angle < 0) //Als de stand lager is dan 0 en dus negatief wordt.
{
angle += 360; //maak een positief aantal graden voor de meter
}



if (x < minTemp || x > maxTemp) //indien de temperatuur buiten het toegestane bereik valt.

{
if (setPic == HIGH)
{
setPic = LOW;
p0.setPic(2);
}
else
{
setPic = HIGH;
p0.setPic(1);
}
digitalWrite(TxPin, setPic);
}
nexLoop(nex_listen_list);
}


Groet,
Ben

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Temperatuur instellen.

Berichtdoor Koepel » 27 Mei 2017, 17:28

Intussen heb ik door wat de bedoeling is ;) van de ITEAD Nextion Library. De bedoeling is om alles met de callback functies te doen. Dat is (bijna) altijd mogelijk omdat er ook een Nextion timer gemaakt kan worden.

Als ik meer controle wil in de Arduino sketch dan is het nodig om de pagina te weten. Dat kan met de callback van de pagina, als daar een variabele 'current_page' wordt gezet dan weet je altijd de pagina. Dat heb ik nodig omdat bij mij sommige dingen onafhankelijk van een pagina zijn (alarm met geluid) en sommige dingen wel afhangen van de pagina.

Ik ga mijn sketch verder aanpassen om de callback voor alle pagina's er in te zetten.

@benvo, het eenmalig schrijven van de minTemp en maxTemp naar de pagina op het moment dat die pagina opent, dat hoort dus in de callback functie van die pagina. Dat moet wel in de Nextion Editor ingesteld worden, omdat default die callback niet aangeroepen wordt.

Je bent nu weer de seriële poort aan het overladen door honderden keren per seconden de tekst voor 't11' en 't12' te schrijven.

VorigeVolgende

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten