Problema con l'utilizzo delle variabili

Ciao a tutti.Sto cercando di capire il funzionamento delle variabili.Ipottizziamo di creare un programma che mi permetta in funzione del valore di x di eseguire una determinata azione il mio problema è che non riesco a capire come dichiararla e come incrementarla o decrementarla in base all'azione svolta. Posto il codice che forse rende più chiara la situazione.grazie per chi riuscirà a togliermi i dubbi.

int up = 8;
int down = 7;
int attup = 13;
int attdown = 12;

void setup() {
  pinMode(up, INPUT);
  pinMode(down, INPUT);
  pinMode(attup, OUTPUT);
  pinMode(attdown, OUTPUT);

}

void loop() {
  up = digitalRead(up);
  down = digitalRead(down);
  int var=0;
  if ( up == HIGH && var == 0) {
    delay (25);
    digitalWrite(attdown, HIGH);
    delay (1000);
    digitalWrite(attdown, LOW );
    var++; 
    while (digitalRead(up)) {
    }
  }
  else if ( up == HIGH && var <6) {
    delay (25);
    digitalWrite(attup, HIGH);
    delay (1000);
    digitalWrite(attup, LOW);
    var++;
    while (digitalRead(up)) {
    }
  }
  else
    digitalWrite(attup, LOW);
  digitalWrite(attdown, LOW);
}

Penso che l'errore sia qui:

up = digitalRead(up);
  down = digitalRead(down);

all'inizio le dichiari come 7 e 8 (i pin da leggere); dopo la prima lettura però valgono HIGH O LOW, quindi alla riesecuzione del loop non riuscirai più a leggere i due pin 7 e 8; secondo il mio modesto parere dovresti usare nomi diversi (da dichiarare prima) per assegnare il valore della lettura dei pin; in pratica alle 4 costanti dichiarate devi aggiungere due variabili.

Non puoi chiamare una variabile con lo stesso nome di un pin!
Tu hai chiamato il pin 8 "up" e poi "up" lo usi anche come variabile (up = digitalRead(up);).
devi creare un'altra variabile con un altro nome diverso da up al quale assegni come valore quello letto con "digitalRead(up).
Ex
int up = 8; //chiami il pin 8 up
int val_up; //definisci una variabile di tipo intero

void setup(){
pinMode(up, INPUT) //definisci che up ovvero il pin 8 è OUTPUT
}
void loop(){
val_up = digitalRead(up); //assegni alla variabile val_up, il valore aquisito da digitalRead(up)
}

e uguale dovrai fare con il resto del programma!

Vediamo se riesco a spiegare meglio la situazione ho modificato il programma come avete detto, purtroppo però non funziona!!
Il problema è il seguente:non riesco a gestire la variabile cont.Essa dovrebbe,in seguito alla pressione del pulsante up variare il suo stato da 0 a 1 cont++ e avendo un valore <5 venir incrementata nuovamente con la seconda funzione else if. spero di essermi spiegato correttamente di seguito il codice modificato

int up = 8;
int down = 7;
int attup = 13;
int attdown = 12;
int val_up;
int val_down;

void setup() {
  pinMode(up, INPUT);
  pinMode(down, INPUT);
  pinMode(attup, OUTPUT);
  pinMode(attdown, OUTPUT);

}

void loop() {
  val_up = digitalRead(up);
  val_down = digitalRead(down);
  int cont=0; //variabile che deve cambiare in funzione dellla pressione tasto
  if ( val_up == HIGH && cont == 0) {
    delay (25);
    digitalWrite(attdown, HIGH);
    delay (1000);
    digitalWrite(attdown, LOW );
    cont++; 
    while (digitalRead(up)) {
    }
  }
  else if ( val_up == HIGH && cont <6) {
    delay (25);
    digitalWrite(attup, HIGH);
    delay (1000);
    digitalWrite(attup, LOW);
    cont++;
    while (digitalRead(up)) {
    }
  }
  else
    digitalWrite(attup, LOW);
  digitalWrite(attdown, LOW);
}

int cont=0;
lo devi mettere fuori dal loop insieme alle altre variabili(quelle all'inizio) perchè se no ogni volta che ricominci il loop ri-crei una nuova variabile cont a cui metti il valore 0

ale92:
int cont=0;
lo devi mettere fuori dal loop insieme alle altre variabili(quelle all'inizio) perchè se no ogni volta che ricominci il loop ri-crei una nuova variabile cont a cui metti il valore 0

verissimo, devi tenere ben presente che la sezione loop si ripete ciclicamente all'infinito (da qui il nome loop), quindi ad ogni nuovo ciclo stai ripartendo da 0.

grazie mille ora infatti a furia di provarci e ragionarci ci ero riuscito su un programma ancora più semplice(non che l'altro era complicato :))