Go Down

Topic: Problema comunicación serial (Read 438 times) previous topic - next topic

Sutadasuto

¡Hola!

Tengo un problema desde hace tiempo que me ha obligado a siempre usar computadoras ajenas cuando hago proyectos que requieren de comunicación serial. Espero que alguien en la comunidad sepa decirme qué ocurre y, mejor aún, cómo arreglarlo.

Supongamos el siguiente programa sencillo:

int input;
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()>0){
input=Serial.read();
Serial.println(input);
}
}


Si en el monitor serial ingreso "a" (código ASCII 97), me regresa:

97
10

Si ingreso "b", me regresa:

98
10

En fin, el caso es que el monitor serial siempre regresa ese "10", no importa el programa que yo cree. Y como guarda ese valor de 10, no importa qué valor ingrese yo por comunicación serial, no puedo realizar ningún control.

Gracias por leer y espero que puedan ayudarme =D

curro92

#1
Nov 29, 2013, 05:19 am Last Edit: Nov 29, 2013, 05:21 am by curro92 Reason: 1
Hola,
Cuando escribes algo en el ordenador y das al 'intro' o 'return' estás poniendo una marca de fin de mensaje. Esa marca puede consistir en  un carácter (nueva línea=10, retorno de carro=13) )o los dos (13+10)
Si te fijas en la consola en la parte de abajo, junto a los baudios, tienes una ventanita donde se decide con qué terminación se manda un texto por serie:
- 'Nueva línea' (NL=10)
- 'Retorno de Carro' (CR=13)
- 'Ambos' (NL & CR=13+10)
- 'No hay fin de línea'
Parece que estás usando la opción 'Nueva línea'. Prueba con 'Retorno de carro', te saldrá el 13. Puedes usar la opción 'No hay fin de línea', y no te aparecerá ni el 10 ni el 13


Naruto128

todo lo que ingreses te va a tomar como caracteres,  el 10 es el salto de linea.
deberias especificar que tipo de data quieres leer.

aqui un ejemplo e como leer datos float


Code: [Select]

String readString="";
float n=10.3;
int led = 13;
   


void setup() {
Serial.begin(57600);
  pinMode(led, OUTPUT);    
       digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW

 }

void loop() {
        ReadPort();
 if(n==1){
        digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
        Serial.println(1);
 
  }else{
 
        digitalWrite(led, LOW);
        Serial.println(0);

  }
  delay(300);
 
}
 
 
  void ReadPort(){
   int index=0;
 while (Serial.available()) {
 
   delay(10);
  if (Serial.available() >0 ) {
      char c = Serial.read();  //gets one byte from serial buffer
      readString += c;
              index++; //makes the string readString
            }
             
 }

if (index >0) {  
   
        char carray[readString.length()+1];
            readString.toCharArray(carray, sizeof(carray));
            n = atof(carray); ////  N, DATA SEND
           readString="";
       
}
         
       
 
 
 
  }



Sutadasuto

Muchas gracias por sus respuestas, me han quitado un peso de encima ^^

Go Up