PWM y Serial

Hola,

Hace unos dias estoy buscando la manera de hacer que, escribiendo un valor entre 0 y 255, un led brille con esa intensidad usando modulacion de pulsos.

Mi GRAN problema, es que no se como capturar un valor como 255 del Serial.read().

Probe usar Serial.available, pero no lo consigo, tal vez ni siquiera sea por ahi que esta la solucion. Solamente consigo que cargue algunos datos y me empieze a "escupir" los datos de a 1 (en ascci).

Cualquier ayuda sera agradecida

Slds Gonzalo

Dejo una posible solucion, no es la que mas me fascina, si alguien tiene otra me dice.

(La implemente para indicar los grados de un servo)

#include <Servo.h>
int contador = 0 ;
char cadena[2000];
Servo myservo;

int pos = 0;

char val [10];
int index;

void setup()
{
Serial.begin(9600);
index = 0;
myservo.attach(9);
}

void loop()
{char buffer[4];
if ( Serial.available() == 3 )
{
buffer[0] = Serial.read();
buffer[1] = Serial.read();
buffer[2] = Serial.read();
buffer[3] = ‘\0’;

Serial.flush ();
pos = atoi(buffer);
Serial.println ( pos);
}

myservo.write (pos);
delay (5);

}

lo que pasa que cuando escribes por el serial monitor te toma como caracteres y no numeros.es decir
por ejemplo s escribes 123, y te toma como 1,2,3, caracteres. mas abajo mi solucion. sirve tambien para numeros float

#include <Servo.h> 
String readString="";
float n;
Servo myservo;  
void setup() 
{ 
  Serial.begin(9600); 
   myservo.attach(9);
  
} 



void loop() 
{ 
 
         int index=0;
	  while (Serial.available()) {
	  
	    delay(10);
	    if (Serial.available() >0 ) {
	    char c = Serial.read();  //gets one byte from serial buffer
	    readString += c;
            index++; //makes the string readString
                    
             }
	  }

	if (index >0) {   
          

        char carray[readString.length()+1];
         readString.toCharArray(carray, sizeof(carray));
       
	n = atof(carray);
        Serial.print("n=" );
        Serial.println(n );
	//myservo.write(n);
        myservo.write (n);
        delay (5);
	readString="";
        
	}
  
  
  
}