#define LED_CNT 20 #define TIME_STEP 10 // Millisekunden typedef struct { unsigned int pin; unsigned int period; unsigned int duty; unsigned int cnt; } led_t; // Definition der LED-Blinkmuster // Periodendauer und Leuchtdauer in 10ms Schritten led_t leds[LED_CNT] = { // IO-Pin, Periode, Leuchtdauer, Zaehler {1, 20, 10, 1000}, {2, 30, 5, 1000}, {3, 40, 3, 1000}, {4, 99, 50, 1000}, {5, 77, 60, 1000}, {6, 66, 60, 1000}, {7, 88, 5, 1000}, {9, 101, 50, 1000}, {10, 200, 100, 1000}, {11, 300, 10, 1000}, {12, 400, 350, 1000}, {13, 500, 250, 1000}, {14, 1000, 100, 1000}, {15, 999, 100, 1000}, {16, 777, 100, 1000}, {17, 888, 100, 1000}, {18, 444, 100, 1000}, {19, 333, 100, 1000}, {20, 111, 100, 1000} }; void led_multi() { int i; for (i=1; i < LED_CNT; i++) { leds[i].cnt++; if (leds[i].cnt >= leds[i].period) { leds[i].cnt = 0; if (leds[i].duty != 0) { digitalWrite(leds[i].pin, HIGH); } } else { if (leds[i].cnt == leds[i].duty) { digitalWrite(leds[i].pin, LOW); } } } } void setup() { int i; for (i=0; i < LED_CNT; i++) { pinMode(leds[i].pin, OUTPUT); } } void loop() { static unsigned long last, now; // alle TIME_STEP ms die LED-Funktion aufrufen now = millis(); if ( (now - last) >= TIME_STEP) { last += TIME_STEP; led_multi(); } }