Enviar un numero largo y recibirlo en decimal en Arduino [SOLUCIONADO]

Hola a todos, soy nuevo en Arduino y por más que he buscado no encuentro la solución, necesito enviar un numero de 6 caracteres y recibirlo en decimal en arduino, en encontrado este ejemplo que es justo lo que estoy buscando pero cuando le pongo mas de 5 caracteres falla. Si alguien sabe que ocurre u que debo hacer estaría muy agradecido. Un saludo.

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);
  }
}

Ejemplo del fallo:

-Escribo en el monitor ‘12345’ y me devuelve ‘El numero que has escrito es 12345’

-Por el contrario pongo ‘123456’ y me devuelve ‘El numero que has escrito es -7616’

---- SOLUCION --------------------------

Como bien me aconsejo ‘noter’ más abajo, el problema era que estaba mandando caracteres ascii (quien quiera ver el porque le remito a esta web que lo explican muy bienhttp://www.baldengineer.com/blog/2012/07/30/arduino-multi-digit-integers/).

El código para pasar cualquier digito es este, que nos devolverá después de pulsar ‘n’ el número enviado.

void setup() {
  Serial.begin(9600);
}
 
unsigned long integerValue=0;  // Valor máximo 65535 *//Modificada a long para que pueda albergar más números
char incomingByte;
 
void loop() {
  if (Serial.available() > 0) {   // Escuchando datos
    integerValue = 0;         // Limpiamos la variable (que ya no es integer)
    while(1) {            // blucle para enviar al pulsar 'n'
      incomingByte = Serial.read();
      if (incomingByte == 'n') break;   // Sale del bucle while(1), cuando recibe 'n'
      if (incomingByte == -1) continue;  // Si no hay ningún carácter en buffer read() devuelve -1
      integerValue *= 10;  // desplaza a la izquierda una posición decimal
      // Convierte de Ascii a Entero, lo agregamos y volvemos a desplazar
      integerValue = ((incomingByte - 48) + integerValue);
    }
    Serial.println(integerValue);   // Lo imprimimos para verlo. :)
  }
}

Yo necesitaba dicho código porque desde un programa externo y utilizando un emisor RF 433Mhz quería enviar números incrementándolos así, para encontrar así el código que active unos receptores muy antiguos que tengo, http://www.made-in-china.com/showroom/silviachina/product-detailWMvJSnmTVQcD/China-Remote-Control-Sockets-RCS-K01-RCT-01-.html.

Y funcionar funciona pero me esta costando encontrarlo por este método ‘BruteForce’ supongo. El caso es que he conseguido encender todos los receptores a la vez con los códigos (170600 - 183700 - 188000) pero ni se como apagarlos, ni como encerderlos de uno en uno. Estoy cambiando el Periodo de 350 a 290. Sigo en ello…

Hola.
Vaticino que vas a tener ese problema justo cuando el número sea mayor que 32767. ¿Te da eso alguna pista?

Por si acaso, te lo digo, una variable tipo int puede almacenar enteros entre -32768 y 32767, una unsigned int, entre 0 y 65535. Prueba a utilizar long o unsigned long si no vas a usar números negativos.
Saludos.

Gracias! tan sencillo como eso ‘variable a long’, a veces uno busca la solución en lo más complicado y al final resulta que es una simple variable, no se como no lo vi antes, gracias de nuevo.
Comparto un código más optimizado para el que quiera usarlo no traste tanto tiempo como yo.