"While-loop"...."break", en dan?
19 berichten
• Pagina 1 van 2 • 1, 2
"While-loop"...."break", en dan?
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: "While-loop"...."break", en dan?
een break springt uit de loop waar hij op dat moment bezig is.
Re: "While-loop"...."break", en dan?
laat eens je programma zien en vertel waar je probleem nou eigenlijk zit.
paul deelen
shooter@home.nl
shooter@home.nl
Re: "While-loop"...."break", en dan?
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
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....?
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....?
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: "While-loop"...."break", en dan?
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
En x kan nooit negatief worden. Is een unsigned long
Re: "While-loop"...."break", en dan?
Bedankt voor de tip. O.K. hier dan nog een keer. Deze keer met ctrl-T:
cpp code
Ik dacht dat "unsigned" juist betekende dat de waarde zowel positief als negatief kan zijn...?
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...?
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: "While-loop"...."break", en dan?
Je kan zoiets gewoon googelen hoor
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: "While-loop"...."break", en dan?
Ik heb jouw code ff geformatteerd als ook alle overbodige {} eruitgehaald. Daarna wat gebreken van jouw programma erbij gezet.
cpp code
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.
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.
Re: "While-loop"...."break", en dan?
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...
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...
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: "While-loop"...."break", en dan?
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/
19 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten