Una duda mas, a ver, he leido que el arduino tiene por defecto un buffer de 64 bytes de lectura del puerto serie, que la llegada de un dato va llenando el buffer.
A ver lo que yo quiero hacer es que solo llegue un bye cuando yo lo envie desde el terminal COM y este interrumpa el programa para hacer ese dato igual a una variable, al parecer el terminal COM va mandando caracter Nulo
Me explico mejor, variar una variable como "velocidad" introduciendo caracteres del 0 al 9 en el terminal COM y que eso interrumpa el bucle Loop variando el valor de la variable cada vez que pulse un caracter del 0 al 9 en el teclado del terminal Com y si no pulso nada que el valor continue igual.
Si incluyo Serial.read() en el loop va leyendo a cada momento nulos, con la consecuente perdida de tiempos ademas de que va llenando el buffer y si hay una rutina de tiempos en el loop como delay(), no se ejecuta interrupcion alguna sino que se llena el hasta rebosar el buffer .
Como puedo hacer que eso sea como yo quiero? Algun ejemplo?
No veo ningun ejemplo sobre interrupciones mas que las de los pines 2 y 3.
Gracias
No te puedo ayudar mucho, pero creo que para hacer eso hay que mirarse el datasheet del micro (atmega 328p-pu). Suele ser tema de registros y flags, por lo que aunque no suele ser muy complicado hace falta descifrarlo. Haber si alguien que lo haya trabajado puede comentarlo. Salu2
algec:
Si incluyo Serial.read() en el loop va leyendo a cada momento nulos, con la consecuente perdida de tiempos ademas de que va llenando el buffer
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {
// send data only when you receive data:
-------->>>>>if (Serial.available() > 0) <<<<-------------Usa esto para leer solo cuando se reciba algo
// read the incoming byte:
incomingByte = Serial.read();
// y luego switch (incomingByte)
}
}
...y para llamar un ISR (interrupt service routine) vía software usa esta librería:
http://code.google.com/p/arduino-pinchangeint/
Aunque yo te aconsejo realizar tu programa usando "ticks" creados por uno de los timers:
Mil gracias lo miro todo