Hola a todos de nuevo. Un saludo.
Vuelvo a estar en un pequeño atasco, y necesitaria de vuestra ayuda.
El tema es la recepcion de datos desde PC. Primeramente enviava un solo caracter desde el PC al Arduino. Sin ningún problema.
Los datos que enviava era un solo carácter que recibía en arduino como ASCII de esta manera (muy simplificado ) :
int valorPC = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
valorPC=Serial.read();
delay(20);
//leePC();
}
}
void leePC(){
switch (valorPC) {
case 49:
//funcion1();
break;
case 71:
//funcion2();
break;
}
}
El caso se me complicó cuando tenía que enviar números de mas de 2 dígitos, además de caracteres o palabras.
Pero adapté un par de formas que vi en internet:
La primera de ellas usa una matriz donde va almacenando los caracteres que van llegando uno tras otro, y saca el string conjunto como palabra o numero.
Si el valor es numérico opera con él, si es palabra, el valor numérico es 0 y luego intento reconocer que carácter es.
char palabra[10];
byte lugar=0; //Variable para cambiar la posición de los caracteres del array
int valorNew; //Variable del valor entero
void loop(){
if(Serial.available() > 0) {
memset(palabra, 0,sizeof(palabra));
while(Serial.available()>0) {
delay(10);
palabra[lugar]=Serial.read();
Serial.println(palabra[lugar]);
lugar++;
}
valorNew=atoi(palabra);
if(valorNew>0){
Serial.println(valorNew*100);
}
else if(valorNew == 0){
Serial.println("valor 0");
Serial.println(palabra);
if (palabra == "s"){
Serial.println("Ha entendido el caracter");
}
}
lugar=0;
}
}
El segundo modo es algo parecido, pero sin usar matriz, sino directamente una variable tipo string
void loop(){
if (Serial.available() > 0) {
delay(10);
String palabra = "";
while (Serial.available() > 0) {
palabra += (char)Serial.read();
}
int num = palabra.toInt();
if(num<1){
Serial.println(palabra);
if (palabra == "s"){
Serial.println("ha reconocido el carácter");
}
}
else if(num>0){
Serial.println(num*100);
}
}
}
En ambos casos, se reconoce bien el valor numérico y tambien muestra en monitor el carácter "s", pero no lo reconoce en el if concretamente como s, (pero si como no numérico porque entra en el if num<1). He probado a ponerlo como string ("...") ni como char('...')
También he probado a usar el valor palabra[1], como primer carácter ('s') de la variable palabra, pero sin resultados.
He usado el switch .... case "s" en lugar de if(...), pero tampoco he obtenido resultados.
Seguro que hay algo en las variables que estoy haciendo mal, pero no atino a descrubrirlo. Estoy hecho un lio y no consigo salir.
Resumiendo, necesito reconocer y diferenciar lo que recibe del PC: un número de varias cifras, o una letra/palabra . Según sea el valor numérico o la distinta letra/palabra, hará una funcion u otra.
Ayuda porfa. Gracias.