Servus!
Ich möchte für mein Projekt ein 3-Wege Schiebeschalter nutzen. Das hat erstmal nicht funktioniert, also habe ich das ganze aufgedröselt und nach Tutorial gemacht. Leider tut es bis jetzt nicht wirklich. (Arduino Mega)
-
Ich habe das ganze angeschlossen wie in einigen Tutorials, mit einem 10k Ohm Widerstand.
-
Ich habe einfach nur 2 Pins des Schalters angeschlossen, es ist also einfach nur ein an/aus Schalter
-
Ich habe folgendes Minimalskript:
void setup()
{
pinMode(22, INPUT);
Serial.begin(9600);
}
void loop()
{
Serial.println(digitalRead(22));
}
Das Ergebnis sind wechselnde 0er und 1er im Monitor bei "aus". Wenn ich den Schiebeschalter auf die Position stelle die "an" bedeutet, kommen nur 1er.
Liegt das am Schiebeschalter? Muss ich da irgendetwas anpassen? Anderer Widerstand?
Ich würde es morgen mal mit so nem kleinen Printtaster testen. Oder liegt es an meinem Testsketch? mache ich da irgendetwas falsch?
Noch ne Frage:
Anstatt dem 5V Ausgang (den ich leider an der Stelle wo der Schalter hinsoll nicht habe), ist es da möglich einen Output Pin zu nutzen?
Also z.B. Pin 21 auf Output, immer High und dann Pin 22 als Input abfragen? 5V sind ja eigentlich 5V... Ich habe ein 4 adriges Flachbandkabel an Pins angeschlossen und somit eh einen Pin übrig.
Viele Grüße
Michael
Bitte später Deinen Code mit codetags versehen. Das liest sich besser - ich habs hier mal nachgeholt
mrhiggins:
void setup()
{
pinMode(22, INPUT);
Serial.begin(9600);
}
edit: jetzt sehe ich auch Dein Bild. das liegt auf einem externem Server und wird später nicht mehr zu sehen sein...
Füge es bitte hier ein (modify Message / dann attachment - Datei aussuchen- hochladen.
Mach mal bitte ein Foto vom Aufbau.
Ich glaube, das die GND / Widerstand Kombination bei Dir falsch verdrahtet ist.
Besser wäre IMHO den internen Pull_up zu benutzen und nach GND zu schalten.
my_xy_projekt:
Besser wäre IMHO den internen Pull_up zu benutzen und nach GND zu schalten.
Das solltest Du auf jeden Fall machen. Dann hast Du auch das Problem mit den fehlenden 5V nicht mehr. Also einfach den Taster ( ohne zusätzlichen Widerstand ) zwischen dein Input-Pin und Gnd schalten. Und dann den Eingang mit
pinMode(22, INPUT_PULLUP);
initiieren. Bei gedrücktem Taster erkennt das Programm dann LOW.
my_xy_projekt:
Mach mal bitte ein Foto vom Aufbau.
Ich glaube, das die GND / Widerstand Kombination bei Dir falsch verdrahtet ist.
Ja, sehe ich auch so. Der Eingang hängt nicht am Widerstand gegen GND sondern er hängt frei in der Luft. Nur dann kann er ohne dass man etwas ändert, mal High und mal Low sein.
Franz
Es wird immer seltsamer.
Habe die Schaltung jetzt nochmal auf einem Steckbrett aufgebaut. Zwischen den beiden offenen Litzen an den roten Pfeilen schaltet der Schalter mal durch und sperrt mal. (Überprüft mit Multimeter)
Jetzt bekomme ich für dieses Minimalskript:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(4, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int buttonState = digitalRead(4);
// Show the state of pushbutton on serial monitor
Serial.println(buttonState);
}
nur noch 0er in der Ausgabe. Ebenso wenn ich INPUT_PULLUP verwende und dafür direkt den Pin 4 mit Gnd über den Schalter verbinde.
Dann zeig doch mal ein Foto vom Aufbau.
Wurde doch auch schon geschrieben.
HUUUPS I forgot about that.
As I said, the switch switches the two positions with a red arrow.
Schwer zu erkennen.
Baue das mal mit kürzeren Kabeln auf.
Das schwarze Kabel vom Schalter steckt in +. Ich dachte, Du willst mit INPUT_PULLUP gegen GND schalten.
Gruß Tommy
Bei dem Pfusch mit den wackeligen "Verbindungen" gibt es mindestens drei Möglichkeiten warum der Schalterpin den GND über die 10K Ohm nicht bekommt. Und wenn da eine Stelle keinen Kontakt hat, dann passiert genau das, was du hier schreibst. Diese Bredboards sind so schon ein ziehmlicher Scheiß, aber wenn man das dann noch so pedantisch aufbaut, dann ist es ein glücklicher Zufall wenn es funktioniert. Das ist bei dem Aufbau wie ein Sechser im Lotto, und der ist nun mal sehr selten!!
Nach diesem Tutorial:
https://create.arduino.cc/projecthub/muhammad-aqib/arduino-button-tutorial-using-arduino-digitalread-function-08adb5
benötige ich, sofern ich den Widerstand wie etwa in der Mitte des Dokumentes zu sehen ist, kein INPUT_PULLUP.
Meine Erkenntnis:
Wenn ich anstatt dem Schiebeschalter die Kabel direkt verbinde geht es. Wenn ich den Schalter benutze, dann scheint er "hängen" zu bleiben. Ab und an kommt sogar mal ein anderes Signal als davor da war - aber rein zufällig 5 sekunden nach dem Schalten.
Ich habe die entsprechenden Kabel vom Schalter mit dem Multimeter prüfe, habe ich einmal ein Piepen, einmal nicht. Es sind also die richtigen Pins am Schalter.
Ist es dann der falsche Widerstand?
Ich würde einen kleineren Widerstand nehmen. Aber 10 k Ohm geht. Ich würde was um die 3 K Ohm verwenden. Aber der Schalter ist ja nicht das problem, du schreibst ja, wenn du den zu machst geht es ja. Dann bleibt es auf HIGH. Das Problem ist dass der GND über die 10 k Ohm NICHT am Pin ankommt.
Ich habe die Schaltung mit 10k Ohm und dem Schalter.
Ich krieg dann praktisch immer ne 0, nach ewigkeiten kam durch reinen Zufall eine 1. Die blieb dann aber auch.
Wenn ich die beiden Kabel vom Schalter abziehe und dafür ein Kabel als Brücke einstecke, kriege ich eine 1, wenn ich es abziehe kriege ich eine 0.
Das Flachbandkabel am Schalter ist angelötet.
Hi
Völlig egal, wie matschig der Schalter ist, entweder hast Du bei unbetätigtem Schalter das 'gezogene' Potential am Pin oder bei betätigtem Schalter das Gegenteilige.
Laut dem Fritzing-Plan ziehst Du den Pin runter - hast also einen Pull-Down (wörtlich ziehe-runter) und der Schalter schaltet PLUS zum Pin durch.
Wenn Du auf der Verbindung zwischen BreadBoard und Arduino ein schlechtes Kabel hast, hängt der Arduino-Pin in der Luft (hat ja keine Verbindung mit dem Pull-Widerstand).
Das verhindert man, indem man den Internen benutzt - Der kann im Arduino aber nur 'nach oben ziehen' - ist also ein Pull-UP.
Somit muß der Schalter nach GND schalten.
Jetzt hättest Du den Pin sicher auf PLUS gezogen (durch den Pull-UP im Arduino), egal wie schrottig der Schalter oder die Kabel dahin auch sind.
Erst, wenn die Verbindung GND-Schalter-Kabel->Pin gut ist, bekommst Du ein LOW (also Schalter betätigt).
Ich sehe Dein Problem in einem defektem Kabel zwischen dem Schalter und Arduino.
Nutze die internen PullUPs (und daraus resultierend die umgedrehte Logik LOW ist Taster betätigt) und Deine Probleme werden sich schlagartig halbieren.
MfG
Vielen Dank, ich habs jetzt mal so wie du beschrieben hast.
Ähnliches Problem:
Wenn ich GND und Pin4 mit einem Kabel verbinde und abziehe schaltet es.
Wenn ich den Schalter verwende mit dem 30cm Flachbandkabel geht es nicht mehr, bzw. der 0er oder 1er "bleibt hängen", schaltet nur noch ganz sporadisch.
Dummerweise habe ich von dem Flachbandkabel in meine Projekt schon 40cm verbaut für diesen Schalter.
ich schließe jetzt den Schalter mal mit "normalen" Kabeln an einer kleinen Lochrasterplatine an, prüfe es damit extern und danach sehe ich ob es im Projekt mit dem verbauten Flachbandkabel tut oder ich normale Kabel verlege.
Hi
Lässt sich das Kabel ggf. nur sehr schlecht löten?
Ggf. hast Du stahlhaltige Dupon-Strippen 'erwischt' - Die haben Kupfer nur ganz kurz und wohl nur durch eine Scheibe sehen dürfen
Dann ist das Löt-Ergebnis eher eine Art Lot um den Draht lleben - Das muß mit elektrischer Verbindung nicht Viel gemeinsam haben.
Wenn's ein sich sehr schlecht lötender Draht ist, könnte VIEL Flussmittel (z.B. Kolofonium/Geigenharz, aufgelöst in Isopropanol) helfen.
Das Harz klebt dann allerdings wie die Hölle an Fingern und mit Vorliebe fängt das Zeug Fusseln ein
MfG
'Geigenharz' sollte das Gleiche sein, wie die Kolofonium-Blöcke vom fC - nur deutlich teurer.
Das Zeug ist sehr spröde, also schon Sauerei, bevor man das Harz (trockener Klumpen, wurde in das Kartönchen reingegossen) heraus gepult hat.
Löst sich binnen weniger Stunden auf, kann dann zum Eintunken oder zum Verteilen mit Q-Tips benutzt werden.
Schraubverschlüsse verkleben in der Zeit - meine Flussmittel-Flasche wird jetzt wohl das 2.te Jahr auf dem Buckel haben und ist mittlerweile 'ranzig wie bolle' - allerdings auch schon 1x umgeworfen worden ... natürlich offen.
postmaster-ino:
allerdings auch schon 1x umgeworfen worden ... natürlich offen.
Sonst macht es ja keinen Spaß. Das Zeug hat auch die unangenehme Eigenschaft, den Schraubverschluss der Flasche festzukleben. Man kann auch Brennspiritus anstelle von Isopropanol nehmen.
Gruß Tommy
So, es passt jetzt! Keine Ahnung welche Probleme da nach und nach auftraten, aber eins der Steckkabel war u.a. defekt, gestern habe ich nicht verstanden dass bei INPUT_PULLUP auf low abgefragt werden muss und dadurch kamen meine if Blöcke durcheinander. Beim zweiten externen Arduino geht wohl ein GND Pin nicht.
Es ist jetzt eingebaut und läuft. Ich hab das ganze mit Klemmen auf einer Lochrasterplatine angeschlossen, so lässt sich später einfacher reparieren.
Vielen Dank!