Pages: [1]   Go Down
Author Topic: Problema con l'utilizzo delle variabili  (Read 592 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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





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

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 573
Posts: 12633
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Penso che l'errore sia qui:
Code:
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.
Logged


Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)smiley-wink.
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!
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Code:
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);
}




« Last Edit: October 14, 2012, 08:14:16 am by gianlu81 » Logged

Offline Offline
Jr. Member
**
Karma: 2
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 573
Posts: 12633
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley)
Logged

Pages: [1]   Go Up
Jump to: