Temperatuur instellen.

Software die niet past in bovenstaande onderwerpen
Berichten: 308
Geregistreerd: 23 Okt 2016, 20:29

Re: Temperatuur instellen.

Berichtdoor benvo » 23 Mei 2017, 18:22

Daarom snapte ik die aanroep van die tekst veldjes niet, Nico. Overigens had ik wel de vinkjes aangezet om te zien of dat een reactie zou opleveren bij aanraking van het tekst veld het geen trouwens niet het geval was. Nog even waarom ik dit zo deed, niet omdat ik zo graag knip en plak, meer om een programma te begrijpen, te zien wat het doet. Daarom ook de vragen die erachter staan. Of het een goede is weet ik niet maar ik probeer iets te leren. Het is fijn dat Koepel maar ook jij me daar bij helpen.

Groet,
Ben.

Advertisement

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

Re: Temperatuur instellen.

Berichtdoor nicoverduin » 23 Mei 2017, 19:08

benvo schreef:Daarom snapte ik die aanroep van die tekst veldjes niet, Nico. Overigens had ik wel de vinkjes aangezet om te zien of dat een reactie zou opleveren bij aanraking van het tekst veld het geen trouwens niet het geval was. Nog even waarom ik dit zo deed, niet omdat ik zo graag knip en plak, meer om een programma te begrijpen, te zien wat het doet. Daarom ook de vragen die erachter staan. Of het een goede is weet ik niet maar ik probeer iets te leren. Het is fijn dat Koepel maar ook jij me daar bij helpen.

Groet,
Ben.

Ik denk dat jij er beter aan doet om eerst die voorbeelden stuk voor stuk door te werken en net zolang doorgaan tot je ze snapt. Want dat is duidelijk niet het geval. Je kan wel een bos willen kappen, maar dan moet je eerst leren hoe een boom om moet.... Dus niet ff een voorbeeld downloaden, compileren en flashen en dan gelijk dat bijbehorende schermpje laden en klaar. Want het enige wat je dan bereikt hebt is dat je goed een aapje na kan doen... Je moet dus snappen wat de rollen zijn van de verschillende functies en waarom je in de nex_listen_list alleen die componenten zet die daadwerkelijk boodschappen versturen... Uitzoeken of velden worden bijgewerkt als je op een andere pagina staat, hoe de callbacks werken etc etc.
Nu probeer je elke keer een huis te bouwen zonder te weten hoe je een fundering moet maken. En ga dat maar eens repareren achteraf. De fundering is in dit geval de kennis die jezelf in de sketch brengt. En als iets niet werkt maak je een klein voorbeeld programmatje en zoek je uit waarom het niet werkt. Dus welke fout je maakt. Uitgangspunt is ten alle tijde dat jij zelf de fout maakt en het niet in de library zit...

Maar goed Koepel is kennelijk nog steeds bereid er energie in te steken... Dus heb je nog mazzel... Ik wacht rustig af...
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Temperatuur instellen.

Berichtdoor benvo » 23 Mei 2017, 20:38

Ik ben dan ook erg blij met die mazzel.

Overigens ben ik wel degelijk bezig met allerlei zaken, "om te leren". Dit, hetgeen jullie hier zien, moet ik om allerlei redenen af maken maar zal hopelijk niet het laatste zijn wat ik met Arduino zou willen doen.


Groet,
Ben.

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

Re: Temperatuur instellen.

Berichtdoor nicoverduin » 23 Mei 2017, 21:55

Gezien de herhaling van fouten betwijfel ik dat
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Temperatuur instellen.

Berichtdoor benvo » 26 Mei 2017, 16:38

Hallo allemaal,

Het lijkt erop dat de sketch zou moeten werken, toch is dat niet zo. D.w.z. de maxTemp en minTemp worden afgedrukt maar het instellen van de maxTemp en minTemp op het instellingenscherm werkt niet. Er wordt niet gereageerd op de buttons. Natuurlijk heb ik gekeken of er niet ergens een vergissing is gemaakt met tekstvelden hun ID's en pagina's. Evenzo deed ik dit met de buttons waarbij ik er tevens op gelet heb dat in het Touch release event het vinkje geplaatst is. Ook keek ik naar het deel waar de maxTemp en minTemp omgezet worden naar strings en vervolgens worden afgedrukt in de tekstvelden 11 en 12. Zij werken alleen op die plek, ze moeten in de loop? Graag laat ik nog een keer de sketch zien;

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




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); // 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
Wire.begin(); //is deze nodig?????

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);
t11.setText(buffer);

dtostrf(minTemp, 5, 2, buffer);
t12.setText(buffer);

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);
}

Hopelijk zien jullie wel waar de fout zit?

Dank voor de reacties.
Groet,
Ben.

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

Re: Temperatuur instellen.

Berichtdoor Koepel » 26 Mei 2017, 17:55

Je overlaadt de seriële poort naar het display.

Hoe vaak wil je de temperatuur in 't11' en 't12' op het scherm zetten.
Eenmalig ? Iedere seconde ? honderden keren per seconde ?
Je hebt nu honderden keren per seconde in de loop() met t11.setText(buffer) en t12.setText(buffer).

Met p0.setPic(2) en p0.setPic(2) overladen ook de seriele poort als de temperatuur buiten de grenzen komt.

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

Re: Temperatuur instellen.

Berichtdoor nicoverduin » 26 Mei 2017, 18:21

Je zit volgens mij 2 paginas bij te werken door elkaar. En volgens mij werken alleen die objecten op de actuele componenten. Je moet het voorste van koepel eens nader bekijken waar hij ALLEEN die pagina bij werkt die actueel is. Nu gebruik je p0 en p3 door elkaar te verwerken. Los dat het zeer slecht programma ontwerp is, is het ook nog eens de vraag of dit uberhaupt gaat werken.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Temperatuur instellen.

Berichtdoor benvo » 26 Mei 2017, 18:33

Koepel schreef:Je overlaadt de seriële poort naar het display.

Hoe vaak wil je de temperatuur in 't11' en 't12' op het scherm zetten.
Eenmalig ? Iedere seconde ? honderden keren per seconde ?
Je hebt nu honderden keren per seconde in de loop() met t11.setText(buffer) en t12.setText(buffer).

Met p0.setPic(2) en p0.setPic(2) overladen ook de seriele poort als de temperatuur buiten de grenzen komt.

Dag Koepel,

Dat is dan ook de reden waarom ik vroeg naar de plek voor t11 en t12. (Of deze in de loop "moeten".) Op een andere plek wordt er n.l. niets in de tekstvelden geschreven, koepel. Zo plaatste ik dit:dtostrf(maxTemp, 5, 2, buffer);
t11.setText(buffer); dtostrf(minTemp, 5, 2, buffer); t12.setText(buffer); in de setup, vóór de setup in allerlei varianten. Maar er wordt dan niets afgedrukt. Het deel p0 setpic heb ik ook uitgeschakeld, met hetzelfde idee als jij nu hebt in mijn gedachten. Ook probeerde ik de minTemp waarde en de maxTemp waarde alleen naar een string om te zetten, zonder af te drukken dus. Dit in de hoop dat dan de buttons met de PopCallbackfunctie iets zouden doen. Ook dan gebeurt er niets.
Er moet iets anders fout zijn, ik hield nl. al in gedachten dat er sprake zou kunnen zijn van overload omdat we het daar eerder over hadden. Wanneer ik, als gezegd, allerlei zaken uitschakel, werkt er nog niets. Erg vreemd?

Dank je wel voor je reactie.

Groet,
Ben.

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

Re: Temperatuur instellen.

Berichtdoor benvo » 26 Mei 2017, 18:47

nicoverduin schreef:Je zit volgens mij 2 paginas bij te werken door elkaar. En volgens mij werken alleen die objecten op de actuele componenten. Je moet het voorste van koepel eens nader bekijken waar hij ALLEEN die pagina bij werkt die actueel is. Nu gebruik je p0 en p3 door elkaar te verwerken. Los dat het zeer slecht programma ontwerp is, is het ook nog eens de vraag of dit uberhaupt gaat werken.


Even zien of ik je goed begrijp;

Pagina 0 is mijn "dashboard-" pagina. Hierop staan mijn meters.
Pagina 3 is mijn temperatuur instelpagina.

Deze sketch is een deel van een totaalprogramma dat ik gebruik, juist om dit ene deel te testen vóór ik dit invoeg in het hoofdprogramma. (Dit is een tip die ik hier kreeg.)
Dat hier de temperatuur meter (pagina 0) opstaat lijkt me nodig. Dit om te zien of de temperatuur überhaupt wordt aan gegeven. (Wat overigens het geval is.)
De waarschuwing "lampjes", die ook op pagina 0 staan kunnen wel uitgeschakeld worden maar ook dat schijnt niet van invloed te zijn. Het werkt dan nog steeds niet.

Is er een reden om aan te nemen dat daar de fout zit?

Groet,
Ben.

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

Re: Temperatuur instellen.

Berichtdoor Koepel » 26 Mei 2017, 18:52

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);.

In mijn project ga ik er vervolgens 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.
Laatst gewijzigd door Koepel op 26 Mei 2017, 19:29, in totaal 1 keer gewijzigd.

VorigeVolgende

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast