docsavage:
Invece per astro:
Posso essere d'accordo Che sia cosa che riguarda il compilatore.....
Ma da qualche parte dovrà Pure essere scritto....
E' scritto nelle specifiche del compilatore, ovvero ti scarichi il corposo documento relativo alle specifiche del C99/C11 e ci trovi tutto, il reference di Arduino è relativo a wiring, che è un framework non un linguaggio, e come tale è limitato ad esso.
ciao...mi sono dimenticato di evidenziare che nel mio esempio ho impostato gli ingressi come INPUT_PULLUP...e di conseguenza le ISR attive con FALLING.
In pratica se l'intrerrupt fosse azionato da un pulsante il contatto di questo dovrebbe chiudere verso GND.
ORSO2001:
ciao...mi sono dimenticato di evidenziare che nel mio esempio ho impostato gli ingressi come INPUT_PULLUP...e di conseguenza le ISR attive con FALLING.
In pratica se l'intrerrupt fosse azionato da un pulsante il contatto di questo dovrebbe chiudere verso GND.
si ho visto sono andato a sostituirle con l'ingresso del flussometro
una domanda :
ho copiato il tuo codice e sostituito l'ingresso
pero mi esce questo errore
exit status 1
stray '\240' in program
ho visto che la causa potrebbe essere la presenza di caratteri nascosti ,pero mi sembra molto molto strano
si quell' errore è dovuto ad un'errata tabulatura o scrittura del codice...di solito succede se fai un copia ed incolla da una pagina web...strano che te lo dia ...sono poche righe...scrivilo a mano
sembra ok...se proprio vogliamo io avevo inserito il Serial.println() per stampare su righe.
inserisci la riga di codice come prima riga della funzione litres()...così vedi se la ISR viene chiamata o meno
si ho provato pero non mi da alcuna stampa
comunque sono riuscito a risolvere il problema
1)riguardo al scrivere il nome delle variabili più lungo non ha funzionato ( per lo meno in questo caso) in risultato era sempre uguale
2)riguardo al codice di "ORSO2001" andrò ad approfondirlo ulteriormente per vedere/capire una volta per tutte come funziona questo benedetto ISR e come utilizzarlo (appeno avrò dei risultati validi lo scrivo)
per chi fosse interessato ho usato il seguente codice :
scheda Arduino Uno ,ho collegato i flussometri ai piedini 2 e 3
ORSO2001:
sembra ok...se proprio vogliamo io avevo inserito il Serial.println() per stampare su righe.
Mi sembra molto strano ...
... in una ISR gli interrupt sono DISABILITATI e ... la classe Serial usa gli interrupt quindi ... la vedo dura che una Serial.print() funzioni all'interno di una ISR ... :
Routine che trasmette:
void HardwareSerial::_tx_udr_empty_irq(void)
{
// If interrupts are enabled, there must be more data in the output
// buffer. Send the next byte
unsigned char c = _tx_buffer[_tx_buffer_tail];
_tx_buffer_tail = (_tx_buffer_tail + 1) % SERIAL_TX_BUFFER_SIZE;
*_udr = c;
// clear the TXC bit -- "can be cleared by writing a one to its bit
// location". This makes sure flush() won't return until the bytes
// actually got written
sbi(*_ucsra, TXC0);
if (_tx_buffer_head == _tx_buffer_tail) {
// Buffer empty, so disable interrupts
cbi(*_ucsrb, UDRIE0);
}
}
...prima di postare il codice l'avevo testato...con una MEGA2560 su PIN18 (interrupt 5)...e a me stampava...sia numeri che eventuali NaN o inf.
casomai basterebbe portare fuori dall'ISR la Serial
Mi intrometto, da quel che ho letto in passato sul forum l'ISR deve essere il più breve possibile, quindi l'ultimo codice di ORSO2001 potrebbe diventare:
@fabpolli: certo che va meglio!...almeno per quello che ne so io.
@Guglielmo (ma a Tutti): ho fatto delle prove sulla mia MEGA2560 (clone); se uso i PIN 2-3-18-21 funziona la Serial nella ISR; se uso i PIN 19-20 la Serial non funziona.
il PIN 19 è l'RX1
il PIN 20 è SDA.
il PIN 2-3 (niente altro)
il PIN 18 è il TX1
il PIN 21 è SCL
ammetto l'ignoranza in materia di microcontrollori e non conosco così a fondo, per non dire "nulla", la HardwareSerial...nelle reference leggo "Serial data received while in the function may be lost."
quindi chiedo, visto a cosa corrisponde il PIN19,...non è che quel _tx_buffer nella funzione _tx_udr_empty_irq(void) si riferisca al buffer in ingresso (ricevuto)?...o è lo stesso buffer?