Pages: [1]   Go Down
Author Topic: avanzando con el arduino, interrupcion puerto serie  (Read 1365 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Madrid
Offline Offline
Sr. Member
****
Karma: 5
Posts: 481
Life isn't about finding yourself, life is about creating yourself!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset


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

Code:
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)

        }
}
Logged

Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Madrid
Offline Offline
Sr. Member
****
Karma: 5
Posts: 481
Life isn't about finding yourself, life is about creating yourself!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

...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:
http://real2electronics.blogspot.com.es/2011/01/timer-2.html
« Last Edit: November 07, 2012, 02:07:27 pm by yOPERO » Logged

Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mil gracias lo miro todo
Logged

Pages: [1]   Go Up
Jump to: