Arduino UNO e RN-XV

ciao a tutti!
ho in progetto di creare un robottino comandato dal pc senza fili, ho gia iniziato a arrangiarmi..
ho comprato un arduino uno, una x-bee shield, e un modulo wifi rn-xv (http://www.sparkfun.com/products/10822)
però dopo varie ricerche non so come fare a comunicare con l'arduino tramite il modulo..
ho scaricato cercando in rete due librerie: la Wifly e la WiflySerial
c'è qualcuno che potrebbe aiutarmi?
Grazie Mille in anticipo!

la libreria WiFly dovrebbe contenere degli esempi... parti da quelli

Grazie per la risposta immediata!
dopo varie prove ho notato che non riesce a connettersi perchè nell'istruzione Wifly.begin() si blocca e non esegue più nulla..
fa così con ogni programma esempio..
http://img140.imageshack.us/img140/4272/34044066.jpg
http://img254.imageshack.us/img254/28/72071691.jpg

queste son le configurazioni dell'RN-XV
http://img444.imageshack.us/img444/3641/69487068.jpg

c'è qualcosa di sbagliato o non specificato?
Grazie in anticipo!

questo file va modificato da te: http://img254.imageshack.us/img254/28/72071691.jpg

inserisci il nome della rete (SSID) e la password (Passphrase)

come vedi qui: http://img444.imageshack.us/img444/3641/69487068.jpg
sono appunto quelli ssid e pass che ho configurato sull'RN-XV
però mi si blocca su quella funzione..

dovresti guardare all'interno della libreria qualòe comando blocca il begin, mettendo dentro la libreria delle serial.println

ho provato e sembra vada tutto bene..
però la println dopo la begin non viene eseguita.. si blocca prima..

questo è il file della libreria con la begin:

#include "_Spi.h"

SpiDevice::SpiDevice() {
  /*
   */

}

void SpiDevice::begin() {
  /*
    
    Use the default chip select pin as specified by
    the SS define in the header.
    
   */
  
  Serial.println("1");
  begin(SS);
  Serial.println("5");
  
}

void SpiDevice::begin(byte selectPin) {
  /*
   */
  _selectPin = selectPin;
Serial.println("2");  
  _initPins();
  Serial.println("3");
  _initSpi();
  Serial.println("4");
}

void SpiDevice::_initPins() {
  /*
  
    Initialise the pins used for SPI communication.
  
   */
  
  pinMode(MOSI, OUTPUT);
  pinMode(MISO, INPUT);
  pinMode(SCK, OUTPUT);
  pinMode(_selectPin, OUTPUT);
  Serial.println("initPINS");
  
  deselect();
  Serial.println("dopo deselect");
}

void SpiDevice::_initSpi() {
  /*
  
    Initialise SPI system.
  
   */

  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);
  Serial.println("initSPI");

#if 0
  // This approach is not specified in the datasheet so I'm trying without.
  char clr = 0;
  
  clr=SPSR;
  clr=SPDR;
  delay(10); 
  Serial.println("ancora initSPI");
#endif
  
}

void SpiDevice::deselect() {
  /*
  
    Deselect the SPI device.
    
  */
  digitalWrite(_selectPin, HIGH);
}

void SpiDevice::select() {
  /*
  
    Select the SPI device.
    
  */
  digitalWrite(_selectPin, LOW);
}

byte SpiDevice::transfer(volatile byte data) {
  /*

    Transfer byte to SPI device and return
    the byte retrieved.

   */  
  SPDR = data; // Start the transmission
  Serial.println("start trasmission");
  while (!(SPSR & (1<<SPIF))) {
    // Wait for the end of the transmission
  };
  Serial.println("end trasmission");
  return SPDR;  // Return the received byte
}

void SpiDevice::transfer_bulk(const uint8_t* srcptr, unsigned long int length) {
  /*

    Transfer an array of bytes to the SPI device.
    
    Discards all returned bytes.
  
   */
   Serial.println("inizia bulk");
  for(unsigned long int offset = 0; offset < length; offset++) {
    transfer(srcptr[offset]);
  }
  Serial.println("finisce bulk");
}

questo è quello che mi stampa sulla seriale:

WiFly Shield Terminal Routine
1
2
initPINS
dopo deselect
3
initSPI
4
5
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission
start trasmission
end trasmission

non riesco proprio a capire.. :~
grazie in anticipo dell'aiuto :wink:

questa libreria funziona, a quanto pare è l'altra che inizia a chiamare la funzione trasmission con un loop infinito... confermi? che cosa viene inviato in questo loop?

però non è un loop infinito.. dopo aver fatto quel tot di stampe.. quindi esser entrata quel tot di volte nella transfer smette e si ferma..
quindi in teoria la funzione begin non ha problemi.. però chi è che chiama la trasmission?
in ogni caso il programma non va avanti :~

ho seguito questa guida che sembrava riuscisse a risolvere il mio problema perfettamente..

ma niente continua a rimanere disconnesso entrando in loop:

Serial.println("Attempting to connect to SPI UART...");
  SpiSerial.begin();                       //hack in SpiUart.cpp so it don't lock
                                           //hack below: repeat configuration until it passes
  while(!SpiSerial.uartConnected()){
    SpiSerial.configureUart(9600);
    Serial.println("err");    
  }
  // end hack

il baudrate è configurato giusto dal command mode del modulo..

nessuno può aiutarmi?

esattamente dov'è che va in loop infinito? devi capire la parte di codice dove si blocca, e poi postare lo skect di prova, magari usa uno sketch fornito dalla sparkfun così da essere sicuro che sia funzionante...
testalo sia con hack e senza hack e facci sapere se ci sono differenze nella posizione del ciclo infinito.

Ciao Ragazzi, io ho un Arduino UNO un wireless SD shield con lo switch micro/usb ed un RN-XV ho scaricato da qua GitHub - jcrouchley/WiFly-Shield: WiFly Shield la libreria fresca fresca wifly ma già provando con lo sketch di esempio SPIUartTerminal non funziona, si pianta su "Attempting to connect to SPI UART..." quindi non esegue il comando successivo che è SpiSerial.begin(); qualche idea??

grazie 1000

alla fine il progetto è quasi totalmente cambiato..
ecco il video finale :grin:
(a breve nella descrizione sarà linkata la documentazione completa ;))

Video:

Documentazione:

Ciao, bellissimo lavoro, complimentoni!!!!
Ma per documentazione completa intendi dire che puoi mettere uno scemo come me in condizione di costruire lo stesso progetto(schemi, firmware, descrizione del progetto, elenco dei componenti elettronici, elettrici e meccanici, ecc.)? :slight_smile:

Fighissimo!
Sarà il prossimo rover lanciato su Marte! :wink:

A parte gli scherzi, mi interessano i cingoli, dove hai acquistato la parte motoristica?

Fantastico si può ruotare la camera verso l'alto così da guardare sotto la gonnella senza prendere ceffoni. ]:smiley:

No apparte gli scherzi è un progetto ben riuscito, complimentoni.

Costo di tutto?

Ciao.

Grazie a tutti dei complimenti! :wink:
@Michele Menniti con la documentazione sicuramente si capisce tutto il funzionamento, poi bisognerebbe vedere le conoscenze che hai.. ma non è niente di complesso te l'assicuro :slight_smile:
@leo72 i cingoli li ho acquistati quì: Pololu - Chassis ma credo non li producano più :confused:
@MauroTec il costo di tutto è all'incirca sui 200 euro.. (motori e base sui 50, arduino e ethernet sui 50, webcam 50/60, access point 35 e poi materiale elettronico vario...)
Grazie ancora a tutti!
questa è la documentazione: big_brother_doc.pdf - Google Drive

meccanica & robotica 0 :blush:
la tua documentazione è ben fatta ma manca proprio la parte che non sarei mai in grado di mettere in piedi: la costruzione del carro armato.
Comunque è davvero spettacolare questo lavoro, di nuovo complimenti :slight_smile:

ma il "carro armato" l'ho comprato già fatto! eccolo qua: Pololu - RP5 Tracked Chassis Gray
l'unica mia preoccupazione è quella di alimentare i motori nelle varie combinazioni...
Grazie ancora!!! :grin: