Que hago mal??? Salida analogica Arduino.

El codigo:

byte incomingByte;

void setup() {
// set pins 2 through 13 as outputs:
pinMode(13, OUTPUT);
Serial.begin(9600);
}

void loop() {
// iterate over the pins:
if (Serial.available()) {

// da el valor al 'incomingByte' variable
incomingByte = Serial.read();

// escribe el valor en el pin 11
analogWrite(13, incomingByte);

Serial.print(incomingByte);

}
}

Le envio desde el serial port de la aplicacion por ejemplo un 200, y
el led se ilumina pero a baja intensidad, le envio un cero y no se
apaga ni se inmuta, no me pilla bien los valores... Un saludo y gracias ::slight_smile:

No he tenido tiempo de comprobartelo, pero quiza el problema es que estas mandando un tipo Byte. Si es como me imagino, un byte almacena 8 bits, y puede tomar valor de 0 a 256. La salida analogica varia entre 1 y 1024, por lo que vas a necesitar 10 bits (insuficiente con un unico byte) y quiza tengas que declarar un integer.

No ya lo probe como int... Y al menos a mi me hace exactamente lo mismo.... Un saludo :o

Pues no, una salida " analógica" tiene una definición en estos Atmel de un byte, es decir, de 0 a 255. ( Lo que tiene 10 bits de definición es una ENTRADA analogica).

Este programa lo tienes de ejemplo talmente, al menos en Arduino18, en " examples ", "communication ", "dimmer", que por cierto, ...no funciona!. Aparte de que no declara el led en el pim13, sino el otro,
cuando tu tecleas, como dices, 200, y lo "envias" a traves del puerto serie, este lo que hace es: enviar primero un 2...en Ascii, luego un 0, tamnbien en Ascii y claro, el otro 0, tambien en ascii. Necesitas una rutina que lea estos valores en ascii y los traslade a binario.

Bueno, aquí lo tienes. Elled va en el pin 9 que es una salida PWM. Basicamente el programa lo que hace es una lectura del teclado, convierte un valor ascii de 0 a 255 en su correspondiente binario, si te pasas de 255 se queda en esto, y el bucle para convertir el ascii en binario creo que se entiende a simple vista. Lo he comprobado con un led y finciona:

// ok funciona
byte i = 0;
byte matriz[3];
byte cifra;
int salida;
int ledPin = 9;
void setup()
{Serial.begin (9600);}
void loop ()
{
i=0;
while (Serial.available ())
{cifra= Serial.read();
cifra = cifra & 0x0F ;
matriz*= cifra ;*
i++ ;}
delay (10); // es muy importante

if (i>0)
{if (i>3)
{i=3;}
if (i==3){
salida = (matriz[0]*100)+(matriz[1]*10)+matriz[2];}
if (i==2){
salida =(matriz[0]*10)+matriz[1];}
if (i==1){
salida = (matriz[0]);}
if (salida>255)
{salida = 255;}
analogWrite(ledPin, salida);
}}
Saludos