Wenn es um eine Demo-code-Sammlung geht mache ich mit 
const byte LED1 = 4;
const byte LED2 = 5;
unsigned long LED1_Timer;
unsigned long LED1_OnTime = 3000;
unsigned long LED1_OFFTime = 2000;
unsigned long LED1_WaitTime;
unsigned long LED2_Timer;
unsigned long LED2_OnTime = 1000;
unsigned long LED2_OFFTime = 2500;
unsigned long LED2_WaitTime;
// easy to use helper-function for non-blocking timing
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - startOfPeriod >= TimePeriod ) {
// more time than TimePeriod has elapsed since last time if-condition was true
startOfPeriod = currentMillis; // a new period starts right here so set new starttime
return true;
}
else return false; // actual TimePeriod is NOT yet over
}
void setup(){
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
LED1_WaitTime = LED1_OnTime;
LED2_WaitTime = LED2_OnTime;
}
void loop() {
if ( TimePeriodIsOver(LED1_Timer,LED1_WaitTime) ) { // check if WaitTime is over
// if the amount of milliseconds stored in variable LED1_WaitTime
// have REALLY passed by
if ( digitalRead(LED1) == HIGH) { // if LED1 is switched on
digitalWrite(LED1,LOW);
LED1_WaitTime = LED1_OFFTime;
}
else { // LED1 is switched off
digitalWrite(LED1,HIGH);
LED1_WaitTime = LED1_OnTime;
}
}
if ( TimePeriodIsOver(LED2_Timer,LED2_WaitTime) ) { // check if WaitTime is over
// if the amount of milliseconds stored in variable LED2_WaitTime
// have REALLY passed by
if ( digitalRead(LED2) == HIGH) {
digitalWrite(LED2,LOW);
LED1_WaitTime = LED2_OFFTime;
}
else { // LED2 is switched off
digitalWrite(LED2,HIGH);
LED2_WaitTime = LED2_OnTime;
}
}
}
hier wurden die Codezeilen die das Blinken machen in zwei functions gepackt
const byte LED1 = 4;
const byte LED2 = 5;
unsigned long LED1_Timer;
unsigned long LED1_OnTime = 3000;
unsigned long LED1_OFFTime = 2000;
unsigned long LED1_WaitTime;
unsigned long LED2_Timer;
unsigned long LED2_OnTime = 1000;
unsigned long LED2_OFFTime = 2500;
unsigned long LED2_WaitTime;
// easy to use helper-function for non-blocking timing
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - startOfPeriod >= TimePeriod ) {
// more time than TimePeriod has elapsed since last time if-condition was true
startOfPeriod = currentMillis; // a new period starts right here so set new starttime
return true;
}
else return false; // actual TimePeriod is NOT yet over
}
void Blink_LED1() {
if ( TimePeriodIsOver(LED1_Timer,LED1_WaitTime) ) { // check if WaitTime is over
// if the amount of milliseconds stored in variable LED1_WaitTime
// have REALLY passed by
if ( digitalRead(LED1) == HIGH) { // if LED1 is switched on
digitalWrite(LED1,LOW);
LED1_WaitTime = LED1_OFFTime;
}
else { // LED1 is switched off
digitalWrite(LED1,HIGH);
LED1_WaitTime = LED1_OnTime;
}
}
}
void Blink_LED2() {
if ( TimePeriodIsOver(LED2_Timer,LED2_WaitTime) ) { // check if WaitTime is over
// if the amount of milliseconds stored in variable LED2_WaitTime
// have REALLY passed by
if ( digitalRead(LED2) == HIGH) {
digitalWrite(LED2,LOW);
LED1_WaitTime = LED2_OFFTime;
}
else { // LED2 is switched off
digitalWrite(LED2,HIGH);
LED2_WaitTime = LED2_OnTime;
}
}
}
void setup(){
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
LED1_WaitTime = LED1_OnTime;
LED2_WaitTime = LED2_OnTime;
}
void loop() {
Blink_LED1();
Blink_LED2();
}
und bei dieser Version wird ein Anfänger erst mal nicht viel verstehen.
Alle Variablen die bei beiden LEDs gebraucht werden, wurden durch einen Array mit zwei Elementen ersetzt wurden.
Statt der Zahlen "1" bzw. "2" im Namen wird da die Indexzahl "i" bzw. LEDNr benutzt.
const byte LED_Pin[2] = {4,5};
unsigned long LED_Timer[2];
unsigned long LED_OnTime[2] = {3000,1000};
unsigned long LED_OFFTime[2] = {2000,2500};
unsigned long LED_WaitTime[2];
// easy to use helper-function for non-blocking timing
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - startOfPeriod >= TimePeriod ) {
// more time than TimePeriod has elapsed since last time if-condition was true
startOfPeriod = currentMillis; // a new period starts right here so set new starttime
return true;
}
else return false; // actual TimePeriod is NOT yet over
}
void Blink_LED(byte LEDNr) {
if ( TimePeriodIsOver(LED_Timer[LEDNr],LED_WaitTime[LEDNr]) ) { // check if WaitTime is over
// if the amount of milliseconds stored in variable LED1_WaitTime
// have REALLY passed by
if ( digitalRead(LED_Pin[LEDNr]) == HIGH) { // if LED1 is switched on
digitalWrite(LED_Pin[LEDNr],LOW);
LED_WaitTime[LEDNr] = LED_OFFTime[LEDNr];
}
else { // LED1 is switched off
digitalWrite(LED_Pin[LEDNr],HIGH);
LED_WaitTime[LEDNr] = LED_OnTime[LEDNr];
}
}
}
void setup(){
for (byte i = 0; i < 2; i++) {
pinMode(LED_Pin[i], OUTPUT);
LED_WaitTime[i] = LED_OnTime[i];
}
}
void loop() {
for (byte i = 0; i < 2; i++) {
Blink_LED(i);
}
}
vgs