problema con analogwrite

buenas :smiley:
estoy haciendo un linker para conectar arduino con autoit, he creado las funciones basicas analogwrite, digitalwrite...etc para usarlas con autoit, pero la analogwrite no funciona!! [smiley=angry.gif] le envio un valor, i si el valor es mallor de 200 se enciende simplemente, i si es menor se apaga..

para enviarle los datos tiene que tener un formato
[valor]
ejemplo: d91
que lo que hace es digitalwrite al pin 9 i le da valor 1

aqui esta el code, la parte que falla es lo de //analogwrite.

int val = 0;
char valx = 0;
char pin = 0;
char serInString[30];
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  readSerialString(serInString);
  valx = serInString[0];
  pin = serInString[1];
  val = atoi(serInString+2);
  switch(pin)
  {
  case 'a':
  pin = 10;
  break;
  case 'b':
  pin = 11;
  break;
  case 'c':
  pin = 12;
  break;
  case 'd':
  pin = 13;
  break;
  default:
  pin = pin -'0';
  break;
  }
  if (valx == 'a')//analogread
      {
       pinMode(pin,INPUT);
       val = analogRead(pin);
       delay(50);
       Serial.print(val);
       kilall();
      }
  if (valx == 'b')//analogwrite
      {        
       pinMode(pin,OUTPUT);
       analogWrite(pin, val);
       Serial.println(val);
       kilall();
      }
  if (valx == 'c')//digitalread
      {
       pinMode(pin, INPUT);
       val = digitalRead(pin);
       Serial.print(val);
       kilall();
      }
  if (valx == 'd')//digitalwrite
      {
       pinMode(pin,OUTPUT);
       digitalWrite(pin,val);
       Serial.println(pin);
       kilall();
      }
      delay(50);
}

void kilall()
{
  valx = 0;
  pin = 0;
  val = 0;
  serInString[0] = 'r';
  Serial.flush();
}

void readSerialString (char *strArray) {
  int i = 0;
  if(!Serial.available()) {
    return;
  }
  while (Serial.available()) {
    strArray[i] = Serial.read();
    i++;
  }
  strArray[i] = 0;  // indicate end of read string
}

La función atoi, ¿que hace?, ¿pasar a decimal?, hay bastantes probabilidades de que el fallo esté ahí.
Prueba a meter en el código mensajes de depuración con salida en hexdecimal, para así poder distinguir un 1 decimal de uno ASCII y así poder vel los valores que hay en el arduino de 'pin', 'valx', etc...

Un saludo

atoi = ascii to integer. Es del mas puro C de Kernighan y Ritchie (Jesús que tiempos aquellos!!!)

buaa..
ni idea, no se que hacer... tengo que aprender mas c.. si alguien save alguna pagiina buena para aprender...?
i tu profenas no sabrias como arreglar esto?
aa i thx por las respuestas :wink: