Questo codice non mi va sua arduino nano

bool flag = false;  
bool lastButtonState = HIGH;  
int step = 0;
int contatore = 0;

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);  
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, INPUT_PULLUP);
  pinMode(A1, OUTPUT);
}

void tuttiAccesi(){
  digitalWrite(3, HIGH);
          digitalWrite(2, HIGH);
          digitalWrite(4, HIGH);
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(8, HIGH);
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          digitalWrite(12, HIGH);
          digitalWrite(A1, HIGH);
}

void tuttiSpenti(){
      digitalWrite(3, LOW);
      digitalWrite(2, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      digitalWrite(12, LOW);
      digitalWrite(A1, LOW);
}

void loop() {
  bool reading = digitalRead(13);
  
  if (reading == LOW && lastButtonState == HIGH) {
    contatore++;
    step = 0;
    if (contatore == 4){
      tuttiSpenti();

      contatore = 0;
    }
  
  }
  lastButtonState = reading;

  switch(contatore) {
    case 1:  
      tuttiSpenti();

      switch(step){

        case 0:
          digitalWrite(3, HIGH);
          break;

        case 1:
          digitalWrite(2, HIGH);
          digitalWrite(4, HIGH);
          break;

        case 2:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          break;

        case 3:
          digitalWrite(7, HIGH);
          digitalWrite(8, HIGH);
          break;

        case 4:
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          break;

        case 5:
          digitalWrite(11, HIGH);
          digitalWrite(12, HIGH);
          break;

        case 6:
          digitalWrite(A1, HIGH);

      } 
                                        
      if(step==6)                           
        step=0;
      else
        step++;                           

      delay(200);
    break;


    case 2: 
      switch(step){
        case 0:
          tuttiSpenti();
          break;

        case 1:
          tuttiAccesi();
      } 
                                        
      if(step==1)                           
        step=0;
      else
        step++;                              

      delay(250);
    break;


    case 3: 

      switch(step){
        case 0:
          digitalWrite(3, HIGH);
          break;
        
        case 1:
          digitalWrite(2, HIGH);
          digitalWrite(4, HIGH);
          break;

        case 2:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          break;

        case 3:
          digitalWrite(7, HIGH);
          digitalWrite(8, HIGH);
          break;

        case 4:
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          break;

        case 5:
          digitalWrite(11, HIGH);
          digitalWrite(12, HIGH);
          break;

        case 6: 
          digitalWrite(A1, HIGH);
          break;

        case 7:
          digitalWrite(3, LOW);
          break;
        
        case 8:
          digitalWrite(2, LOW);
          digitalWrite(4, LOW);
          break;

        case 9:
          digitalWrite(5, LOW);
          digitalWrite(6, LOW);
          break;

        case 10:
          digitalWrite(7, LOW);
          digitalWrite(8, LOW);
          break;

        case 11:
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          break;

        case 12:
          digitalWrite(11, LOW);
          digitalWrite(12, LOW);
          break;

        case 13:
          digitalWrite(A1, LOW);
          //delay(100);
      } 
                                        
      if(step==13)                           
        step=0;
      else
        step++;                              

      delay(200);
    break;
  }
                        
}

ciao, sto facendo questo progetto, su arduino uno mi funziona, mentre su arduino nano non ne vuole sapere, si carica il codice ma all'avvio partono i led ma il bottone non risponde.... spero in un vostro aiuto

Ho appena risolto, il problema era l'utilizzo del pin 13 che su Arduino nano non va bene per il bottone, da quello che ho capito.

ciao primula22,
esattamente sull'arduino nano, (presumo sia la Nano V3), il pin 13 è collegato al LED integrato tramite un resistore, che abbassa il pin e interferisce con i segnali di input, in particolare per i sensori o i pulsanti digitali, a differenza della Uno che utilizza un buffer operazionale.

Poi, vedo che utilizzi il Pin A1 come output digitale, se ricordo bene per il pin A1 e' solo input analogico il corrispondente digitale e' il pin 15. Io di solito uso una macro in questo modo:

# define A1_DIGITALE 15
void setup() {
  ...
  ...
  pinMode(A1_DIGITALE, OUTPUT);
}

void loop() {
  ...
  ...
  digitalWrite(A1_DIGITALE, HIGH);
}

Massimo

A1 è effettivamente un pin che può essere utilizzato per una lettura digitale, non solo analogica. La funzione analogRead() si occupa delle modifiche necessarie per passare attraverso il convertitore analogico-digitale.

A1 e 15 sono la stessa cosa.

Ciao J-M-L

lo vedo dal core, ma, non so perche', io ricordavo che per l'uso digitale fosse obbligatorio utilizzare il 15 ... forse per versioni antiche del core ... non saprei, comunque grazie per la precisazione

Massimo

Non ho mai conosciuto una versione del core Arduino per AVR che non gestisse automaticamente la corrispondenza: A1 non essendo un valore riconosciuto dal compilatore, doveva necessariamente essere definito su qualcosa.

Ma forse ci fu un tempo in cui A1 valeva 1 e analogRead/write gestiva la corrispondenza.

si' questo e' cio' che ricordo, ma non vorrei far confusione con altri core ... sai com'e'.. la vecchiaia
comunque Auguri !

Massimo

Grazie a tutti per i vostri preziosi commenti.

Mi pare di ricordare un tempo in cui (almeno per avr) solo per analogRead/write c'era un pezzo di codice che verificava il numero pin, se minore di 14 (mi pare) lo aumentava di un tot.
Vado a memoria. E sinceramente sono contento lo abbiano tolto.
Si vedeva roba del tipo analogWrite(1) e digitalRead(1) che sembravano su stesso pin.

:innocent:

1 Like