Problema Interrupt + Serial.println
salve ragazzi!!!!
stavo sviluppando un progetto abbastanza semplice ( una versione del cat feeder ormai famoso sul sito) con degli interrupt.
in pratica un sensore luminoso genera un interrupt quando c'è molta luce ( e la resistenza ldr si abbassa, tipo falling) , e questo evento aziona un servomotore che ,dalla posizione di riposo impostata nel loop, si apre per 5 secondi e poi si richiude.
fino qui tutto bene. poi ho cominciato "ricamare il software", e ho inserito qualche serial.print per tenere d'occhio alcune cose, ad esempio, quante volte era stato azionato il meccanismo. ( gli interrupt vengono disabilitati dopo 5 eventi) .
ebbene, da quando ho inserito println , il codice si blocca spesso e volentieri. nella console vengono visualizzate scritte come
"evento rilevato: pasto numero 1"
"evento rilevato: pasto numero 2"
"ev"
e poi si blocca. non riesco capire perchè, e la cosa è molto fastidiosa. qualcuno può darmi una mano?
senza le stampe video invece funziona perfettamente.
p.s inoltre, se mando piu impulsi luminosi mentre il motorino è "aperto", lui li legge come interrupt e li scala dal totale. ho provato giocare con nointerrupts(), interrupts() e detachinterrupt(0) ma niente...
vi riporto qui sotto il codice:
stavo sviluppando un progetto abbastanza semplice ( una versione del cat feeder ormai famoso sul sito) con degli interrupt.
in pratica un sensore luminoso genera un interrupt quando c'è molta luce ( e la resistenza ldr si abbassa, tipo falling) , e questo evento aziona un servomotore che ,dalla posizione di riposo impostata nel loop, si apre per 5 secondi e poi si richiude.
fino qui tutto bene. poi ho cominciato "ricamare il software", e ho inserito qualche serial.print per tenere d'occhio alcune cose, ad esempio, quante volte era stato azionato il meccanismo. ( gli interrupt vengono disabilitati dopo 5 eventi) .
ebbene, da quando ho inserito println , il codice si blocca spesso e volentieri. nella console vengono visualizzate scritte come
"evento rilevato: pasto numero 1"
"evento rilevato: pasto numero 2"
"ev"
e poi si blocca. non riesco capire perchè, e la cosa è molto fastidiosa. qualcuno può darmi una mano?
senza le stampe video invece funziona perfettamente.
p.s inoltre, se mando piu impulsi luminosi mentre il motorino è "aperto", lui li legge come interrupt e li scala dal totale. ho provato giocare con nointerrupts(), interrupts() e detachinterrupt(0) ma niente...
vi riporto qui sotto il codice:
code: [select]
// servo in posizione =33 gradi.
#include <servo.h>
servo myservo;
volatile int apri,intcount=0;
void setup() {
attachinterrupt(0,open_gate,falling);
myservo.attach(9);
serial.begin(9600);
myservo.write(33);
}
void loop() {
if(intcount==5){
detachinterrupt(0);
}
if (apri==1){
apriti();}
myservo.write(33);
}
void open_gate(){
apri=1;
intcount++;
//serial.print("evento rilevato: pasto numero ");
//serial.print(intcount,1);
//serial.println(" ");
}
void apriti(){
myservo.write(123);
delay(5000);
apri=0;
}
togli serial.print da dentro gli interrupt.
siccome anche la stampa su seriale è gestita da interrupt, nel momento in cui disattivi l'interrupt blocchi anche l'invio di dati sulla seriale.
siccome anche la stampa su seriale è gestita da interrupt, nel momento in cui disattivi l'interrupt blocchi anche l'invio di dati sulla seriale.
Arduino Forum > International > Italiano > Software (Moderator: leo72) > Problema Interrupt + Serial.println
arduino
Comments
Post a Comment