Christmas with 100 millis().

Alles wat niet past in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Christmas with 100 millis().

Berichtdoor Koepel » 02 Dec 2016, 03:47

Nee, dit is geen kerstverhaal voor bij de boom. Dit is voor iedereen die stoeit met millis() of met arrays.

Er kunnen meerdere software timers met millis() gemaakt worden, daarom heb ik 100 verschillende software timers gemaakt.
De interval kan steeds anders gezet worden, daarom gebruik ik random() voor de volgende interval. Voor iedere software timer een andere interval.
En het is december, daarom maak ik er een soort zacht knipperend lampje van alsof het een kaars of een ster is.

Code: Alles selecteren
#define NUM_TIMERS 100
#define MAX_MS 100

unsigned long previousMillis[NUM_TIMERS];
int interval[NUM_TIMERS];
int state;

void setup()
{
  pinMode( LED_BUILTIN, OUTPUT);

  for( int i=0; i<NUM_TIMERS; i++)
    interval[i] = random( 1, MAX_MS);
}

void loop()
{
  unsigned long currentMillis = millis();

  for( int i=0; i<NUM_TIMERS; i++)
  {
    if( currentMillis - previousMillis[i] >= interval[i])
    {
      previousMillis[i] = currentMillis;
      interval[i] = random( 1, MAX_MS);

      // Toggle led
      state = (state == HIGH ? LOW : HIGH);
      digitalWrite( LED_BUILTIN, state);
    }
  }
}


Kun je nagaan wat er gebeurt ?
Er lopen 100 software timers die een interval hebben tussen 1 en 100ms. Er is dus heel vaak een software timer aktief, die de led aan of uit zet. De led brandt dus eigenlijk voor 50%. Doordat de random() er onregelmatigheden in brengt is de led soms net iets langer aan of uit, en dat is een beetje te zien.

Advertisement

Berichten: 10
Geregistreerd: 30 Nov 2016, 14:27

Re: Christmas with 100 millis().

Berichtdoor Josh » 02 Dec 2016, 14:07

Hallo,

Kan iemand mij vertellen wat het stukje "HIGH ? LOW : HIGH" in de regel "state = (state == HIGH ? LOW : HIGH);" betekent?
Of in ieder geval waar ik uitleg over ? en : kan vinden.
In de arduino Reference of Cheat sheet staat of zie ik het niet.

Groet, Jos.

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

Re: Christmas with 100 millis().

Berichtdoor nicoverduin » 02 Dec 2016, 17:25

Dit is een andere manier van if then else te schrijven omdat het resultaat gelijk teruggegeven wordt.
In feite staat hier:
cpp code
if (state == HIGH) {
state = LOW;
} else {
state = HIGH;
}


Hier flipt ie dus state van HIGH->LOW en LOW->HIGH

ZIe verder : https://en.wikipedia.org/wiki/%3F:#C

Zie verder
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 10
Geregistreerd: 30 Nov 2016, 14:27

Re: Christmas with 100 millis().

Berichtdoor Josh » 02 Dec 2016, 18:17

Bedankt Nico, weer wat geleerd.

Terug naar Theekransje

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten