Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Definizione degli ingressi
- int i1=2;
- int i2=3;
- int i3=4;
- int i4=5;
- int i5=6;
- int ir=A0;
- // In questo array di byte definisco lo stato delle uscite per visualizzare i relativi numeri
- const byte bcd_mask[13] = {
- // .gfedcba
- 0b00111111, // segmenti attivi per visualizzare la cifra 0
- 0b00000110, // segmenti attivi per visualizzare la cifra 1
- 0b01011011, // segmenti attivi per visualizzare la cifra 2
- 0b01001111, // segmenti attivi per visualizzare la cifra 3
- 0b01100110, // segmenti attivi per visualizzare la cifra 4
- 0b01101101, // segmenti attivi per visualizzare la cifra 5
- 0b01111100, // segmenti attivi per visualizzare la cifra 6
- 0b00000000, // segmenti attivi per visualizzare la cifra 7
- 0b00000000, // segmenti attivi per visualizzare la cifra 8
- 0b00000000, // segmenti attivi per visualizzare la cifra 9
- 0b00000000, // segmenti tutti spenti
- 0b01010100, // segmenti attivi per visualizzare la lettera n
- 0b01010000 // segmenti attivi per visualizzare la lettera r
- } ;
- // In questo secondo array vado a definire dove sono fisicamente collegati i 7 segmenti (8 eventualmente con il .)
- // a b c d e f g (.)
- const byte bcd_pinout[7] = {10, 11, 12, 13, 7, 9, 8};
- // Il numero che verrà visualizzato sul display (11 corrisponde ad n)
- byte Numero = 11;
- byte OldNumero = 0;
- // La funzione che visualizza il numero sul display
- void Display(int _num){
- // La variabile out definisce quali pin andranno su HIGH e quali su LOW
- // La combinazione dipende dal valore della variabile di ingresso _num
- byte out = bcd_mask[_num];
- for(int pin=0; pin<=7; pin++){
- /* Imposto lo stato di ciascun pin definito in bcd_pinout,
- secondo lo stato definito nella "maschera" bcd_mask
- Il display è ad anodo comune, quindi con il valore LOW si accende il segmento corrispondente,
- per questa ragione il valore booleano viene negato con l'operatore ! */
- bool pinState = !bitRead(out, pin);
- digitalWrite(bcd_pinout[pin], pinState);
- }
- }
- void setup(){
- //il pin ix è un input
- pinMode(i1, INPUT_PULLUP);
- pinMode(i2, INPUT_PULLUP);
- pinMode(i3, INPUT_PULLUP);
- pinMode(i4, INPUT_PULLUP);
- pinMode(i5, INPUT_PULLUP);
- pinMode(ir, INPUT_PULLUP);
- //definizione pin output
- pinMode(10, OUTPUT);
- pinMode(11, OUTPUT);
- pinMode(12, OUTPUT);
- pinMode(13, OUTPUT);
- pinMode(7, OUTPUT);
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- Serial.begin(9600);
- }
- long tempo= millis();
- void loop() {
- // Se c'è una variazione aggiorno, altrimenti non faccio nulla
- if (Numero != OldNumero){
- OldNumero = Numero;
- Display(Numero);
- Serial.print("Marcia: ");
- Serial.println(Numero);
- tempo = millis();
- }
- // dopo 500ms senza segnali sugli ingressi visualizzo n
- if (digitalRead(i1)&&digitalRead(i2)&&digitalRead(i3)&&digitalRead(i4)&&digitalRead(i5))
- // per evitare di visualizzare n nei transitori
- if (millis() - tempo > 500){
- tempo = millis();
- Numero = 11;
- }
- if (digitalRead(i1)== LOW)
- Numero = 1;
- if (digitalRead(i2)== LOW)
- Numero = 2;
- if (digitalRead(i3)== LOW)
- Numero = 3;
- if (digitalRead(i4)== LOW)
- Numero = 4;
- if (digitalRead(i5)== LOW)
- Numero = 5;
- if (digitalRead(ir)== LOW)
- Numero = 12;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement