tengo una duda, no puedo introducir y guardar dos numeros desde el puerto serial de arduino, necesito guardar esos números para luego hacer operaciones matematicas con ellos el codigo que estoy utilizando es este:
char inc;
char ch;
int numero;
int num;
int sum;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
inc = Serial.read();
numero = inc - 48;
ch = Serial.read();
num =ch-48;
sum=numero+num;
Serial.println(numero);
Serial.println(num);
Serial.println(num);
}
}
al ejecutar el codigo por ejemplo introduciendo un 2 en el puerto serial me aparece:
2
-49
-49
cuando quiero que se pueda introducir primero un digito, se guarde, luego introducir otro dígito, se guarde y al final que me muestre la suma.
Hola.
En primer lugar, cuando pegues un código, primero pulsas el icono </> y después lo pegas entre las etiquetas code para que sea más fácil ver y copiar tu código.
Ahora al grano:
Tal y como tienes tu código, el loop se repite constantemente hasta que llega un dato por serial. Entonces entra en el if, lee el primer carácter, e inmediatamente intenta leer el segundo carácter, pues ahí ya no pones condición para que espere a que llegue algo por serial. Entonces, transcurrido el timeout, que suele ser un segundo, te lee un dato falso (-1). Lo que debes hacer es que tu código espere a que haya algo que leer:
int sum;
void setup() {
Serial.begin(9600);
}
void loop() {
while (!Serial.available() > 0); // Observa el ; al final es una instrución vacía, es decir, permanece bloqueado mientras no haya dato disponible
inc = Serial.read();
numero = inc - 48;
while (!Serial.available() > 0); // Aquí bloqueado mientras no haya dato por el puerto serie
ch = Serial.read();
num =ch-48;
sum=numero+num;
Serial.println(numero);
Serial.println(num);
Serial.println(num);
}
}
¿Viste que en la ventana donde inserté el código pone code [Select]? Si pinchas en Select seleccionas de una vez todo el código sin volverte loco con el ratón, además el código no incluirá símbolos raros que muchas veces aparecen si no lo pones entre etiquetas.
Continuamos:
El inconveniente de ambos códigos es que sólo puedes recibir números de un dígito. Para "construir" números de más dígitos deberías ir multiplicando por diez el dígito previo, y sumando el nuevo, hasta detectar que ha finalizado de recibir el número o sencillamente utilizar la instrucción Serial.parseInt.
char inc;
char ch;
int numero;
int num;
int sum;
void setup() {
Serial.begin(9600);
}
void loop() {
while (!Serial.available() > 0); // Aquí bloqueado mientras no haya dato por el puerto serie
inc = Serial.parseInt();
numero = inc - 48;
while (!Serial.available() > 0); // Aquí bloqueado mientras no haya dato por el puerto serie
ch = Serial.parseInt();
num =ch-48;
sum=numero+num;
Serial.println(numero);
Serial.println(num);
Serial.println(num);
}
}
Puedes separar tus números con comas, salto de línea, etc.