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
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
la cosa è diversa se tu come variabile avessi usato una int
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
Post a Comment