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 :
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.
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