So ist es wohl.
Auch, damit die fetten Schütze für den 180KW Drehstrommotor, von der Hammermühle, nicht unnütz schnattern. Denn das machen sie nicht lange mit.
Nagut, hier mal eine "Tiefgarage"...
Das hinzufügen/wegnehmen von weiteren Tastern sollte offensichtlich sein
Auch wie man sie dem Treppenhaus oder der Tiefgarage zuordnet.
Die Zähler werden hier nur benutzt um Ereignisse zu produzieren, war grade kein anderer Eventspender zur Hand.
Jeder Taster hat seine eigene Entprellung und Flankenerkennung.
Das Treppenhaus hat eine (einstellbare) Leuchtzeit und geht danach aus, wenn nicht zwischen durch wieder getriggert wird.
Vorbild: Treppenlichtautomat
In der Tiefgarage kann man von jeder Stelle das Licht ein und aus Tasten.
Vorbild: Eltako Stromstoßrelais
#include <CombiePin.h>
#include <CombieTimer.h>
#include <CombieTools.h>
#include <CombieTypeMangling.h>
using namespace Combie::Millis;
using Counter = Combie::Tools::Counter<byte>;
class Task
{
public:
virtual void init() = 0;
virtual void run() = 0;
};
template<byte tasterPin>class TasterAction : public Task
{
private:
Counter &c;
Combie::Pin::InvInputPin<tasterPin> t;
Combie::Timer::EntprellTimer e{20_ms};
Combie::Tools::FlankenErkennung f;
public:
TasterAction(Counter &counter) : c(counter){};
virtual void init() override { t.initPullup(); }
virtual void run() override { c = f = e = t; }
};
Combie::Pin::OutputPin<12> tiefgaragenlicht;
Counter tiefgarage;
//Combie::Timer::FallingEdgeTimer nachleuchten {1_Minute};
Combie::Timer::FallingEdgeTimer nachleuchten {2.5_Sekunden};
Combie::Pin::OutputPin<11> treppenhauslicht;
Counter treppenhaus;
Task *tasks[] {
new TasterAction<2>{treppenhaus},
new TasterAction<3>{tiefgarage},
new TasterAction<4>{treppenhaus},
new TasterAction<5>{tiefgarage},
new TasterAction<6>{tiefgarage},
new TasterAction<7>{treppenhaus},
};
void setup()
{
tiefgaragenlicht.init();
treppenhauslicht.init();
for(Task *t:tasks) t->init();
tiefgarage.onCount ([](Counter&){tiefgaragenlicht.toggle();});
treppenhaus.onCount([](Counter&){nachleuchten=1;});
}
void loop()
{
for(Task *t:tasks) t->run();
treppenhauslicht = nachleuchten = 0;
}
CombieLib.zip (379,2 KB)