receber um numero de 8 digitos pela serial ?????

Amigos esta eh pra quem ta a algum tempo mexendo q ao eh o meu caso!! Eu preciso receber um valor numerico de 8 digitos pela serial tentei receber em um array de char e depois converter para um valor numerico so q o valor convertido nao eh o mesmo por exemplo eu recebo 12345678 na varialvel char[9] so q quando eu converto int = int(char[9]) o valor recebido e so 52 um exemplo claro mas a ideia e q os valores se alteram na conversao e isso eh um problema pra mim !! quem puder ajudar agradeço!!! :'( :'( :'( :'(

O programa abaixo vai tentar converter para inteiro a string numérica enviada via serial. Quando for enviado um caracter CR, o programa imprime o valor armazenado.

getInt.cpp

/**
 *  getInt.cpp
 *  Converts numerical string into an integer
 *
 *  Author: Marcelo Shiniti Uchimura
 *  When:  Jan '09
 */
byte incomingByte = 0;  // for incoming serial data
int value = 0; // for storing the input decimal value

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();
    if(incomingByte == 13) {
      Serial.println();
      Serial.println(value, DEC);
      value = 0;
    }
    else
      value = value * 10 + incomingByte - 0x30;
  }
}

Pode ser usado a funcao atoi() tbm.

#include <WString.h>
#include <Servo.h> 
 
Servo myservo; 
     
 
int pos = 0;    // variable to store the servo position 
String str = String(5); 
boolean first_time=true;

void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
  Serial.begin(9600);
} 
 
 
void loop() 
{ 
  
    while(Serial.available()){
       //recebe dados da serial e armazena em uma string
       char c = Serial.read();
       str.append(c);
       first_time=true;

    }
    
  if(first_time){
    Serial.println(str); 
    //converte a string para inteiro
    pos = atoi(str);
    myservo.write(pos);
    delay(15);
    first_time=false;
    str="";
  }
  
 
}

Segundo a tabela ascii (padrão de caracteres utilizado), o valor correspondente aos numeros começam a partir de 0x30 = 0; 0x31 = 1; até 9.
Sendo assim, quando você recebe o caractér ‘9’, está recebendo 0x39.
Para converter para decimal, é só subtrair 0x30, como no exemplo citado pelo neuron. Porém, você deve fazer isso a cada posição da string em que estão os dados.
string[0], string[1], string[2], string[3] …

int i=0;
char dados[8];

for (i=0;i<8;i++)
{
     dados[i]=dados[i] - 0x30; //Converte da posição 0 até 7 
}

Não estou familiarizado com a função atoi(), mas parece que consegue conveter uma string. Caso não consiga converter uma string completa:

int i=0;
char dados[8];

for (i=0;i<8;i++)
{
     dados[i]=atoi(dados[i]);//Converte da posição 0 até 7 
}

Lembrando que se você tentar lar dados[7], estará lendo apenas a posição 7 da string. Quando você tentou ler char[9], recebeu o valor 0x34 = 52 em decimal.

Obs: se declarar um vetor ou string com 9 posições, elas serão de 0 a 8. Caso leia a posição 9, pode ter erro, ou ler um caracter aleatório.

Pessoal eu gostaria de saber como é que eu consigo fazer um programa em arduino com a finalidade em que eu carregue num switch e o servo rode 95 graus. É para eu fazer uma cancela automatica agradecia que me ajudasem que eu tou a começar a entrar em desespero. Cumprimentos