[RISOLTO] Interrupt esterni con Arduino Nano

Ciao a tutti,
qualcuno può cortesemente spiegarmi perchè questo programma che legge la posizione di due encoder funziona perfettamente non Uno e non con Nano?:

volatile long oldPositionX = 999;
volatile long oldPositionZ = 999;
long positionX, positionZ;

void setup() {
  Serial.begin(9600);
  Serial.println("Encoder Test:");
  
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT); 
  pinMode(5, INPUT);
  attachInterrupt(0, encoderX, RISING);
  attachInterrupt(1, encoderZ, RISING);

void loop() {
  if (oldPositionX != positionX) {
    Serial.print("X: ");
    Serial.println(positionX);
    oldPositionX = positionX;
  }
    if (oldPositionZ != positionZ) {
    Serial.print("Z: ");
    Serial.println(positionZ);
    oldPositionZ = positionZ;
  } 
}

void encoderX()
{
  digitalRead(2)^digitalRead(4) ? positionX++:positionX--;
}

void encoderZ()
{
  digitalRead(3)^digitalRead(5) ? positionZ++:positionZ--;
}

Allora ... prima di tutto, essendo il tuo primo post, ti consiglio di presentarti QUI e di leggere con attenzione il REGOLAMENTO ...

Poi ... la risposta è : Perché sulla Nano sono differenti i pin su cui puoi fare attachInterrupt() XD

  1. guarda il reference della nano QUI

  2. guarda il reference della attachInterrupt() QUI

Guglielmo

P.S. ... il codice si racchiude negli appositi tag "code", cortesemente correggi il tuo post, grazie.

Edit: I pin sulla Nano sono gli stessi che sulla Uno

Grazie Guglielmo!
Ho guardato i link che mi hai postato ma i due interrupt esterni sono collegati ai pin 2 e 3 sia per Uno che per Nano, o sbaglio?

Hai avuto tempo per pensare al tuo problema ma non hai avuto tempo per sistemare il tuo post... :roll_eyes:
Comunque gli INT0 e INT1 sono sui pin D2 e D3, come sulla UNO. Una domanda: perché dichiari i pin 2 e 3 come input? All'avvio tutti i pin sono già impostati come input. Casomai hai messo delle pull-down su quei pin, visto che leggi il passaggio allo stato alto?

Non sapevo dell'input di default, sono alle prime armi con Arduino.
Non c'è bisogno di resistenze di pull-down perchè l'encoder è elettronico, non meccanico, poi ribadisco che su Uno tutto funziona perfettamente!
Grazie per l'aiuto

airbornepp:
Grazie Guglielmo!
Ho guardato i link che mi hai postato ma i due interrupt esterni sono collegati ai pin 2 e 3 sia per Uno che per Nano, o sbaglio?

Mea culpa ... perdona, hai ragione, sono gli stessi ... si vede che non ero ancora completamente sveglio ... perché ero convinto di aver letto pin differenti :blush:

Guglielmo

Effettivamente è strano ...
... al di fuori della scheda, stai usando le stesse cose ? Stessi encoder, stessa alimentazione, ecc. ?

Guglielmo

Edit: Noto un'altra cosa ... hai dichiarato "volatile" due variabili (oldPositionX, oldPositionZ) che poi, in realtà, nelle ISR non usi, mentre NON hai dichiarato "volatile" le due variabili (positionX, positionZ) che realmente usi nelle ISR ...

Si, ho controllato e ricontrollato, ho addirittura collegato e ricollegato due volte i fili ma niente....
A questo punto penserei ad una scheda guasta.
Non so neanche se la Nano è originale, sul PCB c'è scritto:
ARDUINO
NANO
V3.0
www.funduino.com

LISA 2011

Hai proprio ragione per quanto riguarda le "Volatile"

Guarda il mio Edit del post precedente ... e ... no, non mi sembra originale ... "funduino" non è "Arduino" ... :roll_eyes:

Guglielmo

Niente da fare, anche aggiungendo "Volatile" non funziona....

Ok, almeno sintatticamente così lo hai corretto ...

Mah ... per tagliare la testa al toro, potresti provare con un piccolo programmino in cui semplicemente verifichi, uno per volta, il funzionamento dei due pin e dell'attachInterrupt() ...
... un qualche cosa di banale ... un pulsante ed un led che s'accende e si spegne ... giusto per essere sicuri che l'hardware funzioni ... prima di diventare matto a trovare un problema che ... magari non c'è ... :roll_eyes:

Guglielmo

RISOLTO! HO ripassato le saldature dei pin e ora va :slight_smile:

airbornepp:
RISOLTO! HO ripassato le saldature dei pin e ora va :slight_smile:

XD XD XD ... allora non ero il solo a "dormire" questa mattina ... :wink:

Bene ... tutto a posto allora, l'HW funziona :wink:

Cortesemente edita il tuo primo post e cambia il titolo anteponendo : [RISOLTO] ... grazie.

Buona giornata !

Guglielmo

Già :slight_smile:
Grazie 1000