Buenas tardes
Disculpen las molestias y las posibles faltas al reglamento del foro pues aún soy nuevo y un poco inexperto en Arduino , pero la verdad he investigado sobre el comando "sprintf(); y me he topado con un problema en la ejecución de un código para un proyecto personal que no sé cómo resolver.
necesito enviar una variable de 3 dígitos de manera que las unidades queden "001", los decimales "010" y las centésimas "100". Me refiero, los números menores a 100 quedan antecedidos por ceros.
para probar el envío de la variable y los ceros, he hecho este código en Arduino Uno (pero lo pienso pasar a un arduino NANO):
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11); //Pin 10 TX , Pin 11 RX connected to--> Bluetooth TX,RX
int val;//valor escrito en el puerto serial
const char MI= 'x'; //Marca Inicial para diferenciar los valores en el receptor
const char Mc= '0';//ceros que anteceden a los numeros menores de 100
char buffer[4];// Variable "buffer" que almacenara la variable procesada para enviarla por el bluetooth
void setup() {
Serial.begin(9600);
mySerial.begin (38400);
delay(1000);
Serial.println("digite el codigo");
Serial.println(" ");//texto de inicio
}
void loop() {
if (Serial.available()>0){
val = Serial.read();// lector del puerto serial
if (val<10){//condicional para unidades
sprintf(buffer,"%c%c%c%d",MI,Mc,Mc,val); // concadeno la "x" con dos "0" y el valor del Serial / "x001", "x002... "009".
mySerial.print(String(buffer));// envio por bluetooth la variable procesada
Serial.print("digito:");//escribo en el Serial para saber el digito enviado
Serial.print(String(buffer));//miro por el serial la variable procesada
Serial.println();//dejo un espacio
}
// repito la acción con pocos cambios para las demas condiciones.
else if(val>9&&val<100){
sprintf(buffer,"%c%c%d",MI,Mc,val);// concadeno la "x" con un solo "0" y el valor del Serial / "x010", "x011"... "099".
mySerial.print(String(buffer));
Serial.print("digito:");
Serial.print(String(buffer));
Serial.println();
}
else if(val>100){
sprintf(buffer,"%c%d",MI,val);// concadeno la "x" con el valor del Serial / "x100", "x101"... "x999".
mySerial.print(String(buffer));
Serial.print("digito:");
Serial.print(String(buffer));
Serial.println();
}
}
}
el problema es que cuando escribo algo en el Serial me manda 3 líneas (en vez de solo una) y me lee mal el valor escrito.
Por ejemplo: si escribo " 1 " me muestra lo siguiente:
1
digito:x049
digito:x013
digito:x010
en vez de solo "digito:x001". ¿Alguien me puede explicar por qué sucede esto y como lo puedo corregir?
Muchisimas gracias por su atención
manejo_por_serial_sprintf.ino (1.68 KB)