Als Freak würde ich mich nicht gerade bezeichnen, aber ich mach viel mit der seriellen Schnittstelle (die ist einfach praktisch).
Zuerst @Moppi: du musst die serial.h nicht extra einbinden.
Das macht die IDE sowieso.
Wichtig ist nur, diese Schnittstelle auch zu starten:
Serial.begin(115200);
Tipp: wie hoch man hier mit der Baudrate wirklich gehen kann, einfach ausprobieren, das geht oft noch deutlich höher, wenn mans eilig hat)
Teilweise muss man aber auch mal runter gehen, beispielsweise, wenn man BT-Module dazwischen hat, und der Empfang nich mehr so gut ist.
Und: man kann diese Kommunikation auch wieder beenden mit
Serial.end();
Das macht beispielsweise dann Sinn, wenn man die Pins gleichzeitig für _irgendwas_ anderes benutzen will.
Ja- das geht auch asynchron.
Beide Teilnehmer haben einen (in der Grösse definierbaren) Empfangspuffer. Dort landet das, was die Gegenstelle spricht, erstmal ohne weiter beachtet zu werden. Man muss halt aufpassen, dass dieser Puffer nicht überlaufen kann, daher auch die Möglichkeit, den grössenmässig zu definieren.
Wenn der Empfänger dann Zeit hat, kann er nachsehen, ob da was ist und was...
Eine "Rückkopplung" gibt es nicht- der Sender kann senden, was und wie oft er will- er weiss _nicht_, ob es auch ankommt!
Das kann man aber natürlich in Software lösen, wenn man beide Leitungen benutzt.
Dadurch kriegt man die ganze Sache eigentlich so robust, wie man sie haben will.
Man kann das auch abspecken- wenn der Empfänger _nur_ Empfänger zu sein braucht (weil er nix zu melden hat) kann man eine der Leitungen auch weglassen.
Das funktioniert, hat aber den Nachteil, dass man eben keine Sicherheit hat, dass auch alles richtig angekommen ist.
Manchmal braucht man die aber auch nicht.
Im Grunde kann man damit sogar mehrere Rechenknechte kommunizieren lassen (nur nich jeden beliebig mit jedem).
R1 kriegt eine Strippe an Tx, die führt zu Rx an R2. Der bekommt nun eine an Tx, die zu Rx an R3 führt...und so weiter.
Da keiner der Rechner weiss, mit was er da eigentlich redet, funktioniert das tadellos- man könnte nun noch R3 mit R1 verbinden und schon weiss R1, ob seine Kommandos wirklich befolgt wurde...
Abenteuerlich, aber das geht.
Auch möglich: ein Sender gibt Befehle an _mehrere_ Empfänger.
Die kann man einfach alle mit ihrem Rx an den TX des Masters hängen.
Logischerweise kriegen die alle dann das Gleiche....dort könnte man, wenn man Feedback will, auch noch Kommandos einbauen, bei denen der Master den Slaves sagt, von wem er eine Antwort wünscht- man muss halt sicherstellen, dass alle anderen dann die Klappe halten.
Hier kann man sich lustige Protokolle basteln...
Aufpassen muss man aber bei vielen Arduinos doch etwas: die serielle Schnittstelle (man kann die auch in Software nachbilden, das funktioniert...manchmal..auch) wird zugleich zum programmieren benutzt.
Viele Arduinos (Uno, Nano, ProMini...) haben aber nur die eine- man sollte also ein anderes Gerät, was da dann im Betrieb dran hängt, zum schweigen bringen, ehe man versucht, ihn zu programmieren.
Es reicht, wenn man die Leitung, die zu Rx geht, unterbricht.
Die Tx muss nur raus, wenn das dort dran hängende Gerät nicht "mithören" darf (Arduino sendet auch beim programmieren was retour, damit der Rechner, von dem aus er programmiert wird, weiss, dass es klappt).
Es geht auch, wenn das angeschlossene Gerät einfach die paar Sekunden die Klappe hält- weil die Dinger eben _nicht_ unterscheiden können, woher das Gesabbel eigentlich kommt.
Schöner ist hier der Mega2560- der hat drei der Dinger in Hardware.
Da kann man recht sorglos basteln...
Hift das weiter?
Lesezeichen