14-Kanal-Lauflicht (und: for-Schleife)



Du wirst ein 14-Kanal-Lauflicht bauen und die for-Schleife kennenlernen.




Ignoriere die Bezeichnungen PC0 bis PB5, wenn sie Dich verwirren!
Das sind die Portbezeichnungen des Atmega328, wie sie beim Fünfkanallauflicht erläutert wurden.



Das Programm könnte so aussehen:

/*
  14-Kanal-Lauflicht
  LEDs an den Ausgängen: Digital_0 bis Digital_13
  LED Strombegrenzung: R1 = 220 Ohm
   
  www.arduinospielwiese.de 
*/


int zeit = 100; //für delay

 
void setup() {               
  pinMode( 0, OUTPUT);
  pinMode( 1, OUTPUT);
  pinMode( 2, OUTPUT);
  pinMode( 3, OUTPUT);
  pinMode( 4, OUTPUT);
  pinMode( 5, OUTPUT);
  pinMode( 6, OUTPUT);
  pinMode( 7, OUTPUT);
  pinMode( 8, OUTPUT);
  pinMode( 9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
 
}


void loop() {
  digitalWrite( 0, HIGH); delay(zeit); digitalWrite( 0, LOW);
  digitalWrite( 1, HIGH); delay(zeit); digitalWrite( 1, LOW);
  digitalWrite( 2, HIGH); delay(zeit); digitalWrite( 2, LOW);
  digitalWrite( 3, HIGH); delay(zeit); digitalWrite( 3, LOW);
  digitalWrite( 4, HIGH); delay(zeit); digitalWrite( 4, LOW);
  digitalWrite( 5, HIGH); delay(zeit); digitalWrite( 5, LOW);
  digitalWrite( 6, HIGH); delay(zeit); digitalWrite( 6, LOW);
  digitalWrite( 7, HIGH); delay(zeit); digitalWrite( 7, LOW);
  digitalWrite( 8, HIGH); delay(zeit); digitalWrite( 8, LOW);
  digitalWrite( 9, HIGH); delay(zeit); digitalWrite( 9, LOW);
  digitalWrite(10, HIGH); delay(zeit); digitalWrite(10, LOW);
  digitalWrite(11, HIGH); delay(zeit); digitalWrite(11, LOW);
  digitalWrite(12, HIGH); delay(zeit); digitalWrite(12, LOW);
  digitalWrite(13, HIGH); delay(zeit); digitalWrite(13, LOW);
  
}

Schon ziemlich viel Text, was? Und irgendwie immer wieder fast dieselbe Anweisung.




Darum sollten wir mal das Thema Schleifen näher ansehen:

Mit Schleifen kann man Programmabschnitte wiederholt durchlaufen.

Es gibt in C verschiedene Befehle, um Schleifen zu erzeugen.
Wir werden die beliebte for-Schleife benutzen.


Bsp. 1: die Zahlen 1 bis 10 mit Hilfe der Laufvariablen i ausgeben

in Pseudocode (zum Verstehen):

for    (i = 1   bis    i = 10     mit Schrittweite 1)   mache: { ausgeben(i) } 


in C sieht das dann so aus:

  for (i=1; i<11;  i=i+1) { ausgeben(i); }


statt:    i = i + 1    kann man auch (faul) schreiben:    i++

  for (i=1; i<11;  i++) { ausgeben(i); }





Unser Lauflichtcode sieht nun sehr viel kürzer aus:

/*
  14-Kanal-Lauflicht
  LEDs an den Ausgängen: Digital_0 bis Digital_13
  LED Strombegrenzung: R1 = 220 Ohm
   
  www.arduinospielwiese.de 
*/

int i; //die Laufvariable
 
void setup() {               
  for(i=0; i<14; i++) { pinMode( i, OUTPUT); }
}


void loop() {
  for(i=0; i<14; i++) { digitalWrite(i, HIGH); delay(100); digitalWrite(i, LOW); }
}