Hola a todos!
Llevo un tiempo trabajando con Arduino, programando distintos componentes. Pero hay una cosa que nunca me había dado por hacer, y era utilizar únicamente el puerto serie, por ejemplo, para hacer una calculadora software. Este ejemplo lo he hecho sin problemas usando un compilador de C y utilizando la función scanf() para obtener el dato del teclado y asignarlo a una variable de esta forma:
variable = scanf().
Cuando utilizo esta función en C, el programa espera a que yo escriba el dato necesario y que pulse ENTER. Después, continúa con el programa.
El problema que estoy teniendo aquí, es que no consigo hacer que el programa espere a que yo introduzca el valor, sigue con el bucle una y otra vez, y no sé cómo hacer que espere a que le ponga datos por teclado. Os pongo el sketch que estoy programando:
/*
* Se va a crear un programa que funcione como una calculadora. Tendrá las
* opciones estándar de sumar, restar, multiplicar y dividir. Se utilizarán
* algunas de las estructuras estudiadas anteriormente para mejorar su comprensión
* y valores enteros para realizar dichas operaciones
*
* Autor: Daniel Lozano Equisoain
* Fecha: 28/07/2016
*
*/
void setup() {
// se configura el puerto serie para trabajar a 9600 bps
Serial.begin(9600);
}
void loop() {
//Inicializo las variables
int operando1 = 0, operando2 = 0, operacion = 0;
float resultado = 0;
//Se introducen los números con los que queremos operar
Serial.println("***** Bienvenido a tu calculadora personal de números enteros *****");
Serial.println("Introduce los valores para operar:");
Serial.println("Operando 1:");
if(Serial.available() > 0){
operando1 = Serial.read();
}
Serial.println("Operando 2:");
if(Serial.available() > 0){
operando2 = Serial.read();
}
//Se imprimen las opciones con las que se puede operar y se obtiene la opción con la instrucción Serial.read()
Serial.println("Selecciona la operación a realizar:");
Serial.println("1) Sumar");
Serial.println("2) Restar");
Serial.println("3) Multiplicar");
Serial.println("4) Dividir");
Serial.println("Opción: ");
if(Serial.available() > 0){
operacion = Serial.read();
}
//En función de la opción seleccionada, se realiza una de las siguientes acciones
switch (operacion){
case '1': resultado = operando1 + operando2;
break;
case '2': resultado = operando1 - operando2;
break;
case '3': resultado = operando1 * operando2;
break;
case '4': if (operando2 = 0){
Serial.println("No se puede realizar la división con 0 como divisor");
break;
}
else{
resultado = operando1 / operando2;
break;
}
}
//Se imprime el resultado final
Serial.print("Resultado final = ");
Serial.println(resultado);
}
Como veis, es una calculadora hecha a lo bruto, simplemente por ver si consigo hacer funcionar esto en el terminal de Arduino.
He visto en el manual de Arduino que la instrucción if(Serial.available() > 0) se encarga de hacer que el código espere a que yo introduzca o los operandos o la operación, pero ná de ná...
Lo que obtengo son los println() una y otra vez, no se para. ¿Estoy haciendo algo mal? (Muy probablemente..)
He visto ejemplos y códigos en otros foros, pero suelen ser más complejos, no llegan a algo tan básico como esto que estoy comentando de hacer una parada esperando a que se le introduzca algo por teclado.
He compilado para ver cómo funcionaba el código que Arduino pone en su manual, en concreto este:
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}
Pero cuando pongo 5 y le doy a ENTER, en vez de devolverme "I received: 5", recibo esto:
I received: 53
I received: 13
I received: 10
...Todo de golpe...
Os agradecería cualquier tipo de ayuda. Que me salgan mal cosas tan básicas me trae por el camino de la amargura...
Muchas gracias a todos!