Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


digitalelektronik:moving-light

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
digitalelektronik:moving-light [2015/02/12 08:25] – angelegt rosdigitalelektronik:moving-light [2020/10/13 14:25] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 9: Zeile 9:
 <code c++> <code c++>
 const int DELAY_MS = 500; const int DELAY_MS = 500;
-const int PIN[] = { 2, 3, 4, 5, 6, 7, 8, 9 }; + 
-const int PIN_COUNT = sizeof(PIN) / sizeof(int);+const int PIN[] = { 2, 3, 4, 5 }; 
 +const int PIN_COUNT = 4; 
 int currentLed; int currentLed;
  
Zeile 26: Zeile 28:
 void loop() { void loop() {
     digitalWrite(PIN[currentLed], LOW);     digitalWrite(PIN[currentLed], LOW);
-    currentLed = (currentLed + 1) % PIN_COUNT;+    currentLed = currentLed + 1
 +    if (PIN_COUNT <= currentLed) { 
 +        currentLed = 0; 
 +    } 
     digitalWrite(PIN[currentLed], HIGH);     digitalWrite(PIN[currentLed], HIGH);
     delay(DELAY_MS);     delay(DELAY_MS);
Zeile 33: Zeile 39:
  
 ==== Hin- und herbewegendes Lauflicht ==== ==== Hin- und herbewegendes Lauflicht ====
 +
 +Bei dieser Variante bewegt sich das Lauflicht hin und her.
  
 <code c++> <code c++>
 const int DELAY_MS = 100; const int DELAY_MS = 100;
 const int PIN[] = { 2, 3, 4, 5, 6, 7, 8, 9 }; const int PIN[] = { 2, 3, 4, 5, 6, 7, 8, 9 };
-const int PIN_COUNT = sizeof(PIN) / sizeof(int);+const int PIN_COUNT = 8; 
 int currentLed; int currentLed;
 int dir; int dir;
Zeile 66: Zeile 75:
 </code> </code>
  
 +==== Harmonische Schwingung ====
  
 +Bei dieser Variante stellt die Bewegung eine harmonische Schwingung dar.
 +
 +<code c++>
 +const int DELAY_MS = 100;
 +const int PIN[] = { 2, 3, 4, 5, 6, 7, 8, 9 };
 +const int PIN_COUNT = 8;
 +
 +int currentLed;
 +int dir;
 +
 +void setup() {
 +    int i = 0;
 +    while (i < PIN_COUNT) {
 +        pinMode(PIN[i], OUTPUT);
 +        i = i + 1;
 +    }
 +
 +    currentLed = 0;
 +    dir = 1;
 +}
 +
 +void loop() {
 +    digitalWrite(PIN[currentLed], LOW);
 +    currentLed = currentLed + dir;
 +    if (currentLed < 0 || PIN_COUNT <= currentLed) {
 +        dir = -dir;
 +        currentLed = currentLed + dir;
 +    }
 +
 +    digitalWrite(PIN[currentLed], HIGH);
 +    double maxAmp = PIN_COUNT / 2.0;
 +    double currAmp = currentLed - maxAmp;
 +    delay(DELAY_MS * abs(sin(currAmp / maxAmp)) + 100);
 +}
 +</code>
digitalelektronik/moving-light.1423725945.txt.gz · Zuletzt geändert: 2020/10/13 14:25 (Externe Bearbeitung)