Schwimmerschalter an Analog Pin, Reads zu hoch.

Hi zusammen,
ich habe so einen Schwimmerschalter, also einen Reed Schalter.

Schwimmerschalter-Niveauschalter

Eine Seite angeschlossen an einem 5v geregelten netzeil welches auch den arduino an dem 5v Pin versogt. Also dieselben Massen.
Die andere Seite direkt auf einen analogen Pin.

Ohne ein Pinsetup sind die analogen ja als Input definiert.
Nun bekomme ich bei einem Analogread wenn der Schwimmer unten ist 1023 also 5v gelesen.(Also Niedriger wiederstand)
Ist der Schwimmer oben allerdings Werte zwischen 300 und 950 !!
Als Output, aber nicht HIGH definiert, bekomme ich Werte wie ich sie brauche.
Von 1023 unten, bis 0 oben.
Macht für mich keinen Sinn, bitte um nen kurzen Wink wie das zustande kommt.

Grüße Daniel

Was wollst du damit bezwecken? Der Niveauschalter wird digital gelesen. Des weiteren fehlt der Pullup oder die Aktivierung der internen Pullups.

Hi,
zum einen hab ich keine digitalen pins mehr frei, also aus der Not heraus ein Versuch.

Anstelle der 0/1 digital zu lesen wollte ich mit einer if analogRead < 500 eine Pumpe stoppen.

Hast du einen Lösungsansatz für mich ? (Btw ich bin nicht sehr fit in e-technik)

Die A0 - A5 können sowohl Analog als auch Digitale Signale einlesen. Das hat nichts mit Analog Read zu tun.

void setup()
{
pinMode(A0, INPUT);
digitalWrite(A0, HIGH);
}

void loop()
{
if(digitalRead(A0) == LOW)
{
// 
}
}

Hab ich mir halber gedacht, also:
The analog pins also have pullup resistors, which work identically to pullup resistors on the digital pins. They are enabled by issuing a command such as

digitalWrite(A0, HIGH); // set pullup on analog pin 0

Den Pinmode auf Input kann ich mir sparen oder ?

Ich Versuchs gleich mal, fettes merci. Karma forU :slight_smile:

Hat leider nicht funktioniert,
per analogread bekam ich mit deinen code nur werte über 1000, egal welche Stellung.

Definiert als Output
pinMode(A4, OUTPUT);
liest er wie er soll 1023 schwimmer unten
und 0-4 mit schwimmer oben.

Ich kapiers nicht. Wird wohl zeit für ein E-Technik Studium bei mir :slight_smile:

Nicht analogread()!!
In #3 steht alles was du brauchst! Anschluss wäre dann an GND und Ax

Egal ob Du den Eingang analog oder digital ausliest mußt Du mit einem Widerstand eine Polarisierung geben damit dieser ein definiertes Potential hat.
Also Du brauchst einen Pullup oder Pulldownwiderstand.

http://de.wikipedia.org/wiki/Open_circuit#Beschaltung_der_Signalleitungen wobei zu sagen ist daß die Widerstände auch 100kOhm groß sein konnen.

Grüße Uwe

Hallo Dan88,

ich würde dir empfehlen, dich zuerst einmal mit den Basics bekannt zu machen. Hier fehlen dir noch viele Grundlagen, die dich auf Dauer in Teufels Küche bringen :grin:

http://playground.arduino.cc/Deutsch/Eingang

Und ja, es macht Sinn. Für den Anschluss von Tastern, schaltern etc brauchst du am Arduino 3 Leitungen. 5V, GND und die Signalleitung.

Denn wenn am Eingang kein defenierter Pegel anliegt, flattert der Eingang willkürlich.

Als Beispiel:
Du schließt einen Taster mit nur 2 Kabel an (5V und Signal), dann bekommst du einen defenierten Pegel, wenn der Taster gedrückt wird. Wenn du diesen aber nun loslässt ist der Pegel nicht 0V/GND!

Mit digitalWrite(A0, HIGH) erreichst du, dass der 5V Anschluss nicht herausgeführt werden muss. Das läuft alles im Atmega ab, der die entsprechenden Pullups aktiviert. Ein Teil der sonst externen Schaltung findet somti bereits im Arduino selber statt.

Danke Uwe, sschultewolter. Ihr seid echt fix im Antworten.
Mein Hirn ist leider zu voll mit wichtigerem und die Zeit zu knapp.
Trotzdem: Scham über meinem Haupt. Mir fehlen wirklich die Basics merk ich grad.

D.H. ich bräuchte nen internen Pulldown, Den gibts aber nicht auf dem Atmel.

Bleibt mir nur der interne Pullup, Die Analogen Pins auf OUTPUT und HIGH zu setzten,
Schwimmer an Ground und AnalogemPin, und das Signal sozusagen invertiert auszulesen.
Versteh ich das richtig ?

Dan88:
Schwimmer an Ground und Pin und das Signal sozusagen invertiert auszulesen.
Versteh ich das richtig ?

Ja, das ist eigentlich die normale Schaltung wenn man Elektronik richtig lernt. Hat zum Teil historische Gründe aus der TTL Zeit, aber Pullups sind normal.

Taster mit Pulldowns sind eher eine Anfänger Schaltung, weil man eben HIGH = gedrückt hat und das dann vielleicht etwas leichter zu verstehen ist.

Pulldown wäre unnötig. Wie du bereits selber geschrieben hast. Den Wert liest du invertiert mit digitalRead ein. Wie bei mir oben auch im Code-Snippet angemerkt.

void setup()
{
pinMode(A0, INPUT);
digitalWrite(A0, HIGH);
}

void loop()
{
if(digitalRead(A0) == LOW)
{
// 
}
}