/**
* 8 Taster, gegen GND geschaltet
* also invers funktionierend
*
* 8 Relais auf einer der China üblichen Relaiskarte
* ebenfalls invers schaltend
*
* Die Entprellzeit von 20ms ist in CombieTimer als default
* vorgegeben.
*
* Funktion:
* Jeder Tastendruck toggelt den Schaltzustand des zugehörigen Relais.
*/
#include <CombiePin.h>
#include <CombieTimer.h>
#include <CombieTools.h>
class TasterDingen
{
public:
virtual void init() = 0;
virtual void run() = 0;
};
template<byte inPin,byte outPin>
class Taster2Relais: public TasterDingen
{
private:
Combie::Pin::TasterGND<inPin> taster;
Combie::Pin::RelaisINV<outPin> relais;
Combie::Timer::EntprellTimer entpreller;
Combie::Tools::FlankenErkennung flankenerkennung;
byte state; // hier drin werden die Tastendruecke gezaehlt
public:
Taster2Relais():state(0){}
virtual void init()
{
taster.initPullup();
relais.init();
}
virtual void run()
{
if(flankenerkennung = entpreller = taster)
relais = ++state & 1; // Niederwertigstes Bit wird Relaiszustand
}
};
TasterDingen * dinger[] = {
new Taster2Relais<2,10>(),
new Taster2Relais<3,11>(),
new Taster2Relais<4,12>(),
new Taster2Relais<5,13>(),
new Taster2Relais<6,A2>(),
new Taster2Relais<7,A3>(),
new Taster2Relais<8,A4>(),
new Taster2Relais<9,A5>(),
};
void setup()
{
// ForEach TasterDingen, in dinger, tue init()
for(TasterDingen * ding:dinger) ding->init();
}
void loop()
{
// ForEach TasterDingen, in dinger, tue run()
for(TasterDingen * ding:dinger) ding->run();
}
Diesen Code hat mir hier vor längerer Zeit al jemand geschrieben.
Jetzt will ich mal verstehen, was das alles ist.
bei include werden ja die ganzen Libs. eingebunden.
Aber was genau macht jetzt zB. die class "TasterDingen"
Oder was soll eine template sein?
Könnte mir jemand das mal netterweise erklären?