Image

रचनात्मक प्रयोगशाला → एक-एक करके एलईडी बंद करना

प्रकाशन तिथि: 04.09.2024

एक-एक करके एलईडी बंद करना


चूंकि एलईडी काफी तेज रोशनी करती है, इसलिए कैमरा इस प्रभाव को अच्छी तरह से व्यक्त नहीं करता है। हकीकत में सब कुछ अच्छा दिखता है.

अरुडिनो स्केच:

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

यह कोड सभी एलईडी को चालू करता है और समायोज्य गति से प्रत्येक को बारी-बारी से बंद करता है, और सीरियल मॉनिटर में ऐसे अक्षर भी प्रदर्शित करता है जिन्हें प्रदर्शित किया जा सकता है।

उदाहरण डिवाइस की स्थिति को स्पष्ट रूप से प्रदर्शित करता है, और स्विचिंग एलईडी इस बात का प्रतीक है कि यह फ़्रीज़ नहीं हुआ है।





No Comments Yet