void setup() {
// put your setup code here, to run once:
attachInterrupt(0, vario, CHANGE);
}
void loop() {
// put your main code here, to run repeatedly:
}
void vario() {
}
Standardoil:
A me una cosa simile è capitata con la 1.8.5, ho messo la funzione richiamata prima del punto di richiamo e magia andava.
Allora ...
... in 'C' le funzioni VANNO dichiarate PRIMA di poter essere usate. Difatti, se guardi un VERO programma 'C' troverai prima i "prototipi" delle funzioni e poi, dove vuoi, le vere funzioni. In questo modo, il compilatore, quando compila, sa che esistono quelle funzioni e non da problemi.
Con l'IDE di Arduino che tutto "facilita" e tutto "nasconde" (... ogni tanto introducendo grossi casini), questo NON è necessario, NON perché non serva, ma perchè ... i "prototipi", se non li metti tu (... e non lo fa quasi mai nessuno) li crea lui.
Standardoil:
Proprio perché mi aspettavo che il prototipo fosse messo in automatico mi sono meravigliato di aver dovuto spostare la funzione
Come detto ...
gpb01: ... ogni tanto introducendo grossi casini ...
Non è la prima volta che fa porcherie o che si "confonde" (... a me, con le vecchie versioni, eliminava il prototipo dove IO avevo messo degli "attributi" obbligatori e lo ricreava come gli pareva a lui ... senza gli "attributi" che mi servivano>:().
Beh, incredibile.
Non ho capito il perchè, ma da quando ho seguito il consiglio di Standardoil, il compilatore non mi da errore; di controprova ho rimesso tutto come prima e funziona senza errori....
Quindi??
Ho avuto già in passato su uno sketch complicato questo tipo di problema, ho diviso lo sketch in vari pezzi e con la versione 1.8.5 mi dava un sacco di errori che con versioni precedenti non mi dava.
Posso pensare quindi che l'IDE faccia dei casini o delle porcherie come dice Guglielmo??
uwefed:
interrupt 0 sul Arduino UNO é sul piendino 2
Vero Uwe, ma lui sta usando la forma (sconsigliata): attachInterrupt(interrupt, ISR, mode); ... quindi, come primo parametro, deve passare l'interrupt e NON il pin.
Diverso il caso se avesse usato la forma (consigliata): attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);