Nella basetta ho un display a segmenti e un bottone. Premo il bottone x volte il display mostra il numero x.
Mi hanno detto che è comoda la variabile byte in questo esercizio ma non so molto usarla .
int bassoSinistra = 13;
int basso = 12;
int bassoDestra = 11;
int punto = 10;
int centro = 9;
int altoSinistra = 8;
int altoCentro = 7;
int altoDestra = 6;
int bottone = 5;
int posizioni[] = {bassoSinistra, basso, bassoDestra, centro, altoSinistra, altoCentro, altoDestra};
byte by;
int contatore = 0;
int secondi = 0;
boolean b = false;
void setup() {
pinMode(bottone, INPUT);
pinMode(bassoSinistra, OUTPUT);
pinMode(basso, OUTPUT);
pinMode(bassoDestra, OUTPUT);
pinMode(punto, OUTPUT);
pinMode(centro, OUTPUT);
pinMode(altoSinistra, OUTPUT);
pinMode(altoCentro, OUTPUT);
pinMode(altoDestra, OUTPUT);
Serial.begin(9600);
}
void loop() {
Serial.println("programma iniziato");
while (millis() - secondi <= 3000) {
if (digitalRead(bottone) == LOW) {
b = true;
} else {
if (b == true) {
contatore++;
b = false;
secondi = millis();
}
}
}
Serial.println(contatore);
if (contatore > 9) {
contatore = 9;
}
switch (contatore) {
case 0:
by = 0b01110111;
break;
case 1:
by = 0b00010001;
break;
case 2:
by = 0b01101011;
break;
case 3:
by = 0b00111011;
break;
case 4:
by = 0b00011101;
break;
case 5:
by = 0b00111110;
break;
case 6:
by = 0b01111110;
break;
case 7:
by = 0b00010011;
break;
case 8:
by = 0b01111111;
break;
case 9:
by = 0b00111111;
break;
}
for (int i = 0; i < 7; i++) {
bitRead(i, by);
}
secondi = millis();
contatore = 0;
}
Che sbaglio?
E poi l'esercizio ad un certo punto si specie blocca, nel senso che all'inizio fa i 3 secondi che deve fare e poi i secondi non li fa più e non legge + nulla.