Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2010-09-14 12:22:55 arduino + xbee /osc

olivierpfeiffer
nouveau membre
Date d'inscription: 2010-09-14
Messages: 2

arduino + xbee /osc



Bonjour tout le monde.

dans le cadre d'un spectacle d'un danse je souhaiterais réaliser un réseau xbee avec plusieurs arduino. Sur chacune de ces arduino sont branchés des capteurs (piezzo, interrupteurs, accéléromètres). Une des arduino est équipé de la shield ethernet afin de réaliser une conversion xbee -> osc.

Un ordinateur reçoit les données des capteurs et les traites avec max/msp.

Voici le topo global.

Pour l'instant j'aimerais juste brancher des capteurs sur une arduino avec la shield xbee (module 1) et les recevoir via la deuxième arduino avec la shield xbee sur port USB de l'arduino (module 2).
Mes xbee sont des xbee serie 1.

J'ai chercher sur internet et j'ai trouvé la librairie suivante http://code.google.com/p/xbee-arduino/
J'ai suivi la configuration décrite et j'ai essayer avec l'exemple ci-dessous :

sketch arduino pour module 1 :

/**
 * Copyright (c) 2009 Andrew Rapp. All rights reserved.
 *
 * This file is part of XBee-Arduino.
 *
 * XBee-Arduino is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * XBee-Arduino is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with XBee-Arduino.  If not, see <http://www.gnu.org/licenses/>.
 */
 
#include <XBee.h>

/*
This example is for Series 1 XBee
Sends a TX16 or TX64 request with the value of analogRead(pin5) and checks the status response for success
Note: In my testing it took about 15 seconds for the XBee to start reporting success, so I've added a startup delay
*/

XBee xbee = XBee();

unsigned long start = millis();

// allocate two bytes for to hold a 10-bit analog reading
uint8_t payload[] = { 0, 0 };

// with Series 1 you can use either 16-bit or 64-bit addressing

// 16-bit addressing: Enter address of remote XBee, typically the coordinator
Tx16Request tx = Tx16Request(0x1874, payload, sizeof(payload));

// 64-bit addressing: This is the SH + SL address of remote XBee
//XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x4008b490);
// unless you have MY on the receiving radio set to FFFF, this will be received as a RX16 packet
//Tx64Request tx = Tx64Request(addr64, payload, sizeof(payload));

TxStatusResponse txStatus = TxStatusResponse();

int pin5 = 0;

int statusLed = 11;
int errorLed = 12;

void flashLed(int pin, int times, int wait) {
    
    for (int i = 0; i < times; i++) {
      digitalWrite(pin, HIGH);
      delay(wait);
      digitalWrite(pin, LOW);
      
      if (i + 1 < times) {
        delay(wait);
      }
    }
}

void setup() {
  pinMode(statusLed, OUTPUT);
  pinMode(errorLed, OUTPUT);
  
  xbee.begin(9600);
}

void loop() {
   
   // start transmitting after a startup delay.  Note: this will rollover to 0 eventually so not best way to handle
    if (millis() - start > 15000) {
      // break down 10-bit reading into two bytes and place in payload
      pin5 = analogRead(5);
      payload[0] = pin5 >> 8 & 0xff;
      payload[1] = pin5 & 0xff;
      
      xbee.send(tx);

      // flash TX indicator
      flashLed(statusLed, 1, 100);
    }
  
    // after sending a tx request, we expect a status response
    // wait up to 5 seconds for the status response
    if (xbee.readPacket(5000)) {
        // got a response!

        // should be a znet tx status            	
    	if (xbee.getResponse().getApiId() == TX_STATUS_RESPONSE) {
    	   xbee.getResponse().getZBTxStatusResponse(txStatus);
    		
    	   // get the delivery status, the fifth byte
           if (txStatus.getStatus() == SUCCESS) {
            	// success.  time to celebrate
             	flashLed(statusLed, 5, 50);
           } else {
            	// the remote XBee did not receive our packet. is it powered on?
             	flashLed(errorLed, 3, 500);
           }
        }      
    } else {
      // local XBee did not provide a timely TX Status Response -- should not happen
      flashLed(errorLed, 2, 50);
    }
    
    delay(1000);
}

sketch arduino pour le module 2

/**
 * Copyright (c) 2009 Andrew Rapp. All rights reserved.
 *
 * This file is part of XBee-Arduino.
 *
 * XBee-Arduino is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * XBee-Arduino is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with XBee-Arduino.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <XBee.h>

/*
This example is for Series 1 XBee (802.15.4)
Receives either a RX16 or RX64 packet and sets a PWM value based on packet data.
Error led is flashed if an unexpected packet is received
*/

XBee xbee = XBee();
XBeeResponse response = XBeeResponse();
// create reusable response objects for responses we expect to handle 
Rx16Response rx16 = Rx16Response();
Rx64Response rx64 = Rx64Response();

int statusLed = 11;
int errorLed = 12;
int dataLed = 10;

uint8_t option = 0;
uint8_t data = 0;

void flashLed(int pin, int times, int wait) {
    
    for (int i = 0; i < times; i++) {
      digitalWrite(pin, HIGH);
      delay(wait);
      digitalWrite(pin, LOW);
      
      if (i + 1 < times) {
        delay(wait);
      }
    }
}

void setup() {
  pinMode(statusLed, OUTPUT);
  pinMode(errorLed, OUTPUT);
  pinMode(dataLed,  OUTPUT);
  
  // start serial
  xbee.begin(9600);
  
  flashLed(statusLed, 3, 50);
}

// continuously reads packets, looking for RX16 or RX64
void loop() {
    
    xbee.readPacket();
    
    if (xbee.getResponse().isAvailable()) {
      // got something
      
      if (xbee.getResponse().getApiId() == RX_16_RESPONSE || xbee.getResponse().getApiId() == RX_64_RESPONSE) {
        // got a rx packet
        
        if (xbee.getResponse().getApiId() == RX_16_RESPONSE) {
                xbee.getResponse().getRx16Response(rx16);
        	option = rx16.getOption();
        	data = rx16.getData(0);
 for (int i=0; i< rx16.getDataLength(); i++)
		    {
			Serial.print(rx16.getData(0), HEX);
        }
}
 else {
                xbee.getResponse().getRx64Response(rx64);
        	option = rx64.getOption();
        	data = rx64.getData(0);
        }
        
        // TODO check option, rssi bytes    
        flashLed(statusLed, 1, 10);
        
        // set dataLed PWM to value of the first byte in the data
        analogWrite(dataLed, data);
      } else {
      	// not something we were expecting
        flashLed(errorLed, 1, 25);    
      }
    }
}

Je reçois des données dans max/msp mais seulement toutes les 5sec or il me me faut un flux continu, de plus je ne comprends pas comment je peux brancher d'autres capteurs.

J'ai refais des recherches et je suis tomber sur le b-a-b-a  avec l'exemple du site arduino http://arduino.cc/en/Guide/ArduinoXbeeShield

Cet exemple est parfait mais je souhaiterais communiquer dans le sens inverse. Or pour cela comment je peux lire dans mon module 2 l'information provenant de la xbee et la ré-écrire sur l'usb avec les jumper en position xbee ???

Bref je patauge dans la semoule.

Est-ce quelqu'un saurait m'apporter des réponses ?

Bien à vous

Olivier

Hors ligne

 

#2 2010-09-14 14:33:22 Re : arduino + xbee /osc

atprocess
membre
Lieu: Paris_Tunis_Bruxelles
Date d'inscription: 2009-10-06
Messages: 39
Site web

Re: arduino + xbee /osc



pour le retard de 5s c'est écrit dans le code du module1 émetteur:

// after sending a tx request, we expect a status response
    // wait up to 5 seconds for the status response
    if (xbee.readPacket(5000)) {}

alors si tu remplace 5000ms par 0 théoriquement il n'y aura plus de delay.


alitnani.com

Hors ligne

 

#3 2010-09-14 14:47:57 Re : arduino + xbee /osc

olivierpfeiffer
nouveau membre
Date d'inscription: 2010-09-14
Messages: 2

Re: arduino + xbee /osc



je l'ai fais à 100ms et 20ms.

Dernière modification par olivierpfeiffer (2010-09-14 17:41:07)

Hors ligne

 

#4 2010-09-14 16:59:28 Re : arduino + xbee /osc

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: arduino + xbee /osc



Bonjour

citation :

j'ai essayé de baisser mais ça ne le fait pas

Es-tu passé directement à zéro? Ou fait des tests en diminuant la valeur (il faut probablement laisser le temps de recevoir la réponse)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024