Hallo zusammen,
ich würde gerne mit dem Arduino UNO eine Schaltung realisieren mit der ich "virtuell" zwei Türen steuern kann. Zunächst zur Problemstellung, ich habe zwei Türen mit jeweils einer Verriegelungseinheit und 2 LEDs rot/grün, sowie einem Taster mit dem ich die Tür anfordere. Was ich außerdem noch habe ist ein Schalter je Tür welcher den Zustand der Türen aufnimmt, also ob diese zu oder auf ist.
Nun zum Programmablauf in Worten.
Im Grundzustand sind beide Türen verriegelt und geschlossen -> beide roten LEDs sind an.
Jetzt habe ich die Möglichkeit an beiden Türen die Entriegelung durch drücken des Tasters zu "aktivieren".
Wenn ich den Taster 1 drücke -> Tür 1 wird entriegelt, rote LED 1 geht aus grüne LED 1 geht an. Nun kann ich die Tür 1 öffnen, die Tür 2 bleibt verriegelt und die rote LED 2 bleibt an. Außerdem ist das Entriegeln der Tür 2 bei entriegelter Tür 1 gesperrt bis Tür 1 wieder verriegelt ist.
Also soviel zum Thema meiner Steuerung.
Ich habe bereits versucht etwas Code zu schreiben nur leider macht er wie so oft nicht das was er soll ![]()
int rot1 = 12;
int gruen1 = 11;
int rot2 = 10;
int gruen2 = 9;
int tast1 = 2;
int tast2 = 3;
int schloss1 = 8;
int schloss2 = 7;
int tuer1 = 6;
int tuer2 = 5;
volatile int tast1State = LOW;
volatile int tast2State = LOW;
void setup()
{
pinMode(tast1,INPUT);
pinMode(tast2,INPUT);
pinMode(rot1,OUTPUT);
pinMode(gruen1,OUTPUT);
pinMode(rot2,OUTPUT);
pinMode(gruen2,OUTPUT);
pinMode(schloss1, OUTPUT);
pinMode(schloss2, OUTPUT);
pinMode(tuer1, INPUT);
pinMode(tuer2, INPUT);
attachInterrupt(0, schloss1Change, FALLING);
attachInterrupt(1, schloss2Change, FALLING);
}
void loop ()
{
digitalWrite(rot1, HIGH);
digitalWrite(gruen1, LOW);
digitalWrite(rot2, HIGH);
digitalWrite(gruen2, LOW);
}
void schloss1Change()
{
tast1State = !tast1State;
digitalWrite(rot1, LOW);
digitalWrite(gruen1, HIGH);
digitalWrite(rot2, HIGH);
digitalWrite(gruen2, LOW);
digitalWrite (schloss1, tast1State);
if(tuer1 == HIGH)
{
while(tuer1 == HIGH)
{
digitalWrite(rot1, HIGH);
digitalWrite(gruen1, HIGH);
}
}
}
void schloss2Change()
{
tast2State = !tast1State;
digitalWrite (schloss2, tast2State);
}
Ich dachte ich versuche es über Interrupts, also mein Programm macht eigentlich nichts außer meine LEDs ansteuern bis ein Taster betätigt wird. In den Zweiten Interrupt habe ich noch nichts gefüllt, da ich nach dem probieren des ersten Programms erst meinen Fehler finden möchte.
Ich bin über jede konstruktive Hilfe dankbar und falls irgendwelche Informationen fehlen sagt bitte bescheid.
Vielen vielen Dank bereits im Voraus.
Gruß
Häns