Pages: [1]   Go Down
Author Topic: Problema con l'utilizzo delle variabili  (Read 569 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: 564
Posts: 12450
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

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

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: 564
Posts: 12450
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

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

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: