fad4.ino



/* 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;
      }
    }
  }

}