Image

Laboratoire créatif → Éteindre les LED une à une

#Arduino #Scénarios
Date de publication: 04.09.2024

Éteindre les LED une à une


Comme la LED s'allume assez fort, la caméra ne transmet pas bien cet effet. En réalité, tout semble bien.

Croquis Arduino:

const byte  PinLeds [] = { A0, A1, A2, A3, A4, A5 };

int         Nleds = sizeof(PinLeds);
int         idxLed;

const char *CharList [] = { "|", "/", "-", "\\"};
int         Nchar       = sizeof(CharList)/sizeof(char*);
int         idxChar;

void fLeds ()
{
    for (int n = 0; n < Nleds; n++)
        digitalWrite (PinLeds [n], HIGH);

    digitalWrite (PinLeds [idxLed], LOW);

    if (Nleds <= ++idxLed)
        idxLed = 0;
}

void fChars ()
{
    Serial.print   (CharList [idxChar]);
    Serial.print   ('\r');

    if (Nchar <= ++idxChar)
        idxChar = 0;
}

struct Job {
    const unsigned long MsecPeriod;
    void (*func) (void);
    const char         *desc;

    unsigned long msec;
};

Job jobs [] = {
    {  500, fLeds,  "leds"  },
    {  200, fChars, "chars" },
};

const int Njobs = sizeof(jobs)/sizeof(Job);

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

    for (int j = 0; j < Njobs; j++)  {
        if (msec - jobs [j].msec >= jobs [j].MsecPeriod)  {
            jobs [j].msec += jobs [j].MsecPeriod;

            jobs [j].func ();
        }
    }
}

void setup()
{
    Serial.begin(9600);

    for (int n = 0; n < Nleds; n++)
        pinMode (PinLeds [n], OUTPUT);
}

Ce code allume toutes les LED et les éteint tour à tour à une vitesse réglable, et affiche également les caractères qui peuvent être affichés sur le moniteur série.

L'exemple affiche clairement l'état de l'appareil, et les LED de commutation symbolisent qu'il n'est pas gelé.





Aucun commentaire pour l'instant