Arduino Nano bleibt unvorhersehbar hängen

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;
}

Externe Widerstände?

Erzähl mal, was die Taster auslösen.

1 Like

Ich lese im Code ein paarmal "Relais" ... diese sind ganz gerne mal der Grund für unvorhersehbare Aussetzer, wenn man deren Selbstinduktion bei (Ab-)Schaltung nicht mit einer Freilaufdiode beseitigt.
Verhält sich das System ohne die Relais (z.B. mal nur eine LED mit Vorwiderstand an die Relais-Pins anschließen) normal und ohne Hänger?

4 Likes

Der Tipp mit LED's zu probieren war genial. Danke! Tatsächlich waren die Relais das Problem, allerdings nicht, dass die Relais selbst keine Freilaufdiode hatten, sondern dass die Relais Magnetventile gesteuert haben, die wiederum keine Freilaufdiode hatten. Die Gegeninduktion von den Magnetventilen ging über die Relais und hatten dort weitere Induktionen verursacht (vermute ich jetzt mal), so viele dass der Nano immer wieder hängen blieb. Ich konnte an den MV's Freilaufdioden anbringen, das Problem wurde so gelöst.

Das Problem lag an den Relais (habe auf post #3 geantwortet), aber ich werde mich bemühen in Zukunft einen Schaltplan anzufügen. Danke für deine Hilfe.

Das verstehe ich nicht.
Merke, jede Induktivität (Spule) in einer elektronischen Schaltung benötigt eine Freilaufdiode, jede !
Denn jede Spule kann dieses Problem hervorrufen und evtl. deine Elektronik zerstören.

Sehr gern geschehen. Freut mich, daß der Tipp zielführend war :hugs:

DAS bleibt (zumindest bei diesem User) jetzt tief verwurzelt hängen.. :wink:

Es gibt durchaus Alternativen zu einer Freilaufdiode!
Welche sogar unter Umständen sinnvoller sind.

Was auf jeden Fall richtig ist: Man muss was tun.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.