Hallo meine Damen und Herren, :) ich hoffe Ihr könnt mir weiterhelfen. Sitze schon seit mehreren Stunden dran und komme nicht weiter. Undzwar bin ich gerade dabei von Fischertechnik das Hochregal mit einem Arduino zu steuern. Ich habe leider ein großes Problem mit den Tastern(meiner Meinung nach). Wenn diese betätigt werden sollen sie durch Interruptfunktionen bestimme Aufgaben bewältigen. Dazu gehört eigentlich nur das diese die jeweiligen Motoren abschalten sollen und dann ein Stück vorfahren, damit der Taster dann nichtmehr betätigt ist. Jedoch beim Starten des Programms und auch wenn ich die Motoren einschalte springt es manchmal automatisch(ohne das die Taster betätigt werden) in die Interruptfunktion. Ich habe die Taster über ein Active-Low mit dem internen Pullup-widerstand geschalten. Außerdem habe ich Softwaretechnisch entprellt und auch Doppelprüfungen eingebaut. Trotz dieser Maßnahmen springt das Programm in die Interruptfunktion und stoppt den Motor ohne das dieser z.B zurück gefahren ist(taster wurde auch nicht betätigt). Kommt das Problem überhaupt von meinen Tastern? Mir gehen echt die Ideen aus. Ich hoffe Ihr könnt mir helfen
:
Verschoben durch Moderator
1 | pinMode(input_links,INPUT); |
2 | pinMode(input_rechts,INPUT_PULLUP); |
3 | pinMode(input_hoch,INPUT_PULLUP); |
4 | pinMode(input_runter,INPUT); |
Warum schaltest Du den Pullup nur für "rechts" und "hoch", aber nicht für "links" und "runter" ein? Ohne Pullup floaten solche Inputs, d.h. Du hast sie nicht auf definiertem Pegel. Eine Korrektur könnte schon das Problem lösen. Allerdings sollte man generell nicht Taster über Interrupts behandeln. Wenn sie prellen, löst der Interrupt mehrfach aus, was u.U. schwierig zu behandeln ist. Besser ist es, die Taster zu pollen, siehe auch Entprellung. P.S. Ich habe den Thread von "Projekte & Code" nach "µC & Elektronik" geschoben. Threads unter "Projekte & Code" dienen der Vorstellung von fertigen/lauffähigen Projekten und sind nicht für Fragen gedacht.
:
Bearbeitet durch Moderator
Drei Fehler: 1) Die internen Pull-Up Widerstände sind zu hochohmig. Verwende externe mit weniger als 10k Ohm. Kann ruhig 1k Ohm sein. 2) Störimpulse können immer vorkommen, jede Leitung zugleich eine Antenne ist. Das trifft ganz besonders auf Leitungen zu, die in der Nähe von Motoren liegen. Die Software sollte das Signal von den Tastern entprellen, dabei kann sie es auch gleich entstören (sehr kurze Impulse ignorieren). Alternativ: Mit R/C Filtern entstören. 3) Der Ablauf einer Steuerung sollte nicht in Interrupt-Handlern stecken. Das ist Aufgabe des Hauptprogrammes, typischerweise in Form eines oder mehrerer quasi-parallel laufender Zustandsautomaten. Interrupthandler sollten höchsten Ereignisse (Tastendruck) erfassen und in eine Variable oder Warteschlange ablegen. Die Reaktion darauf gehört nicht in den Interrupthandler.
Welche PINs können bei deinem Board als Interruptquelle verwendet werden? https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
1 | Board Digital Pins Usable For Interrupts |
2 | |
3 | Uno, Nano, Mini, other 328-based |
4 | |
5 | |
6 | 2, 3 |
7 | |
8 | Uno WiFi Rev.2 |
9 | |
10 | |
11 | all digital pins |
12 | |
13 | Mega, Mega2560, MegaADK |
14 | |
15 | |
16 | 2, 3, 18, 19, 20, 21 |
17 | |
18 | Micro, Leonardo, other 32u4-based |
19 | |
20 | |
21 | 0, 1, 2, 3, 7 |
22 | |
23 | Zero |
24 | |
25 | |
26 | all digital pins, except 4 |
27 | |
28 | MKR Family boards |
29 | |
30 | |
31 | 0, 1, 4, 5, 6, 7, 8, 9, A1, A2 |
32 | |
33 | Due |
34 | |
35 | |
36 | all digital pins |
37 | |
38 | 101 |
39 | |
40 | |
41 | all digital pins (Only pins 2, 5, 7, 8, 10, 11, 12, 13 work with CHANGE) |
da hat die Forensoft ja was tolles aus der Tabelle gemacht... Nun, siehe Link. Was für einen Arduino verwendest Du?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.