"Signal" auf zweiten Arduino Uno übertragen

Ich baue gerade basierend auf Spielzeug Lasertag Pistolen eine Art "Base" für verschiedene Spielmodi.

Dabei bin ich auf das Problem gestoßen das die IRLib2 permanent im Loop laufen muss, zeitgleich dazu aber ein Neopixelstreifen + Lautsprecher (eventuell später noch ein Dispay) etwas anzeigen, blinken und piepsen soll.

Da die IRLib2 im Loop laufen muss und nichts parallel dazu laufen kann hab ich das erkennen des IR signals nun auf einen zweiten Arduino UNO ausgelagert. Der zweite Uno soll nun einen Pin vom ersten Uno schalten um einen treffer des Lasertag spielzeug zu signalisieren. Ich habe es wie folgt versucht aber es klappt nicht so wie ich es mir vorstelle:

UNO1 hängt an USB - UNO2 bekommt 5V über Vin und Gnd von UNO1

UNO2 mit IR Sensor (aufs wesendliche gekürzt):

void setup() {
pinMode(10,OUTPUT);    // PIN 10 von UNO2 ist mit Pin 9 von UNO1 verbunden!  
}
void loop(){
if ( //signal erkannt){
digitalWrite(10,HIGH);
delay(500);
digitalWrite(10,LOW);

UNO 1 mit "Funktionen" (ebenfalls gekürzt):

void setup() {
pinMode(9,INPUT); // hier soll das Signal von UNO2 in UNI1 rein
}
void loop() {
if (digitalRead(9)==HIGH){ //mach was ...

Eventuell hab ich einfach nur blöde Denkfehler oder es funktioniert nicht so wie ich mir das vorstelle.
Ich wollte jedenfalls keine komplizierte übertragung von Daten sondern es muss wirklich nur "Übermittelt" werden ob nun Team rot oder Team blau einen treffer auf dem IR sensor gelandet hat (den Code für die verschiedenen Teams hab ich mir oben gespart ... ich denke man kann auch so gut erkennen wenn ich einen grundlegenden Denkfehler hab).

Gehe ich recht in der Annahme, dass die IrLib2 auf UNO2 laufen soll?
Falls ja, ist der Fehler hier - welcher auch immer, was genau nicht geht, können wir ja nur raten:

      delay(500);

wursch:
Dabei bin ich auf das Problem gestoßen das die IRLib2 permanent im Loop laufen muss,

Hallo und willkommen im Forum.

Was ist di IRLib2 ?

Verwendete Libraries immer mit einem Link hier zeigen.
Wie sollen wir wissen, welche du tatsächlich verwendest ?

Und dein Sketch ist fast nicht zu lesen. In einem Mobilgerät überhaupt nicht.

Setze deinen Sketch bitte in Code-Tags.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Dazu den Sketch markieren und die Schaltfläche klicken, oder [ code] davor und [ /code] dahinter ohne die Leerzeichen.
Das kannst du in deinem Startbeitrag noch nachträglich machen.

Damit wird dieser für alle besser lesbar.

Die IRLib2 läuft auf UNO2. Tatsächlich läuft die Lib aber komplett, ist daher auch nicht relevant für mein Problem.

Wenn ich das delay raus nehme funktioniert es trotzdem nicht. Ich hab das delay eingebaut das UNO 1 genug Zeit zum "erkennen" hat das der Pin nun HIGH ist.

(ich ändere oben den Code gleich um besser lesbar zu sein)

edit: Mein Hauptproblem ist "einfach" das ich einen Pin von UNO2 schalten möchte und UNO1 soll ebenfalls an einem PIN etwas erkennen .... der Rest läuft komplett. (und ich glaub es macht keinen Sinn wenn ich hier 1000 Zeilen Code reinkopiere .... der Rest funktioniert ja)

Und eine Hauptsache zur Verständlichkeit hab ich natürlich vergessen: "PIN 10 von UNO2 ist mit Pin 9 von UNO1 verbunden"

Du kannst den auch komplett neu im Einganspost reinsetzen.

Dazu den alten komplett löschen und im IDE-Fenster rechte Maustaste und für Forum kopieren klicken, danach hier einfügen.

Und was ist das für eine IRLib2 ?
Evtl. wird die falsch abgefragt.

So sehen wir nicht, wo dein Fehler sitzt.

Ach und mit einem "analogen Signal" hat das nichts zu tun. Da solltest du Analoges rauslöschen, das verwirrt nur.

Und dein Sketchfragment hat einen Fehler:
hier

if digitalRead(9)==HIGH){ //mach was ...

fehlt die Klammer

if ( digitalRead(9)==HIGH){ //mach was ...

das müsste dir schon beim kompilieren auf die Füße fallen.

Okay, meine Annahme war, dass die IRLib (hört sich irgendwie nach Infrarot an - wie bei der Fernbedienung) wegen des delay() stehen bleibt. Hat die Glaskugel falsch gelegen.

Dann würde ich jetzt im UNO2 setup den Pegel des Ausgangspins erstmal definiert auf LOW legen - ein definierter Anfangswert ist wünschenswert.

Wie Dieter gerade auch schon bemerkte:
Die fehlende Klammer in UNO1 hast Du hoffentlich im Original-Sketch schon korrigiert:

if [color=red]([/color]digitalRead(9)==HIGH){

Was hängt denn an UNO2 noch alles dran? Vielleicht reicht der Strom, den Du aus UNO1 ziehen kannst, nicht aus. Gibt es serielle Ausgaben, die Dir beweisen, dass beide zusammen auch laufen?

Wno158 Du bist mein Held! (Und ich bin zu verpeilt glaub ich !!!!)

Durch das ergänzen von:

digitalWrite(rot, LOW);
digitalWrite(blau, LOW);

konnte ich das Problem lösen und nun funktioniert alles so wie gewollt :slight_smile:

Hab noch nie zwei Arduinos zusammengeschaltet und da natürlich das vergessen.
Im Originalscetch ist natürlich alles richtig .... auch hab ich die Pins benannt usw (sieht man ja hier im Code).

Ich ändere oben noch alles für alle die auch mal das Problem haben!!! Danke!!!! wunderbar!!! Nun freu ich mich gerade extremst und kann weiter an der Hardware arbeiten :wink:

edit: Um auf die anderen Fragen auchnoch zu Antworten ... ja es ist eine IR Bib weil die Lasertag Pistolen IR Signale aussenden. Am UNO2 hängt sonst nix dran, der ist rein für das IR Signal da und soll sich nur melden sobald Team rot oder Team blau trifft. UNO2 hat momentan einen NEOpixelstreifen mit 30 LEDs die aber alle nie auf voller Leistung sind. Dazu momentan noch ein Lautsprecher und eventuell noch ein Display (noch am überlegen ob das für manche Spielmodi Sinn macht). Ansonsten nur Schalter um die verschiedenen Spielmodi/Spielzeiten einzustellen.

wursch:

digitalWrite(rot, LOW);

digitalWrite(blau, LOW);

Häää...was hat denn jetzt rot und blau mit deinem Sketch zu tun ?
Was willst du uns damit sagen ?

HotSystems:
Häää...was hat denn jetzt rot und blau mit deinem Sketch zu tun ?
Was willst du uns damit sagen ?

Mein original Sketch ist über 1000 Zeilen lang und funktioniert problemlos.
Das einzige was ich in meinem Sketch geändert habe ist das IR abrufen im Loop auf einen zweiten Arduino auszulagern.
Dafür hab ich Änderrungen am Sketch gemacht die ich euch oben beschrieben habe.
Da ich die Pins bei mir mit Farben benannt habe

int rot = 9;

hab ich natürlich

digitalWrite(rot, LOW);

einfügen "müssen" .....
Jedenfalls funktioniert nun alles und ich habe nur vergessen den pin 9 (rot) schon im Setup auf LOW zu setzen.

wursch:
Dafür hab ich Änderrungen am Sketch gemacht die ich euch oben beschrieben habe.
Da ich die Pins bei mir mit Farben benannt habe

Danke....das hätten wir natürlich erraten müssen. :wink:

Heyho,

hatte angenommen das das durch "aufs wesendliche gekürzt" erkennbar ist, aber hab es wohl nicht eindeutig genug geschrieben.

Jedenfalls freue ich mich nun sehr das ich den Fehler gefunden habe.
Der rest von meinem Sketch ist sicherlich auch noch optimierbar aber da möchte ich mich selbst austoben und lernen. Geht mit primär eher drum etwas zu bauen und an Herausvorderrungen zu wachsen und eigene Lösungen zu finden als code von anderen zu kopieren nur damit es funktioniert. Daher hab ich auch vermieden den kompletten code hier rein zu kopieren ... zumal ja auchnoch die Verkabelung wichtig ist ... (ist mir aber erst später gekommen das das ja auch noch eine Rolle spielt ^^).