Pages: [1]   Go Down
Author Topic: (SOLUCIONADO)lecturas raras por puerto serie  (Read 801 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola de nuevo, a ver quien le echa coj... y me cuenta que me sale aqui que estoy volviendome loco. Más que solventar el problema, me gustaria si puede ser que me expliqueis que es lo que pasa. os cuento el problema, tengo estos codigos, mitad copiados mitad adaptados (primer problema... smiley-lol) con los que he conseguido comunicar dos placas, y al principio me sale unas lecturas logicas pero luego se vuelven locas las placas y me sale lo que les apetece, os coloco los codigos y las lecturas por cierto es para controlar un robot con dos joystick, uno para motores( puente H) y un pan tilt, por si algun alma caritativa tiene tirados un par de codigos para pasar  smiley-grin smiley-grin smiley-grin smiley-grin :
TRANSMISOR (solo pongo un trozo que es un ladrillo)
Code:
val0 = map(analogRead(0), 0, 1023, 250, 0);  
  val1 = map(analogRead(1), 0, 1023, 250, 0);
  val2 = map(analogRead(2), 0, 1023, 250, 0);
  val3 = map(analogRead(3), 0, 1023, 250, 0);
  
  // send the values to the serial port before sync value
  {Serial.print(255, BYTE);  // ================ SYNC
  Serial.print(val0, BYTE);} // X Left - X 0
  {Serial.print(254, BYTE);  // ================ SYNC
  Serial.print(val1, BYTE);} // Y Left - Y 1
  {Serial.print(253, BYTE);  // ================ SYNC
  Serial.print(val2, BYTE);} // X Right - X 2
  {Serial.print(252, BYTE);  // ================ SYNC
  Serial.print(val3, BYTE);} // Y Right - Y 3

RECEPTOR
Code:
void loop() {
  
   // read the serial port
   // see what is the SYNC value and then
   // assign the next value to the sensor variable
  
   if (Serial.available()>1) {
      incomingByte = Serial.read();
      
     Serial.print(int(incomingByte));
      
      // X Left - X 0
      if ((int(incomingByte) == 255)) {  
        sensor0 = Serial.read();
        Serial.print("    Sensor 0 = ");
        Serial.println(int(sensor0));              
      }
      
      // Y Left - Y 1
      if ((int(incomingByte) == 254)) {
        sensor1 = Serial.read();
        Serial.print("    Sensor 1 = ");
        Serial.println(int(sensor1));        
      }

      // X Right - X 2
      if ((int(incomingByte) == 253)) {
        sensor2 = Serial.read();
        Serial.print("    Sensor 2 = ");
        Serial.println(int(sensor2));              
      }
      
      // Y Right - Y 3
      if ((int(incomingByte) == 252)) {
        sensor3 = Serial.read();
        Serial.print("    Sensor 3 = ");
        Serial.println(int(sensor3));        
      }
   }
  
   // after reading all the incoming values
   // lets make the robot move
  
   // SENSOR 1 ---- LEFT MOTOR
  

Y LAS LECTURAS QUE APARECEN EN EL SERIAL DEL RECEPTOR
Code:
255    Sensor 0 = 127
254    Sensor 1 = 123
253    Sensor 2 = 123
252    Sensor 3 = 125
255    Sensor 0 = 127
254    Sensor 1 = 123
253    Sensor 2 = 123
252    Sensor 3 = 125
255    Sensor 0 = 127
254    Sensor 1 = 123
253    Sensor 2 = 123
252    Sensor 3 = 125
255    Sensor 0 = 127
254    Sensor 1 = 123
253    Sensor 2 = 123
252    Sensor 3 = 125
255    Sensor 0 = 127
254    Sensor 1 = 123
253    Sensor 2 = 123
252    Sensor 3 = 255
127255    Sensor 0 = 127
255    Sensor 0 = 127
255    Sensor 0 = 127
10255    Sensor 0 = 255
127255    Sensor 0 = 127
255    Sensor 0 = 127
255    Sensor 0 = 127
255    Sensor 0 = 127
123253    Sensor 2 = 254
123127254    Sensor 1 = 255
127127254    Sensor 1 = 125
255    Sensor 0 = 125
255    Sensor 0 = 252
125252    Sensor 3 = 125
123252    Sensor 3 = 253
123253    Sensor 2 = 123
12550125255    Sensor 0 = 123



muchas gracias...
« Last Edit: March 05, 2012, 11:20:40 am by chirver » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A mi me pasaba algo parecido, prueba a poner en pequeño delay de 10 ms. despues de Serial.print
Logged

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tal vez el transmisor esté enviando datos a más velocidad que los puede procesar el receptor. Cada dato recibido imprimes "255    Sensor 0 = 127" eso son más bytes (18) que lo que está enviando el transmisor que sólo envía 2 bytes. Si el programa del loop en transmisor no tiene líneas de código que le haga emplear tiempos de ciclo mayores, al cabo de un tiempo se llena el buffer del receptor y empezará a dar resultados extraños. Haz que el transmisor envíe los datos cada X milisegundos y que ese tiempo sea mayor que el tiempo del ciclo del receptor.
Logged


Zaragoza
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A mí también me pasaba al comunicar dos placas que al principio parecía ir bien y luego se volvía loco. Lo que me pasaba es que saturaba los buffers del micro. Normalmente se soluciona poniendo un delay o cambiando la velocidad de comunicación. Un saludo.  smiley-wink
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

voy a probar muchas gracias
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

al final con un pequeño delay, en el transmisor fué suficiente, aunque de vez en cuando sale un 32 en el sensor 0, una cosa muuuuuuuuuuu rara pero que de momento puede valer, si averiguo por que pasa esto lo posteo. un saludo y gracias otra vez
Logged

Pages: [1]   Go Up
Jump to: