Weg met die delay's
12 berichten
• Pagina 1 van 2 • 1, 2
Weg met die delay's
We hadden een programmaatje voor een knipperend waarschuwings lampje bij te lage of te hoge waardes.
Dat zag er zo uit en werkt goed:
cpp code
Nu is het hebben van delay's in het grotere programma deel wegens het hebben van timers geen goed idee, zo lijkt me. Dus kwam ik uit bij Blink without delay.
Het bovenstaande deel wilde ik dus vervangen door het volgende, maar dit krijg ik niet werkend. Ik probeerde vele varianten met overzie waarschijnlijk het e.e.a.
cpp code
Alles knippert razend snel, er moet denkelijk ergens nóg een vertrager ingebouwd maar hoe heb ik niet gevonden.
Waar zit de fout?
Groet,
Ben.
Dat zag er zo uit en werkt goed:
cpp code
- Code: Alles selecteren
x=5 //foute waarde
if (x<3||x>3)
{
p0.setPic(1); //Picture off
delay(1000);
p0.setPic(2); //picture on
delay(1000);
}
else
{
p0.setPic(1);
}
Nu is het hebben van delay's in het grotere programma deel wegens het hebben van timers geen goed idee, zo lijkt me. Dus kwam ik uit bij Blink without delay.
Het bovenstaande deel wilde ik dus vervangen door het volgende, maar dit krijg ik niet werkend. Ik probeerde vele varianten met overzie waarschijnlijk het e.e.a.
cpp code
- Code: Alles selecteren
x=5 //foute waarde
unsigned long switchTime; //opgebouwde tijd om de pictures te wisselen
static boolean setPic;
if(x<3||x>3)
{
if (setPic==false)
{
setPic=true;
switchTime=millis();
p0.setPic(1);
}
if (setPic==true&&(millis()-switchTime)>1000)
{
p0.setPic(2);
setPic=false;
}
}
Alles knippert razend snel, er moet denkelijk ergens nóg een vertrager ingebouwd maar hoe heb ik niet gevonden.
Waar zit de fout?
Groet,
Ben.
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Weg met die delay's
Zou jij eens willen redeneren in text wat daar staat?
Re: Weg met die delay's
Ga ik proberen, Nico.
Als x groter of kleiner is dan 3 wordt de sketch vervolgt.
Als (boolean vergelijking) setPic is gelijk aan fout
Dan is setPic waar
switchTime=millis(); tijd in millis wordt opgebouwd en die waarde wordt in switchTime gezet
Zet plaatje 1 aan.
Als setPic gelijk aan waar is en de milliswaarde minus de waarde in switchTime is groter dan 1000
zet plaatje 2 aan.
zet (boolean vergelijking) setPic op fout
Omschrijf ik zo juist?
De regel voordat plaatje 1 aangezet wordt zegt eigenlijk dat opdat moment switchTime en millis een gelijke waarde hebben. Waarschijnlijk gaat plaatje twee aan maar razendsnel is het programma weer bij switchTime=millis(); dus weer gelijke waarde, en zijn we weer terug bij af. Daarom denk ik dat er een derde "iets" moet zijn die milliswaarde groter dan 1000 vast houdt. Waarschijnlijk breng ik dat slecht onder woorden maar hopelijk begrijp je wat ik bedoel?
Groet,
Ben.
Als x groter of kleiner is dan 3 wordt de sketch vervolgt.
Als (boolean vergelijking) setPic is gelijk aan fout
Dan is setPic waar
switchTime=millis(); tijd in millis wordt opgebouwd en die waarde wordt in switchTime gezet
Zet plaatje 1 aan.
Als setPic gelijk aan waar is en de milliswaarde minus de waarde in switchTime is groter dan 1000
zet plaatje 2 aan.
zet (boolean vergelijking) setPic op fout
Omschrijf ik zo juist?
De regel voordat plaatje 1 aangezet wordt zegt eigenlijk dat opdat moment switchTime en millis een gelijke waarde hebben. Waarschijnlijk gaat plaatje twee aan maar razendsnel is het programma weer bij switchTime=millis(); dus weer gelijke waarde, en zijn we weer terug bij af. Daarom denk ik dat er een derde "iets" moet zijn die milliswaarde groter dan 1000 vast houdt. Waarschijnlijk breng ik dat slecht onder woorden maar hopelijk begrijp je wat ik bedoel?
Groet,
Ben.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Weg met die delay's
Door te redeneren ben jezelf achter de fout gekomen. En dat was ook de bedoeling. Nou de oplossing..... waarom maak je het jezelf zo moeilijk? Je wilt eigenlijk maar 1x per seconde wisselen van plaatje. Dus als 1 er staat zetje 2 neer en omgekeerd. Blink zegt een x per seconde als de led aan is zet deze uit. En omgekeerd. Is dus precies hetzelfde.... dus????
Re: Weg met die delay's
Nou ja, dat hetzelfde...
Ik heb TWEE plaatjes die ik elk een seconde wil laten zien. Dus niet plaatje aan en daarna uit maar plaatje 1 wisselt met plaatje twee. Nu maar even stoppen, ik ben er nog niet uit...
Dank je voor je reacties!
Groet,
Ben.
Ik heb TWEE plaatjes die ik elk een seconde wil laten zien. Dus niet plaatje aan en daarna uit maar plaatje 1 wisselt met plaatje twee. Nu maar even stoppen, ik ben er nog niet uit...
Dank je voor je reacties!
Groet,
Ben.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Weg met die delay's
Zie blink_without_delay.....
Re: Weg met die delay's
Vergeet de vorige opmerking, dat is een denkfout!
Tot nu toe heb ik deze sketch die werkt maar niet zoals ik zou willen. De "uit" status van het lampje is een flits, niet meer dan dat terwijl de "aan" status ook werkelijk een seconde blijft staan.
Hier is de sketch:
[code2=cpp][/
Groet,
Ben.
Tot nu toe heb ik deze sketch die werkt maar niet zoals ik zou willen. De "uit" status van het lampje is een flits, niet meer dan dat terwijl de "aan" status ook werkelijk een seconde blijft staan.
Hier is de sketch:
[code2=cpp][/
- Code: Alles selecteren
#include "Nextion.h"
NexPicture p0=NexPicture(0,5,"p0");
int x=5; //bewust fout ingegeven waarde
unsigned long previousMillis=0; //houdt de vorige doorlooptijd bij.
unsigned long currentMillis=0; //houdt de huidige opbouwtijd bij
boolean setPic;
void setup()
{
nexInit(); //initialisatie Nextion
}
void loop()
//Berekening alarmlicht bij onder- of overwaarde
{
if (x<3||x>3)
{
if(setPic==false)
{
setPic=true;
currentMillis=millis();
}
if(setPic==true && (currentMillis-previousMillis)>1000)
{
p0.setPic(1); //picture "uit" lampje
previousMillis=currentMillis;
}
else
{
p0.setPic(2); //picture "aan" lampje
setPic=false;
}
}
}
Groet,
Ben.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Weg met die delay's
Ik wacht rustig af tot ik de sketch van blink without delay zie. Dit is prut wat je nu hebt...oftewel pleur wat je nu hebt in de vuilnisbak en begin met blink without delay. Gewoon met een ledje en snap hem tot in den treure..en alles eruit over setpic is true of false... als ook dat verhaal over x > 3 enz. Allemaal stoorzenders. Zoalng je bwd niet tot in den treure snapt, is het zinloos om verder te prutsen:)
Re: Weg met die delay's
Kijk, de werking van Blink without delay begrijp ik. Het probleem zat hem in de vertaling naar mijn situatie toe.
Maar door jouw "strenge" opvoeding naar me toe heb ik hem toch gevonden....
Dit is het geworden:
cpp code
Dit werkt keurig.
Toch nog een vraag, Nico.
Mijn Nextion is aan mijn Arduino Mega aangesloten.
Serial 2 wordt gebruikt.
Pin 17 (Rx2) is aangesloten (blauwedraad) op Tx (!)
Pin 16 (Tx2) is aangesloten (geledraad) op Rx(1)
Nu dacht ik dat Rx data ontvangt dat Tx data uitstuurt.
Vanwaar deze verwarrende verwisseling met het scherm die je overigens niet vindt bij de Pinnen 0 en 1 (Deze kan ik dus wél aansluiten met Tx op Tx en Rx op Rx)?
Bedankt voor je hulp!
Groet,
Ben.
Maar door jouw "strenge" opvoeding naar me toe heb ik hem toch gevonden....
Dit is het geworden:
cpp code
#include "Nextion.h"
NexPicture p0=NexPicture(0,5,"p0");
const int ledPin = 16; //Rx ledPin 16
int setPic = LOW; //Instelling om de picture 1 of 2 kiezen
unsigned long previousMillis = 0; //Houdt de voorgaande tijd vast.
const long interval = 1000; //interval van één seconde
void setup()
{
nexInit(); //initialisatie van het Nextion scherm
pinMode(ledPin, OUTPUT); //De pin als uitgang
}
void loop() {
unsigned long currentMillis = millis(); //timer loopt en slaat milliseconden op in currentMillis
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
if (setPic == LOW)
{
setPic = HIGH;
p0.setPic(2);
}
else
{
setPic = LOW;
p0.setPic(1);
}
digitalWrite(ledPin, setPic); //Zet de keuze van de Picture
}
}
Dit werkt keurig.
Toch nog een vraag, Nico.
Mijn Nextion is aan mijn Arduino Mega aangesloten.
Serial 2 wordt gebruikt.
Pin 17 (Rx2) is aangesloten (blauwedraad) op Tx (!)
Pin 16 (Tx2) is aangesloten (geledraad) op Rx(1)
Nu dacht ik dat Rx data ontvangt dat Tx data uitstuurt.
Vanwaar deze verwarrende verwisseling met het scherm die je overigens niet vindt bij de Pinnen 0 en 1 (Deze kan ik dus wél aansluiten met Tx op Tx en Rx op Rx)?
Bedankt voor je hulp!
Groet,
Ben.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Weg met die delay's
Je redenering is ook juist. Dus de zender van de ene aan de ontvanger van de andere... En voor de verwarrende aanduiding moet je bij Arduino zijn.... De nextion weet immers niet wie of wat de zender of ontvanger is......
ps: En gebruik af en toe de <CTRL>-T combi om je code te formatteren. Nu ziet het er nog slordig uit.
ps: En gebruik af en toe de <CTRL>-T combi om je code te formatteren. Nu ziet het er nog slordig uit.
12 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 25 gasten