// GameLib.h
#ifndef GameLib_h
#define GameLib_h
#endif

enum rgb_t : byte {Off=0,Bl=0b001,Gn=0b010,Tk=0b011,Rt=0b100,Li=0b101,Ge=0b110,Ws=0b111}; // Welches RGB-Muster
enum command_t: byte {RFID_reset=3,RFID_oben,RFID_unten,C_Hallo};
enum rfid_t : byte {Rfid_nix,Rfid_karte_o,Rfid_karte_u,A_Ok};

class RGBStrip{
  public:
    RGBStrip(byte r_pin,byte g_pin,byte b_pin); // Initialisierung
    void setRGB(rgb_t l,unsigned int d); // Verhalten einstellen
    void service(); // periodisch aufgerufen
  private:
    byte red_pin;
    byte green_pin;
    byte blue_pin;
    unsigned long myTime; // Startzeitpunkt
    unsigned int myDelay; // Zeitverzoegerung
    byte leds; // welche LED blinken sollen
    byte zyklus; // fuer Blinken
    void setLed(); // Led an
    void clearLed(); // alle Led aus
};

class Blinker{
  public:
    Blinker(byte b_pin,byte r); // Initialisierung Pinnummer, Ruhezustand
    void setBlinker(unsigned int d); // Blinkzeit in ms 0 = Blinker aus
    void service(); // periodisch aufgerufen
  private:
    byte blink_pin;
    byte ruhe;
    unsigned char zyklus;  // Zykluszustand
    unsigned long myTime; // Startzeitpunkt
    unsigned int myDelay; // Zeitverzoegerung
};

class Zeit{ // Ruft die Potistellung an AD-Pin ab und skaliert die Zeit zwischen min und max
  public:
    Zeit(byte pin, unsigned int minZ, unsigned int maxZ); // Zeit in Sekunden
    void start();        // Zeit starten
    void start(unsigned int n);  // n-fache Zeit 
    byte vorbei();       // 1 falls Zeit um ist
    void info();         // gibt Attribute auf Serial aus
  private:
    byte adPin;
    unsigned int minZeit;
    unsigned int maxZeit;
    unsigned long zeitmarke;
};

class Taster{
  public:
    Taster(byte pin,byte aktiv); // lowaktiv=0
    byte aktiv(byte dauer);      // dauer bis aktiv in 10tel Sekunden
  private:
    byte tPin;
    unsigned long zeitmarke;
    byte tAktiv;                 // lowaktiv=0
    byte merker;                 // für Flankendetektion
};
