michael_x:
Die Endschalter sind OK, die Taster aber nicht?
Und für alle nimmst du jeweils verdrillte Adern-Pärchen?
Die Taster sind auch ok. Daran liegt es nicht. Ich habe keine Ahnung, woran es liegt, aber offenbar konnte eine Änderung im Sketch das Problem beheben. Jedenfalls tritt es seither nicht mehr auf.
Und ich verwende die Leiter einzeln. Brauche genau 8 Leiter für meine Anwendung und da ist das Patchkabel ideal. Zumindest theoretisch.
Wenn du sagst, mit 10k PullUp ist es besser als mit 1k, liegt vermutlich das Problem ganz woanders.
Ja, das liegt bestimmt ganz wo anders. Es hat sich dann gezeigt, dass es mit den 10k Pullup auch nicht besser war. Irgendwann kam der Fehler dann auch in kürzeren Abständen.
Mit dem USB Kabel machst du den Arduino stromlos, bzw. erzeugst einen Reset beim Einstecken ?
Ja.
Ich habe im Sketch 2 Funktionen, die ich in der setup Funktion aufrufe. Da werden die Pins initialisiert.
Mir ist dann aufgefallen, dass die Relaispins nicht explizit auf LOW gesetzt werden. Ist vermutlich auch nicht notwendig.
Hier sind die zwei Funktionen, die nacheinander in der setup Funktion aufgerufen werden
void InitInputPins () {
// setting pin modes and attaching buttons
pinMode(BtnUpPin, INPUT_PULLUP);
BtnUp.attach(BtnUpPin);
BtnUp.interval(5);
BtnUp.update();
pinMode(BtnDnPin, INPUT_PULLUP);
BtnDn.attach(BtnDnPin);
BtnDn.interval(5);
BtnDn.update();
pinMode(SwTopPin, INPUT_PULLUP);
SwTop.attach(SwTopPin);
SwTop.interval(20);
pinMode(SwBotPin, INPUT_PULLUP);
SwBot.attach(SwBotPin);
SwBot.interval(20);
// get endswitch states
SwTop.update ();
SwBot.update ();
SwTopState = digitalRead (SwTopPin);
SwBotState = digitalRead (SwBotPin);
}
void InitOutputPins () {
pinMode(LedUpPin, OUTPUT);
pinMode(LedCenterPin, OUTPUT);
pinMode(LedDnPin, OUTPUT);
pinMode(LedOnPin, OUTPUT);
pinMode(RelUpPin, OUTPUT);
pinMode(RelDnPin, OUTPUT);
// set red LEDs to low and green LED to high, to show the initialisation is done
digitalWrite(LedCenterPin, LOW);
digitalWrite(LedOnPin, HIGH);
// set the LEDs according to the state of the endswitches
digitalWrite (LedUpPin, SwTopState);
digitalWrite (LedDnPin, SwBotState);
}
Ich habe nun in der setup Funktion am Ende noch folgende Zeilen eingefügt:
digitalWrite(RelDnPin, LOW);
digitalWrite(RelUpPin, LOW);
BtnUp.update();
BtnDn.update();
Seither ist der Fehler kein einziges Mal aufgetreten.
Ich wollte dann wissen, ob das LOW setzen der Relaispins alleine auch reicht und habe die update Methoden der Buttons raus genommen. Dann ist der Fehler wieder aufgetreten.
Habe jetzt noch nicht getestet, was passiert, wenn ich nur die Button.update Zeilen drinnen lasse.
Nachdem es jetzt zu passen scheint, lasse ich es mal so.