Go Down

Topic: RED 485 Arduino Mega maestro, 3 arduinos 1 Esclavos (AYUDA) (Read 1 time) previous topic - next topic

Hola, quisiera saber si alguien me puede ayudar, resulta que necesito leer 3 entradas análogas, una por cada arduino uno(esclavos), y mandarlas al arduino mega(maestro), para esto tengo 3 direcciones diferentes y le pido a cada esclavo por separado que me mande la lectura. Hasta ahora es muy simple el codigo, pero funciona para dos maestros y cuando conecto el tercero, no se que sucede, me salen 3 valores iguales en este caso 255;255;255.

este es el codigo del maestro

Code: [Select]
int dato1=0;
byte dato;
int dato2=0;
int dato3=0;
int pinCONTROL=2;
int repeticiones=0;

void setup()
{
  Serial1.begin(9600);
  Serial.begin(9600);
  pinMode(pinCONTROL,OUTPUT);
}
void loop()
{

        if (repeticiones == 0)
        {
        dato=0;
        dato1=0;
        digitalWrite(pinCONTROL,HIGH);
        Serial1.write(5);
        delay(100);
        digitalWrite(pinCONTROL,LOW);
        delay(500);   
        dato=Serial1.read();
        while(dato==0)
        {
          dato=Serial1.read();
        }
        dato1=dato;
        Serial.println(dato);
        repeticiones++;
        } 

       
       
        if (repeticiones == 1)
        {
        dato=0;
        dato2=0;
        digitalWrite(pinCONTROL,HIGH);
        Serial1.write(6);
        delay(100);
        digitalWrite(pinCONTROL,LOW); 
        delay(500);
        dato=Serial1.read();
        while(dato==0)
        {
          dato=Serial1.read();
        }
        dato2=dato;
        Serial.println(dato);
        repeticiones++;
        }
       
       
       
        if (repeticiones == 2)
        {
        dato=0;
        dato3=0;
        digitalWrite(pinCONTROL,HIGH);
        Serial1.write(7);
        delay(100);
        digitalWrite(pinCONTROL,LOW);
        delay(500); 
        dato=Serial1.read();
        while(dato==0)
        {
          dato=Serial1.read();
        }
        dato3=dato;
        Serial.println(dato);
        repeticiones++;
        }
       
        if (repeticiones == 3)
        {
        Serial.print(dato1);
        Serial.print(';');
        Serial.print(dato2);
        Serial.print(';');
        Serial.println(dato3);
        repeticiones++;
        }       
}


Este es el codigo del esclavo

Code: [Select]

int pinCONTROL=2;
int val;
int cont;
int dat=0;

void setup()
{
pinMode(pinCONTROL,OUTPUT);
digitalWrite(pinCONTROL,LOW);
Serial.begin(9600);
}


void loop()
{
 
  if (Serial.available())
  {
    val = Serial.read();
    //Serial.println(val);
    delay(100);
    cont=0;
  }
  if(val==5 && cont<1)//direccion del esclavo
  {
    digitalWrite(pinCONTROL,HIGH);
    dat= analogRead(A0);
    Serial.write(dat);
    cont++;
    delay(100);
    digitalWrite(pinCONTROL,LOW);
  }

}


Gracias!


Heke


que protocolo estas usando???


Esta usando el RS485, mira el titulo del post...

Me parece recordar que IgorR estuvo peleando con el RS485 incluso creo que hizo una libreria para RS485 pero no se si la licencio como open.

Yo tambien estoy empezando ahora con este protocolo y estoy recopilando informacion, pero recien acabo de empezar, te dejo este link que he encontrado a ver si te ayuda, en tanto esperaremos si algun compañero puede ampliar algo.

http://playground.arduino.cc/Code/ModbusMaster

Un saludo.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Go Up