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

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

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

Berichtdoor Dorus1404 » 24 Okt 2019, 10:58

Als in een schets een "While-loop" true wordt en de volgende regel is "break;" waar springt het programma dan naartoe: gaat verder met de volgende programmaregel of springt terug naar het begin van "void loop()"?

Advertisement

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

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

Berichtdoor nicoverduin » 24 Okt 2019, 11:57

een break springt uit de loop waar hij op dat moment bezig is.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

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

Berichtdoor shooter » 26 Okt 2019, 15:09

laat eens je programma zien en vertel waar je probleem nou eigenlijk zit.
paul deelen
shooter@home.nl

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

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

Berichtdoor Dorus1404 » 26 Okt 2019, 16:40

Ik heb het programma al diverse keren veranderd. Het laatst vandaag en ik hoop dat het ook de laatste versie is, maar als het nog niet helemaal werkt zoals ik het bedoel ga ik gewoon verder totdat het wel werkt, eventueel met de zeer gewaardeerde hulp die jullie me al hebben gegeven.

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
*/

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; // donkere tijd in mSec; schemering tot bedtijd.

unsigned long x; // extra + of - tijd (tot 21-12 +, daarna -)

void setup() {
pinMode (pinin, INPUT);
pinMode (pinuit, OUTPUT);
digitalWrite (pinin, LOW); // Pin 5 = 0 volt
digitalWrite (pinuit, LOW); // Pin 6 = 0 volt
d = 18000000; // 5 uur van 19:00 - 24:00
x = 120000; // 2 min. verlenging per dag. Later negatief, dus dan verkorting.
}
void loop()
{
digitalRead(pinin); // input = low
vala = digitalRead(pinin); // 0 volt bij licht en 5 volt in donkere tijd
valb = digitalRead(pinuit); // wordt 0 volt bij bedtijd
{ if (pinin == LOW)
digitalWrite (pinuit, LOW);
}
{digitalRead(pinin); // input = low / high (tweede en volgende keren alleen binnen de void loop())
}
{ while (pinin == LOW) // wachten tot pinin high wordt
digitalWrite (pinuit, HIGH); // donker = 5 volt stuurt relais Aan
}
d = d + x; // dagelijkse verlenging of verkorting avondtijd
{ delay(d); // schemer tot bedtijd
digitalWrite (pinuit, LOW); // relais Uit bij bedtijd
}
{ delay(36000000); // Wachten tot ca. 10:00 uur volgende dag met voldoende licht
}
if (d >= 24960000) // 25 okt - 21 dec = 58(x) + 18.000.000
x = -120000; // x wordt neg na 21 dec
}


Tot nu toe werkte het ingeschakeld blijven van het relais tot bedtijd goed en het bleef uit, maar werd tot gisteren niet opnieuw weer ingeschakeld als het weer donker werd. Ik heb het "break" commando vervangen door een direct commando (maak pin 6 hoog, dus relais aan). Met de bovenstaande versie hoop ik dat ie dat vandaag wel doet....?

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

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

Berichtdoor nicoverduin » 26 Okt 2019, 17:37

Ik zou eens CTRL-T doen in de IDE. Dan is jouw code al wat leesbaarder
En x kan nooit negatief worden. Is een unsigned long
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

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

Berichtdoor Dorus1404 » 26 Okt 2019, 18:37

Bedankt voor de tip. O.K. hier dan nog een keer. Deze keer met ctrl-T:

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
*/

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; // donkere tijd in mSec; schemering tot bedtijd.

unsigned long x; // extra + of - tijd (tot 21-12 +, daarna -)

void setup() {
pinMode (pinin, INPUT);
pinMode (pinuit, OUTPUT);
digitalWrite (pinin, LOW); // Pin 5 = 0 volt
digitalWrite (pinuit, LOW); // Pin 6 = 0 volt
d = 18000000; // 5 uur van 19:00 - 24:00
x = 120000; // 2 min. verlenging per dag. Later negatief, dus dan verkorting.
}
void loop()
{
digitalRead(pinin); // input = low
vala = digitalRead(pinin); // 0 volt bij licht en 5 volt in donkere tijd
valb = digitalRead(pinuit); // wordt 0 volt bij bedtijd
{ if (pinin == LOW)
digitalWrite (pinuit, LOW);
}
{ digitalRead(pinin); // input = low / high
}
{ while (pinin == LOW) // wachten tot pinin high wordt
digitalWrite (pinuit, HIGH); // donker = 5 volt stuurt relais Aan
}
d = d + x; // dagelijkse verlenging of verkorting avondtijd
{ delay(d); // schemer tot bedtijd
digitalWrite (pinuit, LOW); // relais Uit bij bedtijd
}
{ delay(36000000); // Wachten tot ca. 10:00 uur volgende dag met voldoende licht
}
if (d >= 24960000) // 25 okt - 21 dec = 58(x) + 18.000.000
x = -120000; // x wordt neg na 21 dec
}


Ik dacht dat "unsigned" juist betekende dat de waarde zowel positief als negatief kan zijn...?

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

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

Berichtdoor nicoverduin » 26 Okt 2019, 18:51

Je kan zoiets gewoon googelen hoor
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

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

Berichtdoor nicoverduin » 26 Okt 2019, 19:20

Ik heb jouw code ff geformatteerd als ook alle overbodige {} eruitgehaald. Daarna wat gebreken van jouw programma erbij gezet.
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
*/

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; // donkere tijd in mSec; schemering tot bedtijd.

unsigned long x; // extra + of - tijd (tot 21-12 +, daarna -)

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

digitalWrite(pinin, LOW); // Pin 5 = 0 volt *** Onzinnige opdracht. Is een input
digitalWrite(pinuit, LOW); // Pin 6 = 0 volt

d = 18000000; // 5 uur van 19:00 - 24:00
x = 120000; // 2 min. verlenging per dag. Later negatief, dus dan verkorting.
}
void loop() {
digitalRead(pinin); // input = low *** onzinnige opdracht. waarde wordt niet gelezen

vala = digitalRead(pinin); // 0 volt bij licht en 5 volt in donkere tijd

valb = digitalRead(pinuit); // wordt 0 volt bij bedtijd *** onzinnige opdracht. Is een uitvoer

if (pinin == LOW) *** vala bevat de waarde die gelezen is
digitalWrite(pinuit, LOW);

digitalRead(pinin); // input = low / high *** onzinnige opdracht. waarde wordt niet gelezen

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

d = d + x; // dagelijkse verlenging of verkorting avondtijd
delay(d); // schemer tot bedtijd

digitalWrite(pinuit, LOW); // relais Uit bij bedtijd
delay(36000000); // Wachten tot ca. 10:00 uur volgende dag met voldoende licht

if (d >= 24960000) // 25 okt - 21 dec = 58(x) + 18.000.000
x = -120000; // x wordt neg na 21 dec *** x wordt nooit negatief dit wordt omgezet in een
} *** positief getal


Zoals je ziet mankeert er nogal wat aan. Ik zou eens goed de basis tutorials bekijken in de IDE want daar staan in feite al jouw antwoorden in.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

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

Berichtdoor Dorus1404 » 27 Okt 2019, 05:52

Uiteraard heb ik al vele basistutorials bekeken. Het kan zijn dat ik ze verkeerd heb begrepen en toegepast in mijn schets, maar het negatief worden van de "unsigned long" x heb ik in een klein programmaatje getest en dat werkte goed. Eerst optellen en bij een bepaald maximum weer terugtellen. Dus die "unsigned long" kon wel negatief worden.
Jij schrijft als commentaar "onzinnige opdracht". Ongetwijfeld heb je gelijk, maar ik kan daar niks mee, want er staat niet bij wat het dan wel moet zijn. Ik heb stapels boeken en internet-pdf's, die ik raadpleeg. Ik lees bijvoorbeeld ergens: zet voor alle zekerheid een input die low moet zijn op nul, anders kan de spanning gaan zweven. Maar jij zegt "onzinnige opdracht". Dat maakt het dan voor mij moeilijk als je niet aangeeft wat ik dan beter kan doen...

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

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

Berichtdoor nicoverduin » 27 Okt 2019, 07:39

Dorus1404 schreef:Uiteraard heb ik al vele basistutorials bekeken. Het kan zijn dat ik ze verkeerd heb begrepen en toegepast in mijn schets, maar het negatief worden van de "unsigned long" x heb ik in een klein programmaatje getest en dat werkte goed. Eerst optellen en bij een bepaald maximum weer terugtellen. Dus die "unsigned long" kon wel negatief worden.

doe maar eens een Serial.print van dat getal

Dorus1404 schreef:Jij schrijft als commentaar "onzinnige opdracht". Ongetwijfeld heb je gelijk, maar ik kan daar niks mee, want er staat niet bij wat het dan wel moet zijn. Ik heb stapels boeken en internet-pdf's, die ik raadpleeg. Ik lees bijvoorbeeld ergens: zet voor alle zekerheid een input die low moet zijn op nul, anders kan de spanning gaan zweven. Maar jij zegt "onzinnige opdracht". Dat maakt het dan voor mij moeilijk als je niet aangeeft wat ik dan beter kan doen...


Ik mag hopen dat je een pullup weerstand hebt gebruikt zoals in de voorbeelden is aangegeven. Die hangt hem aan de 5V. Dat staat er in de digital IO voorbeelden

En ik zou deze nog eens bestuderen : https://www.arduino.cc/reference/en/lan ... gitalread/
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 13 gasten