Utilizzo variabile byte

di il
6 risposte

Utilizzo variabile byte

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.

6 Risposte

  • Re: Utilizzo variabile byte

    Un'applicazione embeeded tipicamente é costituita da un ciclo infinito... Ti manca un while(1).
    La variabile byte serve per tenere traccia lo stato del registro ad 8 bit.
  • Re: Utilizzo variabile byte

    Non ho capito la seconda affermazione. Non è questo quello che intendevo nella prima affermazione: Dicevo che dovrebbe fare 3 secondi di pausa invece dopo un tot i 3 secondi di pausa non li fa +
  • Re: Utilizzo variabile byte

    Chi richiama la loop()? Cosa fa la funzione millis()?
  • Re: Utilizzo variabile byte

    Dovresti precisare che stai scrivendo uno sketch di Arduino.

    Quindi la funzione setup() viene chiamata una sola volta e la loop() continuamente dal micro.

    Ma esattamente cosa dovrebbe fare il tuo programma, spiegalo in maniera chiara e senza abbreviazioni in italiano ...

    P.S. la millis() restituisce il numero di millisecondi dall'avvio del programma
  • Re: Utilizzo variabile byte

    Che intendi dire chi richiama la loop? millis() conta quanto tempo è passato dall'inizio del programma.
  • Re: Utilizzo variabile byte

    Boh eppure a rileggerlo mi sembra chiaro...
    Ho una breadboard, sulla breadboard c'è attaccato un bottone. Premendo questo bottone una volta, dopo tre secondi il display a segmenti dovrebbe mostrare il numero 1, se premo il bottone due volte dopo 3 secondi dovrebbe mostrare il numero due, se lo prem 3 volte dopo 3 secondi dovrebbe mostrare il numero 3, se premo il bottone 4 volte dopo 3 secondi dovrebbe mostrare il numero 4... eccetera...
Devi accedere o registrarti per scrivere nel forum
6 risposte