Comunicacion entre Arduinos

Hi, me parece que ya me presente en su momento, acudo a vosotros a ver si me podeis echa un cable en el "bloque de comunicación" del sistema que estoy haciendo.

Os comento el sistema esta formado por 8 sensores de presion, lo que pretendo hacer es que el arduino (nano) lea / interprete las lecturas de los 8 sensores ( este tema ya esta solucionado ) y me las envie via radio ( transmisor FM http://www.sparkfun.com/commerce/product_info.php?products_id=8946 ) a otro adruino ( nano) con el correspondiente Receptor ( http://www.sparkfun.com/commerce/product_info.php?products_id=8949).

Mi principal problema es la ignorancia, ya qe de este tema no domino mucho, he visto algunos ejemplos pero estan en C y al intentar aplicarlo/( pasarlo a arduino la cosa no acaba de funcionar ... bueno mejor dicho no funciona, me salen errores hasta por las orejas.

por si os sirve de orientacion de por donde van los tiros aqui os dejo unos calculos que habia hecho

2400 bps -----> 300bytes/s

25muestas/s* 12 ( 4 cabecera + 8 sensors ) ---> 300bytes/s

i aqui la base para que os hagais una idea

//Pins d'entrada analog

int analogInput1 = 0;
int analogInput2 = 1;
int analogInput3 = 2;
int analogInput4 = 3;
int analogInput5 = 4;
int analogInput6 = 5;
int analogInput7 = 6;
int analogInput8 = 7;


byte sensor1 = 0;
byte sensor2 = 0;
byte sensor3 = 0;
byte sensor4 = 0;
byte sensor5 = 0;
byte sensor6 = 0;
byte sensor7 = 0;
byte sensor8 = 0;


void setup(){

  pinMode(analogInput1, INPUT);
  pinMode(analogInput2, INPUT);
  pinMode(analogInput3, INPUT);
  pinMode(analogInput4, INPUT);
  pinMode(analogInput5, INPUT);
  pinMode(analogInput6, INPUT);
  pinMode(analogInput7, INPUT);
  pinMode(analogInput8, INPUT);
  
  Serial.begin(2400);
}

void loop(){

 sensor1 = analogRead(analogInput1); 
 sensor2 = analogRead(analogInput2);
 sensor3 = analogRead(analogInput3); 
 sensor4 = analogRead(analogInput4);
 sensor5 = analogRead(analogInput5); 
 sensor6 = analogRead(analogInput6);
 sensor7 = analogRead(analogInput7); 
 sensor8 = analogRead(analogInput8);

//Si fuera java lo que pretenderia hacer seria esto 
 while (true){
 Serial.write("****" + sensor1 + sensor2 + sensor3 + sensor4 + sensor5 + sensor6 + sensor7 + sensor8 );
}

// Pero como evidentemente esto no es java 

}

A ver si me podeis echar un cable Gracias !

P.d: Cualquier cosa que os pueda aclarar no dudeis en preguntar.

No se si he entendido bien tu problema. Pero creo que lo que te atasca es que no puedes poner el operador "+" dentro de los parametros del Serial.write.

¿Por que no haces 8 veces el Serial.Write?, una vez para cada entrada analógica.

Emisor

int analogInput1 = 0;
int analogInput2 = 1;
int analogInput3 = 2;
int analogInput4 = 3;
int analogInput5 = 4;
int analogInput6 = 5;
int analogInput7 = 6;
int analogInput8 = 7;


byte sensor1 = 0;
byte sensor2 = 0;
byte sensor3 = 0;
byte sensor4 = 0;
byte sensor5 = 0;
byte sensor6 = 0;
byte sensor7 = 0;
byte sensor8 = 0;

double cenv = 0;


void setup(){

  pinMode(analogInput1, INPUT);
  pinMode(analogInput2, INPUT);
  pinMode(analogInput3, INPUT);
  pinMode(analogInput4, INPUT);
  pinMode(analogInput5, INPUT);
  pinMode(analogInput6, INPUT);
  pinMode(analogInput7, INPUT);
  pinMode(analogInput8, INPUT);

  Serial.begin(2400);
}

void loop(){

 sensor1 = analogRead(analogInput1); 
 sensor2 = analogRead(analogInput2);
 sensor3 = analogRead(analogInput3); 
 sensor4 = analogRead(analogInput4);
 sensor5 = analogRead(analogInput5); 
 sensor6 = analogRead(analogInput6);
 sensor7 = analogRead(analogInput7); 
 sensor8 = analogRead(analogInput8);
 
 

   Serial.write("*");
   Serial.write("*");
   Serial.write("*");
   Serial.write("*");
   Serial.write(sensor1);
   Serial.write(sensor2);
   Serial.write(sensor3);
   Serial.write(sensor4);
   Serial.write(sensor5);
   Serial.write(sensor6);
   Serial.write(sensor7);
   Serial.write(sensor8);

 

}

Receptor

#include <SoftwareSerial.h>




#define rxPin 2
#define txPin 3

SoftwareSerial Serial2 =  SoftwareSerial(rxPin, txPin);


void setup(){

  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  
  Serial.begin(2400);
  Serial2.begin (2400);
 
}

void loop(){

  Serial.write(Serial2.read());
 
}

Si te refieres hacerlo asi tampoco me funciona :’(

A ver, yo he entendido con los problemas los tienes con el software, ¿te da errores de compilación?, ¿o compila y luego no hace lo que quieres?. Es que no concretas mucho el problema.

No, no me da ningun error al compilar, el problema esta en que no me envia datos, ( me fijo en el LED verde TX que no se enciende ) la radio la tengo conecad en el pin D1TX ( por ar mas datos )

Emisor

int analogInput1 = 0;
int analogInput2 = 1;
int analogInput3 = 2;
int analogInput4 = 3;
int analogInput5 = 4;
int analogInput6 = 5;
int analogInput7 = 6;
int analogInput8 = 7;


int sensor1 = 0;
int sensor2 = 0;
int sensor3 = 0;
int sensor4 = 0;
int sensor5 = 0;
int sensor6 = 0;
int sensor7 = 0;
int sensor8 = 0;
int head = 111;

void setup(){

  pinMode(analogInput1, INPUT);
  pinMode(analogInput2, INPUT);
  pinMode(analogInput3, INPUT);
  pinMode(analogInput4, INPUT);
  pinMode(analogInput5, INPUT);
  pinMode(analogInput6, INPUT);
  pinMode(analogInput7, INPUT);
  pinMode(analogInput8, INPUT);

  Serial.begin(2400);
  
  
}

void loop(){

 sensor1 = analogRead(analogInput1); 
 sensor2 = analogRead(analogInput2);
 sensor3 = analogRead(analogInput3); 
 sensor4 = analogRead(analogInput4);
 sensor5 = analogRead(analogInput5); 
 sensor6 = analogRead(analogInput6);
 sensor7 = analogRead(analogInput7); 
 sensor8 = analogRead(analogInput8);

   Serial.write(head);
   Serial.write(head);
   Serial.write(head);
   Serial.write(head);
   Serial.write(sensor1);
   Serial.write(sensor2);
   Serial.write(sensor3);
   Serial.write(sensor4);
   Serial.write(sensor5);
   Serial.write(sensor6);
   Serial.write(sensor7);
   Serial.write(sensor8);
 }

Receptor

#include <SoftwareSerial.h>


#define rxPin 2
#define txPin 3

SoftwareSerial Serial2 =  SoftwareSerial(rxPin, txPin);


void setup(){

  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  
  Serial.begin(2400);
  Serial2.begin (2400);
 
}

void loop(){

  Serial.write(Serial2.read());
 
}

Asi esta tal cual lo tengo

Saludos !

Yo diría que el código del emisor es correcto. A ver si fuera un problema de hadrware. Podrias poner una foto del montaje para que vieramos las conexiones.

¿Has probado a conectar con el terminal?, deberia salirte algo.

En principio el hardware lo he conectao directamente al PC via usb para testear todos los sensores i en principio funciona bien cuando leo el puerto serie.

Imagino que Vcc y GND están conectados al arduino, creo que si.

Lo que no acabo de entender es lo de que te funciona bien cuando lees el puerto serie. ¿Cuando ejecutas el código del emisor con el pc conectado te sale algo por el terminal?, ¿no decias que no escribia porque el led de tx no parpadeaba?.

¿Has conectado un cable como antena?, es que parece que ademas del emisor el cable esta conectado por el otro extremo a a algo?, ¿por qué?.

¿Por que no pruebas VirtualWire?.

El Vcc i el Gnd estan conectados al arduino.

El sistema vendria ser algo asi

Pc <— usb ( arduino) receptor <—emiosor (arduino)sensores

Cuando te decia que me funcionaba el sistema era cuando omitia el paso centrral es decir

Pc <—usb (arduino)sensores

asi me funciona.

Estoy utilizando Processing ( que me es mas facil, despues programar lo que voy a necesitar, ya que esta mas orientado al “disseño grafico”)

en cuando lo del cable como antena si, pero lo he quitado que viendo un doc, decia que no era necesaria ( y menos ahora con las distancias que estoy provando )

Conseguido !! La verdad es que debia ser alguna conexion floja o algo, por que es lo unico que he tocado.

Gracias por tu ayuda Javier :)

Estupendo :)

Ahora mismo estoy recibiendo por el puerto serie algo asi :

255 255 255 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 213 164 161 056 255 255 255 0 0 0 0 0 0 0 ....

Los tres 255 que me salen juntos serian mi cabecera, y los 8 ceros siguientes corresponde cada uno a los 8 sensores. El probelma es que de vez en cuando me sale un poco de "basura" que por otra parte ya me esperaba que saliera, el principal problema es como asigno cada uno de esos 8 ceros a una variable ?? demoemento el codigo que llevo escrito es este, que en principio tendria de funcionar, peroooo.... me lanza un error al compilarlo en el "return"

el error es el siguiente : Cannot find anything named sensor :'(

Como lo veis ?????

import processing.serial.*;

Serial myPort; 

void setup() {

  myPort = new Serial(this, Serial.list()[1], 2400); 
  
}

void sensor (int nsensor){
  int count = 0;

  while (myPort.available() > 0) {
    int inByte = myPort.read();
    if (inByte==255){
      count = count + 1;     
    }
    if ( count == 3 ) {      

      for(int i = 0; i == nsensor; i++) { 
        int sensor = myPort.read();
      } 

    }

    else{
      count = 0; 
    }
    //println(inByte);  
  }
  
  return sensor;
}



void draw() {

  int s1 = 1 ;
  int s2 = 2 ;
  int s3 = 3 ;
  int s4 = 4 ;
  int s5 = 5 ;
  int s6 = 6 ;
  int s7 = 7 ;
  int s8 = 8 ;
  

    int sensor1 = sensor (s1);
    int sensor2 = sensor (s2);
    int sensor3 = sensor (s3);
    int sensor4 = sensor (s4);
    int sensor5 = sensor (s5);
    int sensor6 = sensor (s6);
    int sensor7 = sensor (s7);
    int sensor8 = sensor (s8);
    

}

Es que la variable sensor esta fuera de ámbito en la linea del return.

Si declaras sensor junto a la declaración de count el ámbito de la variable será para toda la función.

Al final lo he echo de otra manera

import processing.serial.*;

Serial myPort;

void setup() {
  size(400, 200);
  myPort = new Serial(this, Serial.list()[1], 2400);
 


}

int[] sensor (){
  int count = 0;
  int [] sensors = new int [8];
  int oar = 1;
  //while (myPort.available() > 0) {
    int inByte = myPort.read();
    if (inByte==255){
      count = count + 1;    
    }
    if ( count == 3 ) {     
      while ( oar <= sensors.length) {
        sensors[oar] = myPort.read();
      }

    }
    else{
      count = 0;
    }
    //println(inByte); 
  //}

  return sensors;

}