simpel timertje lukt niet

De regels van arduinoforum.nl
Berichten: 47
Geregistreerd: 29 Sep 2019, 18:42
Woonplaats: Vlijmen

simpel timertje lukt niet

Berichtdoor Dorus1404 » 29 Sep 2019, 18:49

Ik ben een beginner en waarschijnlijk daarom lukt mijn eerste sketch al niet. Willen jullie hier eens naar kijken en zeggen wat ik fout doe?

/* Timer om een relais te activeren en te deactiveren

*/


unsigned long Z ;


void setup() {


Z == 0 ;
pinMode(11, OUTPUT) ;
digitalWrite(11, HIGH) ;

}

void loop() {

for (Z = 0; Z <= 20000; Z++)

digitalWrite(11, LOW) ;
}

Advertisement

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

Re: simpel timertje lukt niet

Berichtdoor Koepel » 29 Sep 2019, 19:57

Hallo, en welkom op dit forum.
Ik weet niet wat je wilt doen, dus ik weet ook niet wat er niet goed aan de sketch is.

Hieronder staat je sketch, maar dan een beetje anders opgeschreven.
cpp code
// Timer om een relais te activeren en te deactiveren

unsigned long Z;

void setup()
{
Z = 0;
pinMode(11, OUTPUT);
digitalWrite(11, HIGH);
}

void loop()
{
for (Z = 0; Z <= 20000; Z++)
{
digitalWrite(11, LOW);
}
}


Als je een pin als LOW zet, dan blijft die pin LOW. Je hoeft dat niet 20000 keer te doen. Eén keer is voldoende.

In de setup() wordt die pin HIGH gezet. In de loop() wordt die pin LOW gezet. Dat is zo'n 10 µs later. Daarna blijft die pin altijd LOW. Dus gedurende 10 µs is die pin HIGH.

Ken je de delay() functie: https://www.arduino.cc/reference/en/language/functions/time/delay/

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

Re: simpel timertje lukt niet

Berichtdoor Dorus1404 » 30 Sep 2019, 05:20

Dit is slechts het begin om uiteindelijk een timer te maken die ingeschakeld wordt door een Schemerschakelaar met LDR als het 's avonds donker wordt, dan een relais activeert (digitalWrite(11, HIGH);) en telt tot bedtijd (For-loop) en het relais weer deactiveert, maar tot 21 december elke dag 2 minuten langer timet en dan weer terug telt. Daarom de For-loop, waarbij Z na elke inschakeling door de LDR verhoogd wordt met 120.000 mSec. De waarden in dit timertje zijn natuurlijk nog niet de uiteindelijke. Deze zijn slechts om het te testen.

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

Re: simpel timertje lukt niet

Berichtdoor Dorus1404 » 30 Sep 2019, 05:50

Nu heb ik na de For-loop Delay(Z) geplaatst en dan werkt het. Ik heb ook met een stopwatch gekeken hoe lang Delay(Z) is en het blijkt dat de waarde 100 in de for-loop 5 sec delay oplevert, 200 rond de 20 sec. en 300 rond de 45 sec.. Ik dacht dat delay met milliseconden werkt? Weten jullie hoe dat komt?

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

Re: simpel timertje lukt niet

Berichtdoor shooter » 30 Sep 2019, 21:03

het is voor jou tijd voor les 2 en die gaat over millis() en timer.
is even lastig maar iemand van 6 kan dit al.
in arduino zit namelijk gewoon een timer die elke milliseconde 1 bijtelt. die timer heet millis().
als je dus een bepaalde tijd wilt detecteren dan doe je if((millis()-starttijd)>wachttijd){starttijd=millis;nog een commando zoals digitalWrite etc}
als je dat in de loop zet en dan kun je dus verschillende taken tegelijk doen.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: simpel timertje lukt niet

Berichtdoor Gij Kieken » 30 Sep 2019, 21:10

Of je kunt deze reeks eens volgen ,het is in het Nederlands.
https://arduino-lessen.nl/

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

Re: simpel timertje lukt niet

Berichtdoor Dorus1404 » 02 Okt 2019, 07:08

Volgende versie, maar ik ben er nog niet uit. Willen jullie hier eens naar kijken? Met name de For-loop zou in milliseconden moeten tellen, maar ik krijg hele andere tijden; veel langer.

En ten tweede: Hoe moet ik (na 21 december) terug gaan tellen, want t negatief maken werkt maar 1 keer.

/* Timer om een relais te activeren en te deactiveren
afhankelijk van de datum van zonsondergang tot de tijd
om te gaan slapen. Tot 21 december elke dag + 2 minuten,
maar vanaf 21-12 elke dag - 2 minuten. Start 15 oktober
van 18:50 tot 23:50 uur.
*/

unsigned long z;
unsigned long t;
unsigned long m;
unsigned long l;
const int n = 12;

void setup()
{

pinMode(11, OUTPUT); // Deze pin schakelt een relais
pinMode(12, INPUT); // Krijgt 5 of 0 volt van extern

z == 18000000; // seconden = 5 uren (schemer tot slapen)
m = z + t; // 5 uren ,elke dag + t minuten (eerste dag 0)

}
void loop()
{

if (n == HIGH);
{
for (l = 0; l <= m; l++) // z + t seconden wachttijd, stoppen en pin 11 LOW

digitalWrite(11, LOW); // relais uit
digitalWrite(12, LOW); // Loop stopt (regel 26)en start de volgende dag weer als pin 12 weer HIGH wordt.

}
// delay(z); Moet dit erbij of duurt de For-loop werkelijk 18000000 + t seconden?

t == 120000; // seconden = 2 minuten
m = z + t; // elke dag + 2 minuten


}

if (m >= 26040000); // 21 december. Nu moeten we gaan terugtellen, dus t moet negatie worden???
// maar hoe nu verder?
t == -120000; // werkt maar 1 keer ....?????
}

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

Re: simpel timertje lukt niet

Berichtdoor Koepel » 02 Okt 2019, 12:53

Je zit vast met je gedachten bij die for-loop.
Zou je die for-loop helemaal weg kunnen doen ?

Als je kunt berekenen met "unsigned long" variabelen hoeveel delay je wilt, dan kun je de delay() functie gebruiken.

Het bijhouden van een nieuwe dag is op die manier lastig. shooter schreef al over millis(). Met behulp van millis() is het goed te doen om de dagen bij te houden, maar dan is het nodig om je die manier eigen te maken.
Kun je dit eens proberen: https://github.com/Koepel/Fun_with_millis/blob/master/millis_clock.ino.

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

Re: simpel timertje lukt niet

Berichtdoor Dorus1404 » 03 Okt 2019, 04:06

De exacte tijd is niet belangrijk. Het gaat om een relais inschakelen als het schemert en het om ongeveer bedtijd te deactiveren. In een tabel zon op en onder kun je zien wanneer je start, bijvoorbeeld 15 oktober, hoe laat het donker wordt en hoeveel tijd tot b.v. 23:55 uur. Die tijd omzetten naar milliseconden en elke dag ophogen met 2 minuten tot 21 december en dan terug, want de LDR-schakeling zal ook 2 minuten eerder (of later) inschakelen. Ik heb weer een nieuwe versie geprobeerd, maar die werkt nog niet. Ik weet niet waar de fout zit, maar hopelijk met wat hulp lukt het uiteindelijk. (Ik heb getest met kleinere tijden/getallen) Ik ben er van uit gegaan dat alleen de void loop() gelezen wordt als de de volgende dag pin 12 weer HIGH wordt voor enkele seconden.


/* Timer om een relais te activeren en te deactiveren
afhankelijk van de datum van zonsondergang tot de tijd
om te gaan slapen. Tot 21 december elke dag + 2 minuten,
maar vanaf 21-12 elke dag - 2 minuten. Start 15 oktober
van 18:50 tot 23:50 uur.
*/

unsigned long z;
unsigned long t;
unsigned long m;
const int nPin = 12;

void setup()
{

pinMode(11, OUTPUT); // Deze pin schakelt een relais
pinMode(12, INPUT); // Krijgt 5 of 0 volt van extern voor enkele seconden, maar dan is 'delay(m)' al aan het tellen.

z == 18000000; // m.seconden = 5 uren (schemer tot slapen)
t == 120000; // m.seconden = 2 minuten langere donkere avond
m = z + t; // 5 uren ,elke dag + t minuten.

}
void loop()
{

if (nPin == HIGH);
digitalWrite(11, HIGH); // relais aan
{
delay(m);
}

{
digitalWrite(11, LOW); // relais uit
digitalWrite(nPin, LOW); // Loop stopt (regel 27)en start de volgende dag weer als pin 12 HIGH wordt door de LDR-
// schakeling.

}
m = m + t; // elke dag + 2 minuten opgeteld (pos. of neg.) bij vorige waarde m
{

if(m >= 26040000); // 21 december (+ 67 dgn x 120000). Nu moeten we gaan terugtellen, dus t moet negatief worden.

t == -120000; // werkt maar 1 keer.
}}

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

Re: simpel timertje lukt niet

Berichtdoor shooter » 03 Okt 2019, 16:11

in de laatste regel staat == en dat kan niet want je wil niet kijken of het gelijk is, maar t aanpassen aan je getal van 120000000
paul deelen
shooter@home.nl

Volgende

Terug naar Forum regels

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten