Kann mir das jemand erklären?
Arduino-Code und Erläuterungen für den Zähneputz-Timer
[code]
const int ledPins[ ] = {7, 8, 9, 10, 11, 12};
const int buttonPin = 2;
long myTimer = -200000;
void setup( ) {
for (int i = 0; i < 6; i++) {
pinMode(ledPins[ i ], OUTPUT);
}
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
for (int i = 0; i < 6; i++) {
digitalWrite(ledPins[ i ], LOW);
}
}
void loop( ) {
if (digitalRead(buttonPin) == LOW) {
myTimer = millis( );
}
if (millis( ) - myTimer < ( 30000) ) { // 30 Sekunden
digitalWrite(ledPins[ 0 ], ((millis( ) - myTimer) % 1000) > 500);
} else if (millis( ) - myTimer < ( 60000) ) { // 60 Sekunden
digitalWrite(ledPins[ 1 ], ((millis( ) - myTimer) % 1000) > 500);
} else if (millis( ) - myTimer < ( 90000) ) { // 90 Sekunden
digitalWrite(ledPins[ 2 ], ((millis( ) - myTimer) % 1000) > 500);
} else if (millis( ) - myTimer < ( 120000) ) { // 120 Sekunden
digitalWrite(ledPins[ 3 ], ((millis( ) - myTimer) % 1000) > 500);
} else if (millis( ) - myTimer < ( 150000) ) { // 150 Sekunden
digitalWrite(ledPins[ 4 ], ((millis( ) - myTimer) % 1000) > 500);
} else if (millis( ) - myTimer < ( 180000) ) { // 180 Sekunden
digitalWrite(ledPins[ 5 ], ( (millis( ) - myTimer) % 1000) > 500);
} else if (millis( ) - myTimer < ( 190000) ) { // nach 180 Sekunden
for (int i = 0; i < 6; i++) {
digitalWrite(ledPins[ i ], ( (millis( ) - myTimer) % 1000) < 500);
}
} else {
for (int i = 0; i < 6; i++) {
digitalWrite(ledPins[ i ], LOW);
}
}
delay( 10 );
}
[/code]
Ist der Code richtig, also macht er was er machen soll?
ja aber wir sollen jede einzelne zeile erklären können und das hab ich halt vom internet kopiert
2 Antworten
Ich habe das mit TinkerCAD nachgebaut.
https://www.tinkercad.com/embed/k5xpExovac1?editbtn=1
Diese Zeile hier bewirkt in den ersten 30 Sekunden seit der Button gedrückt wurde:
if (millis( ) - myTimer < ( 30000) ) { // 30 Sekunden
digitalWrite(ledPins[ 0 ], ((millis( ) - myTimer) % 1000) > 500);
dass der zweite Eingabewert von DigialWrite immer von 0 bis 999 hochzählt. Ist er bei 999 angekommen, dann wiederholt sich das, also es wird wieder von 0 bis 999 gezählt. Es wird aber nicht jeder Wert angenommen, wegen dem Modulo %.
Hier siehst du ein Ausschnitt, was an digitalWrite übergeben wird.
952 962 973 983 995 5 15 25 37 47
Die LED blinkt also, sie wird immer heller und wenn sie komplett hell ist schaltet sie wieder auf Null und wird dann wieder heller.
Wenn die ersten 30 Sekunden um sind, dann bleibt der Wert bei 999, die LED also hell und die zweite LED beginnt wieder zu blinken.
Zuerst, bitte bei Code die entsprechende Funktion in GF nutzen ("Quelltext"). Das macht es wesentlich leserlicher.
Dann: Was ist denn deinen konkrete Frage?
Den formatierten Code findest du hier:
https://starthardware.org/zaehneputz-timer-mit-arduino-und-sechs-leds/