Hallöchen zusammen,
ich habe mich in den letzten Tagen in die Gefilde der µC-Programmierung begeben und wollte daraufhin ein Code-Schloss bauen. Zur Funktion: Es wird 5 Taster geben, die in der richtigen Reihenfolge betätigt werden müssen. Zu jedem richtig gedrückten Taster soll eine passende LED aufleuchten. Sind alle Tasten gedrückt, wird ein Servo angesteuert, der eine Verriegelung löst.
Soweit zur Theorie. Da mein Arduino leider Lieferschwierigkeiten hat, habe ich die Schaltung erstmal online aufgebaut. Der bisherige Stand (Nur 4 Taster/LEDs, ohne Servo) ist hier zu finden.
Der dazugehörige Code sieht folgendermaßen aus:
Code:
int LED=13, festgedrueckt=150, t=500;;int LED2 = 2;
int LED3 = 7;
int LED4 = 4;
int t0p = 0; //Überprüfung ob bereits gedrückt.
int t1p = 0;
int t2p = 0;
int t3p = 0;
void setup() {
pinMode(LED, OUTPUT); // LED Ausgang
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(A0,INPUT); // Taste 0
digitalWrite(A0,HIGH); // interner pullup Widerstand
pinMode(A1,INPUT); // Taste 1
digitalWrite(A1,HIGH);
pinMode(A2,INPUT); // Taste 2
digitalWrite(A2,HIGH);
pinMode(A3, INPUT); //Taste 3
digitalWrite(A3, HIGH);
}
void loop() {
if (readButton(0) || t0p == 1)
{
t0p = 1;
digitalWrite(LED, HIGH);
if (readButton(1) || t1p == 1)
{
t1p = 1;
digitalWrite(LED2, HIGH);
if (readButton(2) || t2p == 1)
{
t2p = 1;
digitalWrite(LED3, HIGH);
if (readButton(3) || t3p == 1)
{
t3p = 1;
digitalWrite(LED4, HIGH);
}
else if (readButton(2))
{
t2p = 0;
t1p = 0;
t0p = 0;
digitalWrite(LED3, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED, LOW);
}
else if (readButton(1))
{
t2p = 0;
t1p = 0;
t0p = 0;
digitalWrite(LED3, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED, LOW);
}
else if (readButton(0))
{
t2p = 0;
t1p = 0;
t0p = 0;
digitalWrite(LED3, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED, LOW);
}
}
else if (readButton(0))
{
t1p = 0;
t0p = 0;
digitalWrite(LED, LOW);
digitalWrite(LED2, LOW);
}
else if (readButton(1))
{
t1p = 0;
t0p = 0;
digitalWrite(LED, LOW);
digitalWrite(LED2, LOW);
}
}
else if (readButton(0))
{
t0p = 0;
digitalWrite(LED, LOW);
}
else if (readButton(2))
{
t0p = 0;
digitalWrite(LED, LOW);
}
}
}
int readButton(int pin) { // Taste einlesen
if(analogRead(pin) < 500) { // Analog Eingang abfragen
delay(festgedrueckt);
if(analogRead(pin) < 500)
return 1; // war gedrückt
}
return 0; // war nicht gedrückt
}
Den Code habe ich teilweise übernommen, allerdings angepasst. Möglicherweise ist er nicht das gelbe vom Ei, sollte aber funktionieren.
Nun kommt das Problem: Der erste Taster (von rechts nach links) kann ohne Probleme betätigt werden und die LED leuchtet auf. Beim zweiten funktioniert es meistens auch noch. Beim dritten Taster steigt das Programm in 90% der Fälle aus und verdunkelt alle LEDs, sprich der bisherige (richtige) Code wird gelöscht.
Kennt sich hier jemand vielleicht mit µCs aus und sieht meinen Fehler? Ich selber vermute, es liegt an der Entprellung der Taster, allerdings kann ich die Parameter anpassen, wie ich möchte, das Ergebnis bliebt dasselbe.
Liebe Grüße
Dada