/* Beispiel 4
zwei Led mit Taster auf/ ab faden
verwendet millis() und eine Funktion
*/
const byte LedRot = 5; // Pin für LED
const byte LedGruen = 6;
const byte btnRot = 7; // taster schalten gegen OV
const byte btnGruen = 8;
byte hellRot, hellGruen;
byte fadstep = 10;
byte delaytime = 50;
uint32_t altzeitRot, altzeitGruen; // zeitspeicher letzte aktion
bool statrot, statgruen; // Status der Eingänge
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(btnRot, INPUT_PULLUP);
pinMode(btnGruen, INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
statrot = !digitalRead(btnRot); // taste einlesen
fadeLed(statrot, altzeitRot, hellRot);// verarbeiten
analogWrite(LedRot, hellRot); // ergebniss ausgeben
statgruen = !digitalRead(btnGruen);
fadeLed(statgruen, altzeitGruen, hellGruen);
analogWrite(LedGruen, hellGruen);
}
void fadeLed(bool ein, uint32_t &altzeit, byte &hell) {
if (ein) {
if (millis() - altzeit >= delaytime) { // abfrage Zeit um
altzeit = millis(); // aktuelle zeit merken
if (hell + fadstep <= 255 ) { // max noch nicht erreicht
hell = hell + fadstep; // erhöhen
}
}
}
else {
if (millis() - altzeit >= delaytime) {
altzeit = millis();
if (hell - fadstep >= 0 ) { // min noch nicht erreicht
hell = hell - fadstep;
}
}
}
}