Conteggio avanti/indietro


ciao tutti,
con due display 7 segmenti ,due 74hc595 e due pulsanti vorrei visualizzare un conteggio avanti /indietro da 0 99. per quanto riguarda il conteggio in avanti va tutto bene ,il problema è quando decremento. dal 9 allo 0 delle unita decrementa in modo corretto ma quando arriva sullo 0 mi aspetto che ritorni 9 e decrementi di 1 le decine ma questo non succede. ho scritto if (unita  ==  -  1) perchè penso che la variabile unita di tipo byte quando passa -1 non diventa negativa ma ritorna al valore impostato cioè 9. ho provato scrivere if (unita  ==  0) ma quando arriva 1 decrementa di 1 le decine e  non visualizza lo 0. grazie tutti in anticipo
guido
code: [select]


//segmenti  a  b  c  d  e  f  g  dp
// n°0      1  1  1  1  1  1  0  0    0xfc
// n°1      0  1  1  0  0  0  0  0    0x60
// n°2      1  1  0  1  1  0  1  0    0xda
// n°3      1  1  1  1  0  0  1  0    0xf2
// n°4      0  1  1  0  0  1  1  0    0x66
// n°5      1  0  1  1  0  1  1  0    0xb6
// n°6      1  0  1  1  1  1  1  0    0xbe
// n°7      1  1  1  0  0  0  0  0    0xe0
// n°8      1  1  1  1  1  1  1  0    0xfe
// n°9      1  1  1  1  0  1  1  0    0xf6

#define clock_pin 2         // pin 11  shift-register 74hc595
#define latch_pin 3         // pin 12  shift-register 74hc595
#define data_pin  4         // pin 14  shift-register 74hc595
#define puls_av   5         // pulsante avanti incrementa
#define puls_ind  6         // pulsante indietro decrementa

boolean val;
boolean lastval;
boolean val_ind;
boolean lastval_ind;
byte unita;
byte decine;
byte tabella[10] = {0xfc, 0x60, 0xda, 0xf2, 0x66, 0xb6, 0xbe, 0xe0, 0xfe, 0xf6};

void setup() {
  pinmode(puls_av, input);
  pinmode(puls_ind, input);
  pinmode(latch_pin, output);
  pinmode(clock_pin, output);
  pinmode(data_pin, output);
  digitalwrite(clock_pin, low);
  val          = low;
  lastval      = low;
  val_ind      = low;
  lastval_ind  = low;
  unita        = 0;
  decine       = 0;
}

void loop() {

  digitalwrite(latch_pin, low);
  shiftout(data_pin, clock_pin, lsbfirst, tabella[unita]);
  shiftout(data_pin, clock_pin, lsbfirst, tabella[decine]);
  digitalwrite(latch_pin, high);
 
  val = digitalread(puls_av);                // lettura pulsante avanti incrementa
  if (val != lastval) {
    if (val == high && val_ind == low) {
      delay (40);
      unita ++ ;
      if (unita == 10)
      {
        unita = 0;
        decine ++ ;
        if (decine == 10)
          decine = 0;
      }
    }
  }
  lastval = val;
 
  val_ind = digitalread(puls_ind);           // lettura pulsante indietro decrementa
  if (val_ind != lastval_ind) {
    if (val_ind == high && val == low) {
      delay (40);
      unita -- ;
      if (unita == - 1)
      {
       unita = 9;
        decine -- ;
        if (decine == - 1)
          decine = 9;
      }
    }
  }
  lastval_ind = val_ind;
}

un byte puo' avere solo dei valori positivi da 0 255, quindi decrementando non passi da 0 -1. ma da 0 255

code: [select]
if (unita == 255 )


la cosa è diversa se tu come variabile avessi usato una int


Arduino Forum > International > Italiano > Software (Moderator: leo72) > Conteggio avanti/indietro


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor