Advertisement
TolentinoCotesta

Contamarce

Jun 8th, 2017
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.56 KB | None | 0 0
  1. // Definizione degli ingressi
  2. int i1=2;
  3. int i2=3;
  4. int i3=4;
  5. int i4=5;
  6. int i5=6;
  7. int ir=A0;
  8.  
  9. // In questo array di byte definisco lo stato delle uscite per visualizzare i relativi numeri
  10. const byte bcd_mask[13] = {
  11.                   //  .gfedcba
  12.                     0b00111111,  // segmenti attivi per visualizzare la cifra 0
  13.                     0b00000110,  // segmenti attivi per visualizzare la cifra 1
  14.                     0b01011011,  // segmenti attivi per visualizzare la cifra 2
  15.                     0b01001111,  // segmenti attivi per visualizzare la cifra 3
  16.                     0b01100110,  // segmenti attivi per visualizzare la cifra 4
  17.                     0b01101101,  // segmenti attivi per visualizzare la cifra 5
  18.                     0b01111100,  // segmenti attivi per visualizzare la cifra 6
  19.                     0b00000000,  // segmenti attivi per visualizzare la cifra 7
  20.                     0b00000000,  // segmenti attivi per visualizzare la cifra 8
  21.                     0b00000000,  // segmenti attivi per visualizzare la cifra 9
  22.                     0b00000000,  // segmenti tutti spenti
  23.                     0b01010100,  // segmenti attivi per visualizzare la lettera n
  24.                     0b01010000   // segmenti attivi per visualizzare la lettera r
  25.                   } ;      
  26.    
  27. // In questo secondo array vado a definire dove sono fisicamente collegati i 7 segmenti (8 eventualmente con il .)
  28. //                          a   b   c   d   e  f  g     (.)
  29. const byte bcd_pinout[7] = {10, 11, 12, 13, 7, 9, 8};
  30.  
  31. // Il numero che verrà visualizzato sul display (11 corrisponde ad n)
  32. byte Numero = 11;
  33. byte OldNumero = 0;
  34.  
  35. // La funzione che visualizza il numero sul display
  36. void Display(int _num){
  37.   // La variabile out definisce quali pin andranno su HIGH e quali su LOW
  38.   // La combinazione dipende dal valore della variabile di ingresso _num
  39.   byte out = bcd_mask[_num];  
  40.   for(int pin=0; pin<=7; pin++){    
  41.  
  42.      /* Imposto lo stato di ciascun pin definito in bcd_pinout,
  43.      secondo lo stato definito nella "maschera" bcd_mask
  44.      Il display è ad anodo comune, quindi con il valore LOW si accende il segmento corrispondente,
  45.      per questa ragione il valore booleano viene negato con l'operatore ! */
  46.  
  47.      bool pinState = !bitRead(out, pin);
  48.      digitalWrite(bcd_pinout[pin], pinState);
  49.   }
  50. }
  51.  
  52.  
  53. void setup(){
  54. //il pin ix è un input
  55. pinMode(i1, INPUT_PULLUP);
  56. pinMode(i2, INPUT_PULLUP);
  57. pinMode(i3, INPUT_PULLUP);
  58. pinMode(i4, INPUT_PULLUP);
  59. pinMode(i5, INPUT_PULLUP);
  60. pinMode(ir, INPUT_PULLUP);
  61. //definizione pin output
  62. pinMode(10, OUTPUT);
  63. pinMode(11, OUTPUT);
  64. pinMode(12, OUTPUT);
  65. pinMode(13, OUTPUT);
  66. pinMode(7, OUTPUT);
  67. pinMode(8, OUTPUT);
  68. pinMode(9, OUTPUT);
  69. Serial.begin(9600);
  70. }
  71.  
  72.  
  73. long tempo= millis();
  74.  
  75. void loop() {
  76.   // Se c'è una variazione aggiorno, altrimenti non faccio nulla  
  77.   if (Numero != OldNumero){
  78.     OldNumero = Numero;
  79.     Display(Numero);
  80.     Serial.print("Marcia: ");
  81.     Serial.println(Numero);  
  82.     tempo = millis();
  83.   }
  84.  
  85.   // dopo 500ms senza segnali sugli ingressi visualizzo n
  86.   if (digitalRead(i1)&&digitalRead(i2)&&digitalRead(i3)&&digitalRead(i4)&&digitalRead(i5))
  87.     // per evitare di visualizzare n nei transitori
  88.     if (millis() - tempo > 500){
  89.       tempo = millis();
  90.       Numero = 11;
  91.     }  
  92.  
  93.   if (digitalRead(i1)== LOW)                
  94.     Numero = 1;
  95.  
  96.   if (digitalRead(i2)== LOW)
  97.     Numero = 2;
  98.  
  99.   if (digitalRead(i3)== LOW)
  100.     Numero = 3;
  101.  
  102.   if (digitalRead(i4)== LOW)
  103.    Numero = 4;
  104.  
  105.   if (digitalRead(i5)== LOW)
  106.    Numero = 5;
  107.  
  108.   if (digitalRead(ir)== LOW)
  109.    Numero = 12;  
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement