-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: serielle Kommunikation über 2 xBee Module

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2013
    Beiträge
    9

    serielle Kommunikation über 2 xBee Module

    Anzeige

    Hallo Zusammen,

    ich habe 2 Arduino UNO. Damit verbunden ist jeweils ein xBee Pro Serie 1 Modul. Beide Module sind mit X-CTU konfiguriert. Die Übertragung der beiden Module funktioniert auch.
    An der einen Kombination(Arduino/xBee) ist ein Beschleunigungssensor (ADXL 335) angeschlossen. Dessen x und y Werte möchte ich einlesen und an die andere Kombination senden.

    Code:
    //Sender
    
    void loop() 
    {
      Serial.print(analogRead(x_pin);    // z.B. 257
      Serial.print(",");
      Serial.println(analogRead(y_pin);  // z.B. 321
      delay(100);
    }
    Die Ausgabe am seriellen Monitor sieht dann z.B. so aus 257,321

    Jetzt möchte ich am Empfänger die jeweiligen Werte einlesen und einer Variablen übergebe.

    Code:
    // Empfänger
    {
      if (Serial.available() >0)
      {
        char ch = Serial.read();
        Serial.println(ch);
      }
    }
    Bei der Ausgabe im seriellen Monitor sind alle Zeichen untereinander geschrieben.

    Jetzt hab ich keine Ahnung, wie ich die Werte wieder als int einlese und somit den jeweiligen Variablen zuordnen kann.

    Währe echt super, wenn mir jemand helfen könnte.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Wenn dein Sensor den Wert "123" liefert, dann werden diese 3 Zeichen einzeln an den UART übergeben.
    Beim Empfänger liest du dann immer ein char ein und hast dann in der Ausgabe vermutlich
    1
    2
    3
    stehen.

    Du musst alles in einer Schleife einlesen und in einem string speichern. Dann kannst du diesen Wert wieder in einen Int/whatever konvertieren.

    mfg

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2013
    Beiträge
    9
    Danke für deine Antwort, aber wie lese ich das denn in einer Schleife ein? Stehe da gerade voll aufm Schlauch.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    So z.b.

    Code:
    char str[32];
    int i = 0;
    
    ...
    
        while(Serial.available() > 0) {
            str[i] = Serial.read();
            
            if(str[i] == /* Stop zeichen */) {
                str[i] = '\0';
                i = 0;
                break;
            }
            
            i++;
        }
    
    ...
    Da dieser Teil vermutlich eh in einer Schleife läuft, kannst du vermutlich auch if() anstatt while() verwenden.

    mfg
    Geändert von Wsk8 (29.09.2013 um 17:04 Uhr) Grund: Code geändert

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2013
    Beiträge
    9
    Danke für deine Hilfe. Habs jetzt hinbekommen.
    Hier die Lösung:

    Code:
    char buffer[10];
    int data[1];
    int index_a = 0;
    int index_b = 0;
    
    void loop()
    {
     if(Serial.available() > 0)
      {
        //aktuelles Zeichen einlesen
        buffer[index_a] = Serial.read();                        
        //Trenner oder Zeilenende
        if (buffer[index_a] == ',' || buffer[index_a] =='\n')
        {
          buffer[index_a] = 0;
          //Umwandeln in eine Zahl
          data[index_b] = atoi(buffer);                         
          //Datenindex ändern
          index_b = ++index_b % 2;                               
          if(index_b == 0)
          {
            Serial.print(data[0]);
            Serial.print(" ");
            Serial.println(data[1]);
          }
          index_a = 0;
        }
        else
        {
          index_a ++;
        }
      }
    }
    MFG

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Mal ganz davon abgesehen, dass int data[1] völliger Schwachsinn ist und du mit data[1] = ... oder höher ins Nirvana schreibst, kapier ich diesen Teil auch nicht
    Code:
    //Datenindex ändern
    index_b = ++index_b % 2;                               
    if(index_b == 0)
    {
        Serial.print(data[0]);
        Serial.print(" ");
        Serial.println(data[1]);
    }
    Zudem wird nirgends index_b resetet.

    mfg
    Geändert von Wsk8 (29.09.2013 um 18:45 Uhr)

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2013
    Beiträge
    9
    Du hast recht. Funktioniert doch nicht so richtig. Hast du eventuell einen besseren Vorschlag, wie die die beiden Werte eingelesen bekomme. So langsam bin ich nämlich am verzweifeln.

    Gruß
    Marko

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    Spontan würde ich vorschlagen C programmieren zu lernen. Ansonsten:
    Code:
    int i = 0;
    char temp[4];
    while(i <4)
    {
          temp[i] = readSerialChar(); //Hier die passende Serialport methode verwenden
          i++;
    }
    int result = atoi(temp);
    Ich bin mal von deinem Beispiel ausgegangen dass das Sensor Ergebnis immer 3 Stellig ist. Wenn es das nicht ist brauchst du natürlich immer noch ein eindeutiges Stopzeichen auf dass du in der while Bedingung abfragen kannst. Aber das wurde bereits von weiter oben gezeigt.
    Geändert von shedepe (30.09.2013 um 13:10 Uhr)

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Code:
    char str[32];
    int i = 0, j = 0;
    int val[2];
    
    
    ...
    
    
        while(Serial.available() > 0) {
            str[i] = Serial.read();
            
            if(str[i] == '\n' || str[i] == ',') {
                str[i] = '\0';
                i = 0;
    			
    			val[j] = atoi(str);
    			j++;
    			
    			if(j > 1) {
    				j = 0;
    				/* flag etc setzen, dass 2 Werte empfangen wurden und verarbeitet werden können ... whatever... */
    			}
                break;
            }
            
            i++;
        }
    
    
    ...
    mfg

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Toll dieser Tread, da ich fast ein ähnliches Projekt bearbeite, meine Robosteuerung/Messdatenübertragung, werde ich mal fleissig mitlesen und mitprobieren.

    Gruss

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 25.11.2012, 20:56
  2. Xbee Module Digitale I/O Ports
    Von Projekt 2252 im Forum Elektronik
    Antworten: 22
    Letzter Beitrag: 15.03.2011, 21:01
  3. XBee Module - Kommunikation PC <-> ATmega - Datenanzei
    Von Hero_123 im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 12
    Letzter Beitrag: 21.11.2010, 15:13
  4. NIBO2 - Kommunikation ATmega128 mit Xbee-Modul und PC
    Von Hero_123 im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 17
    Letzter Beitrag: 14.11.2010, 19:30
  5. XBee Module - Kommunikation PC <-> ATmega
    Von Hero_123 im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 21
    Letzter Beitrag: 07.11.2010, 21:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •