Weg met die delay's

Software die niet past in bovenstaande onderwerpen
Berichten: 314
Geregistreerd: 23 Okt 2016, 20:29

Weg met die delay's

Berichtdoor benvo » 31 Mrt 2017, 19:39

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

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

Re: Weg met die delay's

Berichtdoor nicoverduin » 31 Mrt 2017, 19:53

Zou jij eens willen redeneren in text wat daar staat?
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 314
Geregistreerd: 23 Okt 2016, 20:29

Re: Weg met die delay's

Berichtdoor benvo » 31 Mrt 2017, 21:11

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.

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

Re: Weg met die delay's

Berichtdoor nicoverduin » 31 Mrt 2017, 21:25

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????
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 314
Geregistreerd: 23 Okt 2016, 20:29

Re: Weg met die delay's

Berichtdoor benvo » 31 Mrt 2017, 23:15

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.

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

Re: Weg met die delay's

Berichtdoor nicoverduin » 01 Apr 2017, 08:47

Zie blink_without_delay.....
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 314
Geregistreerd: 23 Okt 2016, 20:29

Re: Weg met die delay's

Berichtdoor benvo » 01 Apr 2017, 10:39

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][/
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;
      }
       
   
  }
}

code2]

Groet,
Ben.

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

Re: Weg met die delay's

Berichtdoor nicoverduin » 01 Apr 2017, 11:00

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:)
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 314
Geregistreerd: 23 Okt 2016, 20:29

Re: Weg met die delay's

Berichtdoor benvo » 02 Apr 2017, 12:35

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
#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.

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

Re: Weg met die delay's

Berichtdoor nicoverduin » 02 Apr 2017, 14:28

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.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Bing [Bot] en 1 gast