Hallo, ich habe ein Arudino Nano (clone), beschreibe es mit "Arduino as ISP" (also kein Bootloader drauf). Mit Taster, jeweils an Pin 3 und 4, muss es bei Tastendruck-erkennung, eine Funktion ausführen. Es funktioniert alles bestens, da kann man wild drauf los klicken. Allerdings manchmal nach 30 Sekunden und manchmal nach 5 Minuten, bleibt es plötzlich hängen. Das skurrile (oder eventuell sogar der Fehler?), es bleibt meist beim Tastendruck auf Pin 3 hängen, respektive die Funktion "ShiftDown" wird ausgeführt, ausser dass Pin 6 auf "HIGH" bleibt. (Pin 7 wird auf HIGH gestellt, obwohl es nach dem Befehl "Pin 6 LOW" steht) Danach geht nichts mehr, ausser "Reset-Taste" oder Stromlos und wieder einstellen.
Ich habe schon mehrere Nano Clones probiert. Ich sehe nicht ob es in einer Schleife hängt (0.0), meiner Meinung nach, sollte es nicht passieren.
Seht ihr eine Schleife, wo es hängen bleiben kann?
const byte inputDOWN = 3;
const byte inputUP = 4;
int readingD = LOW;
int readingU = LOW;
unsigned long lastDebounceTimeD = 0;
unsigned long lastDebounceTimeU = 0;
unsigned long debounceDelay = 50;
int lastinputStateD = LOW;
int lastinputStateU = LOW;
int buttonStateD;
int buttonStateU;
void setup() {
pinMode(2, OUTPUT); //DOWN-Schaltrelais
digitalWrite(2, HIGH); //Relais LOW aktiv
pinMode(7, OUTPUT); //Bremsrelais
digitalWrite(7, HIGH); //Relais LOW aktiv
pinMode(inputDOWN, INPUT);
pinMode(inputUP, INPUT);
pinMode(5, OUTPUT); //Signal an UP auf pin 40
pinMode(6, OUTPUT); //Signal an DOWN auf pin 85
}
void ShiftDown(){
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(120);
digitalWrite(2, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
}
void ShiftUp(){
delay(75);
digitalWrite(5, HIGH);
delay(20);
digitalWrite(5, LOW);
}
void loop() {
readingD = digitalRead(inputDOWN);
if (readingD != lastinputStateD) {
lastDebounceTimeD = millis();
}
if ((millis() - lastDebounceTimeD) > debounceDelay) {
if (readingD != buttonStateD) {
buttonStateD = readingD;
if (buttonStateD == HIGH && buttonStateU == LOW) {
ShiftDown();
}
}
}
lastinputStateD = readingD;
readingU = digitalRead(inputUP);
if (readingU != lastinputStateU) {
lastDebounceTimeU = millis();
}
if ((millis() - lastDebounceTimeU) > debounceDelay) {
if (readingU != buttonStateU) {
buttonStateU = readingU;
if (buttonStateU == HIGH && buttonStateD == LOW) {
ShiftUp();
}
}
}
lastinputStateU = readingU;
}