attachInterrupt

Scusate, qualcuno mi spiega cosa sbaglio con questa instruzione??

#define interrupt0 0

attachInterrupt(interrupt0,vario,CHANGE);
........
void vario().......
..........

Con IDE 1.8.5 mi dice che "vario" non è specificata per questo scopo, mentre se uso versioni precedenti funziona tutto correttamente.....

Mistero...

C'è un'errore da qualche altra parte ...

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() {
   
}

... con la 1.8.5 compila tranquillamente.

Guglielmo

A me una cosa simile è capitata con la 1.8.5, ho messo la funzione richiamata prima del punto di richiamo e magia andava.
Ma non è logico...

Sì, in termini maggiormente tecnici: ho definito la funzione prima del punto dove ne inizializzavo il puntatore...

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. :smiley:

Guglielmo

Sì, è lo sapevo...
Proprio perché mi aspettavo che il prototipo fosse messo in automatico mi sono meravigliato di aver dovuto spostare la funzione

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 >:().

Guglielmo

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??

comunque non ti funziona ancora:

#define interrupt0 0

interrupt 0 sul Arduino UNO é sul piendino 2

Ciao Uwe

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);

Guglielmo

P.S.: ... sintassi della attachInterrupt()

Esatto, uso la forma sconsigliata, ma funzionante... :smiley:
Cmq per completezza vedrò di modificarlo utilizzando la forma consigliata...appena avrò tempo...