Image

Yaratıcı laboratuvar → LED'lerin Sıra ile Kapatılması

#Arduino #Senaryolar
Yayın tarihi: 04.09.2024

LED'lerin Sıra ile Kapatılması


LED oldukça parlak olduğu için kamera bu efekti iyi bir şekilde yakalayamıyor. Gerçekte her şey sorunsuz görünüyor.

Arduino Kodu:

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);
}

Bu kod, tüm LED'leri açıp sırayla kapatır ve hızı ayarlanabilir. Ayrıca, Serial monitörde görüntülenebilecek karakterler de gösterilir ve istenirse bir ekrana yansıtılabilir.

Bu örnek cihazın durumunu net bir şekilde gösterir ve LED'lerin sırayla değişmesi, cihazın kilitlenmediğini gösterir.





No Comments Yet