int i = 0; //variable de acarreo, utilizada con el array
int digitos = 0; //número de dígitos del número escrito
int numero = 0; //el número que hemos escrito
int exponente = 0; //el exponente al que se elevarán los dígitos
const int maxDigitos = 10; //Máximo de dígitos del número
int num[maxDigitos]; //array con los dígitos de nuestro número
void setup(){
Serial.begin(9600); //Iniciamos el Serial
}
void loop(){
digitos = 0;
numero = 0;
/*Primero, se comprueba que el Serial esté disponible. Si es así,
al enviar un número al Arduino desde el ordenador, se almacenarán
los dígitos individuales en las variables num[]. Además, muestra el
valor de los dígitos en el ordenador.
Hay que restar 48, ya que los números son enviados en formato ASCII
*/
if (Serial.available() > 0){
for (i = 0; i < maxDigitos; i++){
num[i] = Serial.read();
num[i] = num[i] - 48;
Serial.print(i);
Serial.print(" = ");
Serial.println(num[i]);
}
/*Determinamos los dígitos del número. En todas las variables
del array se almacena información, siendo un -49 si no contiene
un número. Por tanto, se cuentan las variables num[] con contenido
diferente de -49, y se pasa el resultado a la variable digitos*/
for (i = 0; i < maxDigitos; i++){
if (num[i] != -49){
digitos++;
}
}
Serial.print("digitos = ");
Serial.println(digitos);
/*En esta parte del programa se toman los dígitos por separado, y,
en función de su posición (unidades, decenas, centenas...) son
elevados a un exponente determinado por el número de dígitos
*/
for (i = 0; i < maxDigitos; i++){
if (i < digitos){
exponente = digitos - 1;
exponente = exponente - i;
numero = numero + (num[i] * pow(10, exponente));
}
}
/*Por un motivo que no entiendo, cuando los números son de 3 dígitos
o más, se le resta 1 a las unidades. Después de corregir esto último
se muestra el número
*/
if (digitos >= 3)
numero++;
Serial.print("El numero que has escrito es ");
Serial.println(numero);
}
}