"While-loop"...."break", en dan?

IDE gerelateerde berichten
Berichten: 30
Geregistreerd: 29 Sep 2019, 18:42
Woonplaats: Vlijmen

Re: "While-loop"...."break", en dan?

Berichtdoor Dorus1404 » 27 Okt 2019, 11:19

while (pinin == LOW) // wachten tot pinin high wordt *** pinin moet je lezen. hij komt nooit voorbij deze opdracht
digitalWrite(pinuit, HIGH); // donker = 5 volt stuurt relais Aan

Ik heb de while loop zo begrepen dat zolang de conditie (pinin == low) true is de loop eindeloos doorgaat, maar in mijn geval krijgt pinin, als het donker wordt, bijna 5 volt en dan wordt de conditie false en wordt de volgende regel gelezen. Klopt dit of niet?
Indien het niet goed is geschreven, hoe zou ik dan het moeten wachten op het hoog worden van pinin?

Advertisement

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

Re: "While-loop"...."break", en dan?

Berichtdoor nicoverduin » 27 Okt 2019, 12:58

Zoals ik al eerder zei...... bekijk de voorbeelden van een digitale io. En als jij een ldr of zo gebruikt dan moet je een analoge read doen....
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: "While-loop"...."break", en dan?

Berichtdoor nicoverduin » 27 Okt 2019, 12:59

En pinin zelf wordt nooit LOW. Daar staat 5 hard gecodeerd in
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 3067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: "While-loop"...."break", en dan?

Berichtdoor shooter » 28 Okt 2019, 16:39

geloof nico maar die heeft gelijk,zoek uit wat een digitalRead doet ofwel het reultaat moet naar een variabele.
een ingang kun je niet writen (nou ja het kan wel maar wordt gebruikt om een ingang te pushen.
paul deelen
shooter@home.nl

Berichten: 30
Geregistreerd: 29 Sep 2019, 18:42
Woonplaats: Vlijmen

Re: "While-loop"...."break", en dan?

Berichtdoor Dorus1404 » 30 Okt 2019, 18:48

Mannen bedankt! Dank zij o.a. jullie hulp heb ik nu een goed werkend programmaatje dat precies doet wat ik wil. Het is weliswaar stap voor stap tot stand gekomen, maar aldoende leert men (vooral van fouten) en nu werkt het goed. Ik vraag me alleen af of ik de meest simpele vorm heb gevonden. Ik heb n.l. zo'n vaag vermoeden dat de code nog compacter zou kunnen, maar ik ben vooralsnog tevreden met het resultaat. Voor de nieuwsgierigen hier het eindresultaat:

cpp code
/*
Avondtimer

Een avondtimer, schakelt een relais in bij schemer (externe schakeling)
van schemer tot bedtijd. Verlengt tussen 21 jun en 21 dec de avondtijd
elke dag met 2 minuten en na 21 dec verkort elke dag met 2 minuten.
De waarde van de variabele "d" kan worden aangepast aan de begindatum.
*/

int pinin = 5; // Krijgt 5 volt van schemerschakeling bij invallende duisternis
int pinuit = 6; // stuurt een vermogenstransistor met relais. Hoog is Aan
int vala = 0;
int valb = 0;

unsigned long d = 25200000; // donkere tijd in mSec; schemering tot bedtijd.
long x = 120000; // extra + of - tijd (tot 21-12 +, daarna -)

void setup()
{
pinMode (pinin, INPUT);
pinMode (pinuit, OUTPUT);
}
void loop()
{
digitalRead (pinin); // Pin 5 = 5 / 0 volt
vala = digitalRead(pinin); // 0 volt bij licht en 5 volt in donkere tijd
if (vala == LOW)
digitalWrite (pinuit, LOW);
else
digitalWrite (pinuit, HIGH); // donker = 5 volt stuurt relais Aan
if (vala == HIGH)
delay(d); // schemer tot bedtijd
if (vala == HIGH)
d = d + x; // dagelijkse verlenging of verkorting avondtijd
if (d >= 31560000) // 29 okt - 21 dec = 53(x) + 25.200.000
x = -120000; // x wordt neg na 21 dec
digitalWrite (pinuit, LOW); // relais Uit bij bedtijd
if (vala == HIGH) // Voorkomt "delay" overdag, zodat pin 5 weer op tijd wordt geactiveerd
delay(50400000); // Wachten tot ca. 14:00 uur volgende dag. Pin 5 = LOW
}


Dit resultaat moedigt aan om weer andere projectjes te gaan proberen.

Nogmaals dank!

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

Re: "While-loop"...."break", en dan?

Berichtdoor nicoverduin » 31 Okt 2019, 11:35

Zo had ie ook gekun:

cpp code
/*
Avondtimer

Een avondtimer, schakelt een relais in bij schemer (externe schakeling)
van schemer tot bedtijd. Verlengt tussen 21 jun en 21 dec de avondtijd
elke dag met 2 minuten en na 21 dec verkort elke dag met 2 minuten.
De waarde van de variabele "d" kan worden aangepast aan de begindatum.
*/

int pinin = 5; // Krijgt 5 volt van schemerschakeling bij invallende duisternis
int pinuit = 6; // stuurt een vermogenstransistor met relais. Hoog is Aan
int vala = 0;

unsigned long d = 25200000; // donkere tijd in mSec; schemering tot bedtijd.
long x = 120000; // extra + of - tijd (tot 21-12 +, daarna -)

void setup() {
pinMode(pinin, INPUT);
pinMode(pinuit, OUTPUT);
}

void loop() {
vala = digitalRead(pinin); // 0 volt bij licht en 5 volt in donkere tijd
if (vala == LOW)
digitalWrite(pinuit, LOW);
else {
digitalWrite(pinuit, HIGH); // donker = 5 volt stuurt relais Aan
delay(d); // schemer tot bedtijd
d = d + x; // dagelijkse verlenging of verkorting avondtijd
if (d >= 31560000) // 29 okt - 21 dec = 53(x) + 25.200.000
x = x * -1; // x wordt neg na 21 dec
digitalWrite(pinuit, LOW); // relais Uit bij bedtijd
delay(50400000); // Wachten tot ca. 14:00 uur volgende dag. Pin 5 = LOW
}
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 30
Geregistreerd: 29 Sep 2019, 18:42
Woonplaats: Vlijmen

Re: "While-loop"...."break", en dan?

Berichtdoor Dorus1404 » 31 Okt 2019, 11:57

Ja, ziet er inderdaad beter uit. Ga ik aan denken als ik schrijf.

Berichten: 3067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: "While-loop"...."break", en dan?

Berichtdoor shooter » 03 Nov 2019, 12:56

ipv vala zet er neer wat het werkelijk betekent dat is een stuk beter leesbaar.
en stap voor stap is prima hoor dat in elkaar drukken van code is wel leuk, maar stamt uit de 70 jaren toen wel alles schreven in 1k geheugen.
paul deelen
shooter@home.nl

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

Re: "While-loop"...."break", en dan?

Berichtdoor nicoverduin » 03 Nov 2019, 14:12

shooter schreef:ipv vala zet er neer wat het werkelijk betekent dat is een stuk beter leesbaar.
en stap voor stap is prima hoor dat in elkaar drukken van code is wel leuk, maar stamt uit de 70 jaren toen wel alles schreven in 1k geheugen.

Helaas Paul maar is nu nog net zo actueel. Studenten moeten nog steeds kijken of de code efficiënter kan. En bij Cortex Assembly praten we zelfs over minimaliseren van cpu cycles en memory gebruik. Dus ik zou niet stellen dat het uit de jaren 70 is en dus achterhaald.
Over variabele naamgeving helemaal mee eens.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Vorige

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 7 gasten