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