fad5.ino


/* Beispiel 5
    zwei Led mit Taster auf/ ab faden
    mit Verwendung einer Classe und dem Aufruf einer
    Methode daraus.

*/

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 fadstep = 10;
byte delaytime = 50;
bool statrot, statgruen;   // Status der Eingänge

class Fade {    // classe fade
  private:
    uint32_t _altzeit;
    byte _hell;

  public:
    byte fade(bool ein) {   // die Methode
      if (ein) {
        if (millis() - _altzeit >= delaytime) {
          _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;
          }
        }
      }
      return _hell;
    }
};// Achtung Das Semikolon ist hier wichtig 

Fade LEDrot, LEDgruen;// zwei Objekte erzeugen  

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);     //Eingang einlesen
  byte wert = LEDrot.fade(statrot);   // objekt mit methode aufrufen
  analogWrite(LedRot, wert);         // Ergebniss ausgeben

  //statgruen = !digitalRead(btnGruen);
  //wert = LEDgruen.fade(statgruen);
  //analogWrite(LedGruen, wert);
  
  // oder alles zusammen in einer Zeile
  analogWrite(LedGruen,LEDgruen.fade(!digitalRead(btnGruen)));
}