Frage zu INPUT resp. INPUT_PULLUP

Hallo

Eine kleine Frage bezüglich INPUT.
Ich habe zwei Arduinos, eines um Befehle zu registrieren und das andere hat ein MP3 Shield drauf. Wenn ich nun Pin 5 mit Pin 5 verbinde und am "Befehls" Arduino den Output auf HIGH setze und sobald ein Befehl raus geht wird LOW gesendet, reicht es dann den Pin 5 am Arduino mit MP3 Shield auf INPUT zu setzen? Oder brauche ich da trotzdem INPUT_PULLUP? 5V gehen ja generell an Pin 5 raus, ausser das Signal kommt.
Ist das für die Analogen Pins gleich zu handhaben mit INPUT und INPUT_PULLUP?

Grüsse

Stef

stef308:
... reicht es dann den Pin 5 am Arduino mit MP3 Shield auf INPUT zu setzen?

Ja, da der Pegel immer HIGH oder LOW ist.

Dennoch würde ich es anders machen: INPUT_PULLUP und wenn der Befehls-Arduino was melden will, dann legt er die Meldeleitung auf LOW. Beispielsweise bei Kabelbruch oder noch nicht bestromten Befehls-Arduino hat der MP3-Arduino ein definiertes Signal.

Die Programmiersprache C bzw C++ hat keine "Befehle" sondern Funktionen.

Ein als Ausgang definiertes Pin hat als Pegel ca 5V wenn es HIGH gesetzt ist und ca 0V wenn es LOW gesetzt ist. Das genügt um von einem Eingang sicher HIGH bzw LOW erkannt zu werden.
Du mußt die Massen der beiden Arduinos verbinden (direkt oder indirekt über die Versorgungsspannugn zB beide über USB am gleichen PC).

Zu den Sicherheitsmaßnahmen.

  1. wie schon gesagt ein Pullupwiderstand (auch der interne ist ausreichend) damit bei einer Unterbrechung zwischen den beiden Arduinos oder wenn der Ausgang zb während des Einschaltens oder versehentlich als Eingang definiert ist, der Eingang einen definierten Zustand hat.
  2. einen Widerstand von 330 oder 470 Ohm zwischen Ausgang und Eingang. So schützt Du die Arduinos falls der Eingang mal aus Versehen als Ausgang definert wird.

grüße Uwe

Ok, das heisst anstatt INPUT setze ich INPUT_PULLUP. Das gilt auch für die Analogen Pins? Kann man in diesem Fall sagen, dass ein INPUT generell immer mit Pullup-Wiederstand benutzt werden sollte?

@Uwe: Ja, Funktionen stimmt :smiley:
Die Massen werden über eine Versorgung gespiesen, das ist klar.

Nein, bei den analogen Pins ist es besser keinen Pullup zu haben.

Eine Fehlfunktion äußert sich da anders und ein Pullupwiderstand beeinflußt da meist zuviel die Meßschaltung.

Grüße Uwe

Ok, danke für den Hinweis.
Falls die Analogen Pins aber mit den digitalen Pinnummern angesprochen werden (z.B. A0 => Pin 14), dann sind sie wie die Digitalen zu beachten?

dann sind sie wie die Digitalen zu beachten?

Behandeln!

Abhängig vom geheimen Board...
Aber ja, grundsätzlich ja.

z.B. beim Pro Mini gilt das für A0 bis A5
Aber nicht für A6 und A7

Super, alles klar, danke!

Dann ists beim UNO A0 bis A5 => 14 bis 19 :wink:

stef308:
Dann ists beim UNO A0 bis A5 => 14 bis 19 :wink:

Du kannst die analogen auch mit Ax ansprechen, wenn Du sie digital nutzt:

const byte tasterPin = A0;
bool zustand = digitalRead(tasterPin);

stef308:
Ok, danke für den Hinweis.
Falls die Analogen Pins aber mit den digitalen Pinnummern angesprochen werden (z.B. A0 => Pin 14), dann sind sie wie die Digitalen zu beachten?

Ganauer. Wenn Du die Pins A0 bis A5 als digitale Pins verwendest (pinMode(OUTPUT/INPUT/INPUT_PULLUP)) sind das gleichwertige Pins wie die Pins D0 bis D13. Du kannst die mit A0, 14 oder D14 ansprechen.

Meiner Meinung ist die allgemein verwendete Beschreibung für diese Pins irreführend. Besser finde ich: Alle 20 Pins (D0 bis D13, A0 bis A5) sind digitale Pins. Viele haben dazu noch Sonderfunktionen: analoge Eingänge, PWM Ausgänge, Schnittstellen, Interrupt, Counter und Timer.

Grüße Uwe