Bouwverslag Ledjes laten knipperen

Discussie in 'Model elektronica' gestart door GdeV, 15 okt 2024 om 09:51.

  1. Micropuller

    Micropuller Forum veteraan

    Lid geworden:
    1 jul 2004
    Berichten:
    6.400
    Je zou eens kunnen kijken naar Xlights. Dat werkt in combinatie met een arduino, maar je kunt ook stand-alone led controllers gebruiken. In combinatie met wat RGB strip of pixels kun je het dan zo gek maken als je wilt.
     
  2. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.357
    Locatie:
    Boskoop
    Ik vind het leuk om mijn hersens te breken op dit soort projecten. Ik had al een sketch gepubliceerd in post #14, met een opmerking als "zoek het verder zelf uit". Maar alhoewel de setup wel werkt, en redelijk goed te begrijpen voor de beginnende Arduino-liefhebber is lijkt mij, zou het voor 13 verschillende knipperlichtpatronen
    toch wel tot een heleboel regels tekst leiden.
    Ik heb daarom een complete sketch geschreven, nu gebaseerd op de wat ingewikkeldere Setup met z.g. arrays. De hoofdmoot is een 2-dimensionale array, waar alle knipperpatronen ingestopt worden ( voor mij ook nieuw, zo leer ik weer wat). Ik heb alleen de knipperlichtpatronen er ingestopt, waar je dan lichten hebt die continu aan staan kun je die beter buiten de Arduino om aansluiten. Ook heb ik alleen de patronen voor de gele (witte?) lichten er ingestopt, als er dan op dezelfde plek ook groene en rode lichten met hetzelfde patroon werken kun je die samen met het gele licht op één pin op de arduino aansluiten. Hier is de sketch:

    Code:
    /*
    The profiles-array has 13 rows and 5 values per row, but is restricted to 2x4 profile durations (changes to ON + changes to OFF),
    the last value of each row array should be 0 to trigger repetition of the pattern.
    (the last value is 0 automatically, as long as it is not overwritten)
    */
    int profiles[13][9]={{9,1},{1,1},{10,10},{1,1,1,3,1,8},{1,1},{1,1,1,1,1,10},{1,1,1,1,1,1,1,13},{4,4},{1,3},{4,4},{4,4},{1,1,1,7},{5,1}};
    // resp. Breskens, Westkapelle, Noorderhoofd, Westerschouwen, Verklikker, Westhoofd, Goeree, Kwade Hoek,
    // Maasvlakte, Maasmond hoog, Maasmond laag, Scheveningen, Noordwijk aan zee, patterns.
    
    long targets[13];
    int actual[13];
    bool lightStatus[13];
    int leds[13];
    
    
    void setup() {
      for (int r=0; r<13; r++) {
        targets[r] = random (0,1000); // random start for each light between 1 and 5 seconds.
        lightStatus[r] = true; // turn all lights on.
        leds[r] = r + 2;
        pinMode (leds[r],OUTPUT);
      }
    }
    
    void loop() {
      for (int x=0; x<13; x++) {
        if (millis() >= targets [x]) { // if the target has been reached, increase the counter.
          actual[x] = actual[x] + 1;
          if (profiles[x][actual[x]] == 0) {
            actual[x] = 0; // reset the counter if a zero has been encountered.
          }
          targets[x] = targets[x] + (profiles[x][actual[x]])*1000; // increase the target with the next profile value (in milliseconds).
          lightStatus[x] = !lightStatus[x]; // toggle the light status.
          digitalWrite (leds[x], lightStatus [x]);
        }
      }
    }
    
    Je kunt deze sketch kopiëren en dan een nieuwe sketch openen in de Arduino IDE, en dan de gekopieerde code over alles heen plakken.

    Succes,
    Max.
     
    Bruno van Hoek vindt dit leuk.
  3. Roelof

    Roelof Moderator Moderator team Forum veteraan

    Lid geworden:
    20 aug 2003
    Berichten:
    29.633
    Locatie:
    Sassenheim
  4. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.357
    Locatie:
    Boskoop
    Ik heb het e.e.a. op de "klassieke" manier getest, met de seriele monitor. En bovendien knippert de ingebouwde led op pin 13 / knipperpatroon 11 in het juiste ritme :).
    Als je de simulator van Roelof wilt proberen, de patronen 1 t/m 13 zoals ze in de sketch vermeld zijn zijn aangesloten op pin 2 t/m 15 (ofwel 2 t/m 13 en A0/A1)
     

Deel Deze Pagina