problem - input schaltet output (anfänger)

Hallo,

ich hoffe mir kann jemand weiterhelfen, mein Problem ist sehr merkwürdig und ich bin eigentlich kein Neuling was das Programmieren angeht, jedoch verstehe ich den Sinn hier gerade nicht. Ich habe ein kleines Programm gemacht welches mir ein paar Relais schaltet, und hatte ein merkwürdiges Verhalten festgestellt. Dann bin ich einmal zurück auf ein ganz simples "Input schaltet Output" und habe festgestellt dass ich einen Delay drin habe. Ich schalte mit einem Eingang einen Ausgang und auch gleichzeitig zur Optischen Überwachung die LED. Nun das Einschalten klappt, LED geht an, Relais zieht an. Nehm ich den Eingang weg dauert es ein paar Sekunden bis die LED erlischt und mein Relais abfällt. Wieso ist das so? Habe ich hier etwas falsch gemacht? Hier einmal das "Programm":

const int led = 13;
const int eingang8 = 8;
int eingangState;
const int relais = 10;

void setup() {                

  pinMode(led, OUTPUT);
  pinMode(eingang8, INPUT);
  pinMode(relais, OUTPUT);
}


void loop() {
  eingangState = digitalRead(eingang8);
  digitalWrite(led, eingangState);   
  digitalWrite(relais, eingangState);
}

Also was passiert wenn ich den Eingang 8 belege. LED geht an und Relais zieht an. Wenn ich Eingang 8 wieder weg nehme bleibt LED und Relais für ein paar Sekunden weiterhin aktiv bis alles abfällt.

Ich hoffe mir kann jemand dieses komische Verhalten erklären :)

Vielen Dank

Gruß Thomas

EDIT: Es handelt sich um einen Arduino Uno Rev 3 falls das noch wichtig ist.

Hallo,

das Verhalten würde sich erklären, wenn Du den Eingang mit HIGH schaltest und am Eingang keinen Pulldown-Widerstand hast. Dann wird der Eingang nicht auf GND gezogen, wenn Du HIGH wegnimmst.

Vielleicht hilft das.

Gruß, Ralf

Verwendest du einen externen Pullup oder Pulldown? Du darfst den Eingang nicht offen lassen, d.h. er muss über einen Widerstand auf einem definierten Pegel liegen.

Du kannst auch die internen Pullups verwenden:

Oh vielen vielen Dank, ich dachte das funktioniert wie bei einer SPS/PLC.

Dann werde ich mir das mal ansehen.

Schaltung ist eigentlich einfach. Ein 12V Netzteil liefert Spannung und der Arduino wird über einen DC/DC Wandler mit 5V betrieben und damit auch das 5V Realais. Eingang gibt ebenfalls 5V auf den Input. Also kein Widerstand und nichts. Dann werde ich das noch auf GND ziehen.

Danke für die Hilfe

Gruß Thomas

So ich muss nochmal genauer fragen.

Kenne das so leider nicht und ist somit Neuland :(

Einen internen Pulldown gibts ja scheinbar nicht nur einen Pullup, so habe ich das zumindest mit googles Hilfe gelesen.

Ich nehme also meinen Eingang z.b. Input3, dieser bekommt 5V und parallel dazu liegt ein 10K Widerstand auf GND? Sodass wenn ich die 5V am Eingang wegnehme der Input3 mit GND über den Widerstand verbunden ist.

Ist das so richtig?

Und dann sollte ich keine Verzögerung mehr haben an meinen Ausgängen und an der LED?

Gruß Thomas

Es gibt nur s.g. interne PULLUP-Widerstände. Die kannst du dazuschalten mit pinMode(8, INPUT_PULLUP); Nur aufgepasst: Die Logik ändert sich dadurch ! Mit dem Pullup-R liegt der Eingang dann unbeschaötet immer auf High-Pegel. Du must dann nur mit dem Taster / Schalter nach Masse schalten. D.h.: Ein logsches H am Eingang bedeutet dann LED/Relais aus.

Wenn du unbedingt mit positiver Spannung (max. 5V !) am Eingang schalten musst und deine bisherige Schaltlogik beibehalten willst, must du schon selbst einen spearaten Widerstand (z.B. 100K) von Eingang nach Masse beschalten.

OK nun hab ich es glaub ich geschnallt :)

Ich kann die Schaltung umbauen und den Eingang bzw. die Eingänge auf Masse schalten. Dann hoffe ich dass es ohne weitere Widerstände klappt.

Vielen Dank, freut mich dass einem hier so schnell geholfen wird.

Gruß und einen schönen Sonntag Euch allen.

Du kannst natürlich die internen Pullups benutzen, falls Du aber mal auf ein +5V Signal reagieren willst (ohne Invertierung) brauchst Du halt den Pullup. Deine Erklärung war richtig: 10 K an den Portpin und an GND und außerdem das Signal an den Portpin. Bei 5V macht das gerade mal 0,5mA Strom, also kein Problem. Reset auf dem Arduino hat z.B. einen 10K Pullup Widerstand.

Gruß, Ralf