Arduino PWM (salida analógicas)

Hola a todos, tengo un problema con las salidas analógicas de arduino Diecimila, y es que cada vez que intento encender un led progresivamente o no se enciende del todo, o ni siquiera enciende, o se encienden 2 o 3 leds a la vez.
Aquí un ejemplo del código que me hice para Arduino:

int PinUno = 3; // Pin 3 de la tarjeta
int PinDos = 5; // Pin 5 de la tarjeta
int PinTres = 6; // Pin 5 de la tarjeta
int PinCuatro = 9; //Pin 5 de la tarjeta
int valor = 0; //valor para los pines
int EstadoEntrada= 0; // Dato de entrada desde el serial.

void setup() {
Serial.begin(9600);
}

void loop() {
if(Serial.available()>0){ //Si serial esta disponible...
EstadoEntrada = Serial.read();
if(EstadoEntrada == 0){ //Si lo que llega desde el serial es un 0
if(valor<256){ // Si valor es menor que 256
analogWrite(PinUno,valor);
valor++;
}
analogWrite(PinDos,0);
analogWrite(PinTres,0);
analogWrite(PinCuatro,0);

}

if(EstadoEntrada == 1){
if (valor < 256){
valor++;
analogWrite(PinDos,valor);
}
analogWrite(PinUno,0);
analogWrite(PinTres,0);
analogWrite(PinCuatro,0);
valor = 0;
}

if(EstadoEntrada == 2){
if(valor < 256){
valor++;
analogWrite(PinTres,valor);
}
analogWrite(PinUno,0);
analogWrite(PinDos,0);
analogWrite(PinCuatro,0);
valor = 0;
}

if(EstadoEntrada == 3){
if(valor < 256){
valor++;
analogWrite(PinCuatro,valor);
}
analogWrite(PinUno,0);
analogWrite(PinDos,0);
analogWrite(PinCuatro,0);
valor = 0;
}
}

Desde Puredata le mando al objeto comport 1, 2 o 3 por diferentes mensajes:

[1] [2] [3]

[comport 3 9600]

¿Que puede ser?, ¿Son las conexiones internas de la arduino?
Porque estoy tambien ocurre con el Arduino-test.pd de Hans-Christoph Steiner

Gracias y Saludos a todos!!

no hace falta poner en el setup los leds como salidas digitales con el pinmode?

salu2

En realidad no ya que la función analogWrite ya lo hace por nosotros

void analogWrite(uint8_t pin, int val)
{
      // We need to make sure the PWM output is enabled for those pins
      // that support it, as we turn it off when digitally reading or
      // writing with them.  Also, make sure the pin is in output mode
      // for consistenty with Wiring, which doesn't require a pinMode
      // call for the analog output pins.
      pinMode(pin, OUTPUT);

Ignoro como funciona PureData pero si funciona como un terminal si tu mandas un 1, 2 ó 3 ASCII tu programa no funcionará ya que en realidad espera un 1, 2 ó 3 en decimal. Dicho de otra manera, si pulsas la tecla 1 no envías un 1, envías el número 49 que es el que corresponde a dicha tecla según la tabla ASCII.

la foma de solucionar esto es poner:

if(EstadoEntrada == '1'){

No sé si este es el único problema ya que no lo he mirado más a fondo. En cualquier caso yo te recomendaría que probases primero con un ejemplo más sencillo para entender mejor la dinámica del funcionamiento.

Un saludo:

Eduardo

Hola complubot,
me funciona bien como lo tengo, el problema es como si fuera de conexión, cuando quiero encender el led 5 (pwm) no se enciende totalmente sino que se queda a medias, sin embargo los demás si encienden en su totalidad.
Se iluminan todos totalmente menos el pin 5 y el pin 6.

__________________________________________________-

Efectivamente como dice complubot no hace falta declarar el pin que utilices como salida al utilizar analogWrite, Outl4w

Saludos!