ich habe eine (wahrscheinlich) triviale Frage, aber ich komme leider derzeit auf keine Lösung die funktioniert.
Ich würde gerne von einem Arduino den Wert eines Digitalpins (LOW oder HIGH) an einen anderen Arduino übergeben.
Ich habe schon gelesen, dass man für die Datenkommunikation zwei Arduinos zwar komplett über I2C verbinden kann, das ist für dieses Projekt aber ein übertriebener Aufwand (programmiertechnisch).
Ich habe einfach nur einen Digitalpin der den Zustand high oder low hat und diesen Wert will ich mit einem anderen Arduino abgreifen.
Ich hätte beim Sender-Arduino den gewünschten Digitalpin auf Output gesetzt und beim Empfänger-Arduino den gewünschten Digitalpin auf Input, aber es funktioniert nicht.
Der Sender-Arduino hat am Outputpin LOW aber sobald ich das Kabel beim Empfänger-Arduino anstecke, wechselt der Wert beim Inputpin auf HIGH.
Hast Du NUR den jeweiligen Digital-Pin der beiden Arduinos verbunden? es ist nämlich notwendig, auch den GND beider Arduinos miteinander zu verbinden, damit der empfangende Arduino ein Bezugspotential bekommt, sonst funktioniert das nicht (oder zumindest nicht zuverlässig).
Ich bitte um Entschuldigung für die Verwirrung, es sind in meinem Fall keine zwei Arduino UNO sondern ein Arduino UNO und ein D1 Mini mit ESP8266, der meines Wissens ja mit 3,3 V versorgt werden muss. Da ich in Fritzing kein passendes Board gefunden habe, dachte ich zur Veranschaulichung geht es auch so.
Der UNO ist an USB angeschlossen, der D1 vom UNO über 3,3V und Ground verbunden.
Da ich am D1 schon ein größeres Programm laufen habe, wo ich diese Funktion nur noch als Erweiterung brauche, macht es keinen Sinn den gesamten Code zu posten, aber dieser Code ist am D1 Mini (mit allem vor dem LOOP was notwendig ist):
digitalWrite(3, LOW);
Dieser Code am UNO:
inPin7=digitalRead(7);
Und der Digitalpin 3 vom D1 ist mit dem Digitalpin 7 vom UNO verbunden.
Am Pin 7 hab ich manchmal 0 manchmal 1 im Programm angezeigt, aber nichts Stabiles mit dem ich arbeiten kann.
@michael_z
Du kannst die 5Volt vom Uno an die 5Volt des ESP8266 anschließen. Aber du brauchst für die Datenleitung einen Spannungsteiler, der die 5Volt aus dem Uno auf 3,3Volt für den ESP8266 herunter teilt. Anders geht der Pin des ESP defekt. Der verträgt nur 3,3Volt.
richtig verstehe, ist der D1 'output' und der UNO 'Input'. Wobei es sein kann, dass der Output des D1 nicht ausreicht, um den Eingang des UNO zuverlässig auf HIGH zu bringen. Das ist grenzwertig - je nach Vcc von UNO und D1.
Bitte entschuldigt die ganze Verwirrung gestern Abend, ich habe den Fehler schon gefunden.
Bei einem "normalen" Arduino UNO, MEGA usw. spricht man die Digitalpins ja einfach mit den Ziffern an, also z.B. durch
digitalWrite(3, LOW);
Was ich nicht wusste war, dass das beim D1 nicht funktioniert, aber wenn man stattdessen so den Code schreibt:
digitalWrite(D3, LOW);
dann funktioniert es. Wusste ich bisher nicht und bin auch nur zufällig drauf gekommen. Vielleicht hat ja jemand anderer auch das Problem und die ganze Diskussion hat so zumindest einen Zweck gehabt.
Trotzdem vielen Dank fürs Grübeln und für Hilfestellungen. Jetzt weiß
Dast aber nur die halbe Wahrheit.
Bei den ESP (ESP8266 oder ESP32) ist besser die jeweilige GPIO-Kennzeichnung zu verwenden. Diese Kennzeichnung ist bei den ESP einheitlich, somit kann es nicht zu Verwechslungen kommen.
Doch das funktioniert schon. Es bedeutet nur etwas anderes. Dx entspricht - wenn man das richtige Board auswählt - dem aufgedruckten Pin. Die 'blanke' Nummer ist - wie HotSystems schon erwähnt hat - die GPIO Nummer:
OK, super, dann habe ich jedenfalls etwas gelernt und hoffentlich hilft es auch anderen, die ähnliche Probleme haben.
Wieder einmal ein großes Lob an die Community, ich liebe das Forum, immer ist jemand fachkundiger zur Stelle, der oft innerhalb von Minuten weiterhilft, wirklich genial. Danke, Danke, Danke.