ich habe einen Arduino Micro bei dem alle Digital Pins belegt sind. Da ich aber einen simplen Schalter benötige, versuche ich diesen über analogRead (A0) zu realisieren.
Dazu habe ich den 5V Ausgang des Arduino auf einen Schalter gelegt und das andere Ende an A0 mit einem 10kOhm Pulldown an Masse.
analogRead zeigt mir im Serial Monitor ca. 280 als Wert bei offenem Schalter und ca. 320 bei geschlossenem Schalter, wenn der Arduino über USB betrieben wird.
Wenn ich nun aber den Micro über 12V extern betreibe, dann nähern sich diese Werte immer 300 an, egal was der Schalter macht. Es dauert ca. 3 Sekunden, dann sinkt der Wert bei geschlossenem Schalter von 320 auf 300 und ebenso bei offenem Schalter von 280 auf 300.
Schalter sollte man zwischen Eingang und Gnd legen, und dann am Eingang den internen Pullup oder einen externen (kleineren) nach Vcc verwenden.
Eine Analogmessung ist zwar schön zum Finden von Schaltungsfehlern, aber ein Schalter kann ja nur digital ein/aus sein.
Und sollte es nicht heißen = != ==?
Ich halte jeden Vergleich eines boolschen Wertes für falsch, auch wenn sowas vielfach zu finden ist. Wer sowas macht, hat boolsche Werte und Algebra nicht wirklich verstanden.
Zudem sollte es sich eigentlich auch zu den Schreibern des Styleguides rumgesprochen haben, daß bei Vergleichen in C die Konstanten für == auf der linken Seite stehen sollten, dann meckert nämlich schon der Compiler, wenn man versehentlich = statt == geschrieben hat.
also mit digitalRead kommt auch immer 1 heraus, egal ob Schalter offen oder geschlossen.
Wenn ich analogRead verwende, dann näheren sich die Werte an, sobald der Arduino mit Extrern 12V umgehen muss. Versorge ich nur via USB funktioniert zumindest analogRead so wie es soll.