Go Down

Topic: intterupt in arduino (Read 484 times) previous topic - next topic

fra9962

Salve,
devo svolgere un progetto per l' università con arduino :D volevo sapere se era possibile realizzare un interrupt per la comunicazione seriale .
Mi spiego meglio, il mio arduino salverà dei dati nella propria memoria a lungo periodo e nel caso in cui venga collegato tramite connessione seriale deve interrompere subito quello che sta facendo e inviare i dati salvati prima al seriale.

Qualcuno potrebbe aiutarmi ? :) 

Grazie in anticipo a tutti ;)

Silente

La seriale nel momento in cui viene attaccata resetta Arduino. Quindi puoi mettere la parte che invia su seriale nella setup()

uwefed

La seriale nel momento in cui viene attaccata resetta Arduino. Quindi puoi mettere la parte che invia su seriale nella setup()
No; il terminale dell' IDE quando viene aperto resetta l'arduino connesso.
Ciao Uwe

torn24

Non credo sia possibile ma credo che non sia necessario.

Se ad esempio abbiamo connessione, una comunicazione via software, all'avvio del software possiamo trasmettere un carattere di comando, che ricevuto da arduino fa si che si avvii una funzione di trasmissione dati.

Se invece vogliamo che la comunicazioni inizi dopo un collegamento hardware "collegamento di un cavo", possiamo in vari modi agire su un pin arduino, e in base al valore del pin iniziare la trasmissione sulla seriale.


Per cui sia per una connessione software, sia per una connessione hardware, ci sono soluzioni alternative.

Standardoil

l'idea non è nianche mica male: la connessione seriale resetta arduino, questo è positivo (certo)
parimenti certo è che la setup viene eseguita immediatamete diopo il reset
attacco il cavo usb e comincio aricevere dalla setup, sembra una cosa possibile....
UWE perchè secondo te non va? non capisco
Prima legge di Nelson sugli studenti
per colpa di qualcuno non si fa credito a nessuno
se sei uno studente, diplomando o laureando
NON riceverai risposta da me, lamentati con i tuoi colleghi

Claudio_FF

#5
Apr 21, 2018, 09:05 am Last Edit: Apr 21, 2018, 09:09 am by Claudio_FF
Quote from: Standardoil
UWE perchè secondo te non va? non capisco
Perché magari con l'autoreset brutale non può riprendere/continuare quello che stava facendo.

Ma basta inibire l'autoreset con il solito accrocco (leggasi condensatore o resistenza a seconda della board).

Il fatto è che di per sè la seriale non dice in alcun modo "ehi qualcuno mi ha collegato".

Il programma su Arduino dovrà leggere periodicamente la seriale (basta un Serial.available) per capire se qualcuno da fuori richiede attenzione. Per lo meno usando le funzioni standard delle librerie.
Formattare sempre il codice (CTRL+T sull'IDE) prima di postarlo sul forum:
l'indentazione errata fa perdere tempo e rende difficile trovare gli errori.

Standardoil

#6
Apr 21, 2018, 10:06 am Last Edit: Apr 21, 2018, 10:06 am by Standardoil
ma infatti non vuole riprendere, vuole un interruzzione esterna, che cominci una trasmissione che nn centra nulla col lavoro precedente
meglio che quello...
semmai il problema è al ermine della trasmissione, riprendere il lavoro dal punto brutalmente interrotto
ma siccome è una specifica cogente (cito: "deve interrompere subito quello che sta facendo")
il problema ci sarebbe qualunque metodo di interuzzione si usi, quindi tantovale...
Prima legge di Nelson sugli studenti
per colpa di qualcuno non si fa credito a nessuno
se sei uno studente, diplomando o laureando
NON riceverai risposta da me, lamentati con i tuoi colleghi

Patrick_M

se ho capito giusto non si resetta attaccando il cavo seriale ma
si resetta aprendo la finestra della seriale dall'ide

Standardoil

Hai capito giusto, mi sembra che sia legato all'intervento della linea DTR, o qualche altra legata all'handshaking hardware
ma comunque sempre legata alla comunicazione seriale, attaccare, aprire, cominciare una comunicazione seriale
Prima legge di Nelson sugli studenti
per colpa di qualcuno non si fa credito a nessuno
se sei uno studente, diplomando o laureando
NON riceverai risposta da me, lamentati con i tuoi colleghi

SukkoPera

#9
Apr 21, 2018, 05:31 pm Last Edit: Apr 21, 2018, 05:33 pm by SukkoPera
Si resetta all'apertura della connessione, quando il "client" (che si chiama DTE in questo contesto) tira su DTR (Data Terminal Ready o qualcosa di simile).
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

Standardoil

Secondo me è una strada da esplorare, semplice semplice e garantisce il risultato
Prima legge di Nelson sugli studenti
per colpa di qualcuno non si fa credito a nessuno
se sei uno studente, diplomando o laureando
NON riceverai risposta da me, lamentati con i tuoi colleghi

fra9962

Grazie a tutti dell' informazione :) avevo letto che qualcuno parlava di utilizzare un pin per far ciò ... in che senso ??

non userò l ide di arduino bensì un programma c scritto da me.

L' arduino salverà dei dati nella memoria a lungo termine all interno del loop , se io uso la funzione per disabilitare gli interrupt durante tale operazione non dovrebbero esserci problemi no?

docdoc

#12
Apr 23, 2018, 04:06 pm Last Edit: Apr 23, 2018, 04:07 pm by docdoc
Posso confessare che non ho ben capito né l'esigenza né i consigli che gli state dando?

Per prima cosa dice "nel caso in cui venga collegato tramite connessione seriale": cosa intende con "venga collegato"? Diciamo che Arduino ha (in qualche modo, lasciamo stare tutte le considerazioni sui reset vari) un connettore seriale: la "connessione" è quindi fisica? Ossia qualcuno a manella collega questa seriale ad Arduino? Ma una cosa del genere può indurre segnali spuri sulla seriale, che quindi risulterebbe "sporca" di caratteracci random...

Poi per "memoria a lungo periodo" cosa intende, la EEPROM interna? O una schedina SD? Questo non influenza il resto del discorso, ma la modalità di gestione si, ad esempio la EEPROM ha una "vita" di un certo numero di scritture, così come la SD, ma soprattutto se arriva l'interrupt (o peggio il reset) mentre sta scrivendo byte sulla EEPROM il rischio è di avere dati ancora più "sporchi").

E questa interruzione non potrebbe avvenire semplicemente con un apposito interrupt (es. un pin che va HIGH) che quindi gestisce in modo "smooth" la cosa, invece di pensare a resettare tutto Arduino?

Insomma, prima di parlare di possibili implementazioni o soluzioni, non conviene prima capire e delineare meglio qual è l'ESIGENZA?

Che deve fare Arduino? I dati che raccoglie ogni quanto li deve aggiornare? E perché attendere una connessione "fisica" di una seriale? Che deve farci la controparte? Ci sono strade diverse dalla seriale?
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

Standardoil

Si, certamente, ma siccome quello che lo OP chiede arduino già lo fa, basta mettere una serial.print nella setup...
Almeno per cominciare non serve pensare ad altro
Poi quando avrà qualcosa di funzionante può sempre migliorarlo
Per il momento io mi concentrerei sulla raccolta dati, più che sullinterrupt da seriale
Prima legge di Nelson sugli studenti
per colpa di qualcuno non si fa credito a nessuno
se sei uno studente, diplomando o laureando
NON riceverai risposta da me, lamentati con i tuoi colleghi

fra9962

Allora... cercherò di spiegarmi meglio.
La memoria utilizzata per salvare i dati sarà la eeprom.
Lo sketch verrà caricato in un primo momento tramite pc e poi arduino verrà collegato a una batteria per lavorare in autonomia.
Voglio che mentre lavora salva i dati acquisiti e quando viene connesso utilizzando la porta seriale, lui capisce che vi è stato collegato un dispositivo e deve iniziare a inviargli tutti i dati raccolti (ciò può avvenire anche dopo che ha letto i dati, se li sta leggendo in quell' istante altrimenti deve interrompere quello che sta facendo e inviare immediatamente i dati)

come faccio a far cambiare valore a un pin con un interrupt se non esiste una funzione che dice al pin quando un dispositivo viene collegato ? il problema quindi rimane...

Purtroppo devo usare la seriale vista la mancanza di un modulo per la connessione a internet.

Le specifiche per questo "incarico" sono volute dal mio prof ... se avete altre idee diverse dal seriale sparate pure .


Go Up