zwei Arduinos transportieren Daten .... ?

Guten Abend

ich bin in meinem Wetterserver nach dem Einsatz des dritten Arduinos ins Stocken geraten. Hier geht es um die Komunikation von Sensorwerten die zuvor über Xbees transportiert wurden.
Mit im Spiel ist ein Ethernet Shield und ein Dipslay.

Das Display blockiert mir den I2C Port, Versuche den Displayanschluss auf PIN 8 und 9 (mehr ist nicht frei) umzulegen waren ohne Erfolg.

Da das Gegenüber ein Mega ist, dachte ich an die Verbindung der seriellen Schnittstellen, aber das ging absolut nicht.

Die Soft Serial Libray kann (so habe ich das gelesen) nicht konditionell eingebunden werden (..isdata() )

Kann ich bei dem Arduino über Port 8 und 9 irgendwie kommunizieren ?

Für jeden Hinweis dankbar

Jürgen

df6ih:
Das Display blockiert mir den I2C Port, Versuche den Displayanschluss auf PIN 8 und 9 (mehr ist nicht frei) umzulegen waren ohne Erfolg.

Wieso sollte das Display den I2C Port blockieren? I2C ist ein Bus interface und kann (ohne erweiterung) bis zu 127 Geräte ansprechen. Da kann locker auch ein Arduino mit dranhängen.

Grüße Uwe

"mit " dranhängen schon.

Aber ich nutze die SPI Schnittstelle, es ist ein Display ohne I2C. Im Prinzip hast du aber recht, ich muss es gegen ein I2C Display tauschen ....

Du schriebst "I2C Display".

Was hat die SPI mit I2C zu tun?
Grüße Uwe

Na der Port als solcher, 4 und 5. Hatte versucht das auf 8 und 9 zu tauschen, das hat aber nicht funktioniert.

Da am Xbee ein Mega hängt, werde ich das Display dem Mega verordnen. Ethernet shield und Xbee arbeiten nicht zusammen, was ein weiteres Gerät erforderlich gemacht hat.

Ich berichte weiter. Mal sehen ob ich die Verbindung über IIC auf Anhieb hinbringe. Danke für die Hilfe bis hier...

Ich habe schon mal getestet hiermit kommt man schon ziemlich weit:

Hat mir sehr geholfen.

df6ih:
Na der Port als solcher, 4 und 5. Hatte versucht das auf 8 und 9 zu tauschen, das hat aber nicht funktioniert.

Der I2C port ist hartwaremäßig an A4 und A5 (analogPins) und deshalb NICHT auf andere Pins zu tauschen.
Grüße Uwe

Ooooooooooooops ... schlechte Recherche hat ihren Tribut gefordert. Danke uwefed für den Hinweis ! Ich war von den beiden Mega 1280 verwöhnt, die den I2C Bus freigestellt haben.

Aus jedem Verlust entsteht ein Gewinn, das Display hat den Arduino gewechselt und ich kann nun bestätigen, dass die digitalen Ports frei wählbar sind. räusper

Was mich nun beschäftigt ist der Umstand, dass ich mit den normalen Schnittstellenabfragen beim Mega1280 die von den Xbees perfekt transportierten Daten nicht erreiche. (Ich sehe sie im Monitor auf dem Terminal am Ende der Funkstrecke)

Habe nacheinander alle (1....3) seriellen Schnittstellen auf >0 abgefragt und in die Abfrageschachtel eine einfache Ausgabe gelegt um sicher zu sehen wo Daten anliegen, aber das ist bisher erfolglos. Ich meine sagen zu können, dass Serial1 bis Serial3 leer sind, also keine Daten im Puffer haben. Sicherheitshalber auch den Serial Monitor abgehängt, ohne Erfolg.

Daraus resultiert die Frage: Wo genau treffen die Daten auf ? Die Xbees sitzen auf DFrobot shields.

Ok, ich muss einen Schritt zurück gehen:

Die Xbee Funkstrecke transportiert die Sensor Werte perfekt. Die Krux ist aber, dass das Xbee anscheinend ausschließlich den TX Pin des Arduino mit den empfangenen Daten belegt.

Zunächst hatte ich alle Serial.reads von 1-3 am Mega 1280 ausprobiert und nirgendwo Erfolg.

Seit ich Tx1 nach RX2 gebrückt habe, kann ich Daten empfangen.

Diese will ich ins Internet senden und für das LCD Display aufarbeiten.

Einfachere Frage wäre also: Wie erhalte ich aus dem Empfang einen String den ich dann weiterbearbeiten kann und auf dem Display anzeigen. Ich habe alle möglichen google Anstrengungen unternommen um das für mich nachvollziehbar zu "ergoogeln".

Ich hänge mal einen Anhang der nicht richtig funktionstüchtigen Routine an (stark verhunzt durch 100erte Versuche :slight_smile: )

if (Serial2.available()>0){
        /*handler= Serial2.read();  
        Serial2.print( handler);
        */
        lcd.setCursor(0,2);
        lcd.println (Serial2.read()); 
        lcd.setCursor(0,3);
        lcd.print ("empfange ..."); 
}
  lcd.setCursor(0,1);  
  lcd.print ("Ich arbeite");
  
}

Die Anzeige auf dem Monitor des PC entspricht exakt meinen Vorstellungen :

Windgeschwindigkeit: 6 km/h Windstaerke: 2 Beaufort
66.19 % - Temp: 11.97

Hallo df6ih, ich hab Schwierigkeiten Deiner Problempresentationen zu folgen.

df6ih:
Seit ich Tx1 nach RX2 gebrückt habe, kann ich Daten empfangen.

Natürlich kannst Du bei einem TX (SendePin) der Seriellen Schnittstelle keine Daten empfangen.

Grüße Uwe

Es ist ein wenig vertrackt...

Also: Auf keinem der Empfangspins gibt es etwas vom Xbee zu lesen, das wäre was ich erwartet hätte.
Anstatt dessen kommt der Empfang vom Xbee direkt auf den TX der seriellen Schnittstelle. Da kann ich den aber nicht abfangen, deswegen habe ich TX -> RX2 gebrückt.

Die ankommenden Daten sollen ja erst in dem Arduino im Haus aufbereitet werden und nicht nur über die Schnittstelle wieder rausgeschickt.

Dumm dabei ist eben, dass ich es nicht schaffe die Bits zu sinnvollen Texten zu verarbeiten, oder eben Sensorwerte. Da fehlt mir vermutlich das Handshake zwischen den beiden Schnitstellen.

Habe ich etwas übersehen? Wie sonst kann ich die Xbee Daten in den Ram des Empfangsarduinos befördern ? Irgendwo hatte ich etwas von einer Xbee Libray gelesen, würde die helfen ?

Gruß und schönen Abend

Jürgen

Ja , Du hast was übersehen. Du beschreibst wage die Verbindungen aber nicht welche HW (Boards) Du wie verbindest. Das macht Dir helfen schwer. :wink: :wink:
Grüße Uwe

Board1: Draussen, Mega 1280 mit Xbee2 und Sensoren (Wind, Temp, Feuchte .... )
Board2: Innen, Mega 1280 mit Xbee2 mit LCD Display 20x4 und geplanter Weiterverbindung nach Board 3

hinzu soll noch
Board3: Uno mit Internetshield

Die ersten beiden sind aufgebaut, ich erhalte die draussen abgesendeten Werte innen auf der Schnittstelle zum PC. Ich habe keinen Schimmer wie ich die auf der Schnittstelle von Board2 befindlichen Daten in Board2 weiterverarbeiten könnte, streng genommen witschen die über die Schnittstelle weg.

Welchen Ansatz kann ich den aufgreifen um das Xbee IN den Board2 Speicher (sprich in den sketch verarbeitbar) auszulesen ? Hilft mir die Xbee Libray dabei ?

Ich hoffe es ist nun ein wenig nachvollziehbarer :wink:

Nein noch nicht.
Welche Shields benutzt Du für die XBee und an welche Pins hast Du sie angeschlossen?
Grüße Uwe

Ah, der Pin ... guter Tipp 8)

Also das sind diese : http://www.ebay.de/itm/XBee-Shield-RF-Module-Arduino-Mega-Duemilanove-Nano-/260782081648?pt=LH_DefaultDomain_77&hash=item3cb7d2c670

Den PIN suche ich noch raus, die stecken so schön denkfrei drauf.

Das ist DFRobot, ich schau später mal nach ...

// Edit !

Also da ist das dann tatsächlich so, das shield sendet / empfängt Port D0 und D1.

Somit reduziert sich mein Problem auf die Frage:

Ist es möglich Daten von D1 in den RAM des Arduinos zu holen um diese dann dort als Variablen weiter zu verarbeiten ?

Wäre toll wenn einer der Wissenden mich Unwissenden wenigstens halbwissend machen würde :slight_smile:

SOLVED ...

Die Lösung war so einfach wie dumm der Fehler !

Die Pins des Shields standen im Programmiermodus / mit Umlenkung der Ausgabe auf die USB Schnittstelle.

Beobachte mit großer Freude die Anzeige der Daten auf dem 20x4 Display.

Hier mal (falls nochmal jemand nach Xbee Problemen googelt) der Minimalansatz zum gespiegelten Auslesen der Xbee Daten...

.....

void loop() {
    
 
     if (Serial.available()>0) {   
        lcd.print((char)Serial.read());
     }   
        
 .....

Hier fehlt der smiley mit dem roten Kopf :%