PDA

Visualizza la versione completa : [ARDUINO] Eseguire un interrupt per leggere dati da seriale


jamal87
10-09-2014, 14:56
Buongiorno,
stavo lavorando ad un progetto con un Arduino Mega ed ho incontrato tra gli altri un problema di utilizzo su un interrupt.
Nello specifico all'interno del loop ho delle istruzioni con le quali vado a fare la lettura dell'ora e della data dal mio DS1307 interrogandolo ogni secondo e andando a stampare su lcd.

Ora, il problema sorge quando nello stesso ciclo loop mi serve andare ad interrogare la seriale per vedere se mi arrivano dati in ingresso(nel mio caso dati inviati da una radio che poi parserò e utilizzerò in funzioni esterne al loop).
Se faccio queste due operazioni contemporaneamente nel loop risulta che i dati in ingresso sulla seriale vengono corrotti o arrivano troncati.

La soluzione logica che mi era venuta in mente era l'utilizzo di un interrupt per i dati seriali dato che l'ora può anche sparire da lcd anche per 2/3 secondi, non mi interessa, ma ho dei problemi visto che sembra l'interrupt non funzioni.

Ho inoltre letto che negli interrupt le comunicazioni seriali vengono scartate.
Qualche suggerimento??
Grazie in anticipo

torn24
12-09-2014, 07:07
E' impossibile darti una risposta, è anche impossibile da quello che hai scritto, attribuire il problema al codice su arduino, potrebbe essere attribuito al codice di trasmissione e o a problemi elettronici.


Se faccio queste due operazioni contemporaneamente nel loop risulta che i dati in ingresso sulla seriale vengono corrotti o arrivano troncati.

Sicuramente serial.read legge un byte, se devi ricevere più byte dovrai pensare ad un ciclo solo per la seriale, altrimenti ci sarà una"pausa" tra la lettura di un byte ed esecuzione di altro codice.

jamal87
12-09-2014, 09:24
Ho risolto con un while (Serial.available).......così facendo rimane nel ciclo fino a quando non termina la trasmissione seriale; per il mio progetto però sarebbe molto meglio utilizzare un interrupt
Non esistono interrupt che si attiva quando arriva una comunicazione seriale senza bisogno di dare come parametro un pin??

jamal87
15-09-2014, 09:31
Ho risolto con un while (Serial.available).......così facendo rimane nel ciclo fino a quando non termina la trasmissione seriale; per il mio progetto però sarebbe molto meglio utilizzare un interrupt
Non esistono interrupt che si attiva quando arriva una comunicazione seriale senza bisogno di dare come parametro un pin??


Ho risolto con un while (Serial.available).......così facendo rimane nel ciclo fino a quando non termina la trasmissione seriale; per il mio progetto però sarebbe molto meglio utilizzare un interrupt
Non esistono interrupt che si attiva quando arriva una comunicazione seriale senza bisogno di dare come parametro un pin??

jamal87
15-09-2014, 09:33
E' impossibile darti una risposta, è anche impossibile da quello che hai scritto, attribuire il problema al codice su arduino, potrebbe essere attribuito al codice di trasmissione e o a problemi elettronici.



Sicuramente serial.read legge un byte, se devi ricevere più byte dovrai pensare ad un ciclo solo per la seriale, altrimenti ci sarà una"pausa" tra la lettura di un byte ed esecuzione di altro codice.

Ho risolto con un while (Serial.available).......così facendo rimane nel ciclo fino a quando non termina la trasmissione seriale; per il mio progetto però sarebbe molto meglio utilizzare un interrupt
Non esistono interrupt che si attiva quando arriva una comunicazione seriale senza bisogno di dare come parametro un pin??

Loading