Exercice : Machine de vote (version avec tableau)

Simulateur

Cet exercice est à réaliser avec le simulateur en ligne Wokwi

Équations du système de vote

Le comité directeur d'une entreprise est constitué de quatre membres :

  • le directeur D

  • ses trois adjoints A, B, C.

Voici le fonctionnement du vote lors des réunions :

  • les décisions sont prises à la majorité,

  • chaque personne dispose d'un interrupteur pour voter sur lequel elle appuie en cas d'accord avec le projet soumis au vote,

  • en cas d'égalité du nombre de voix, celle du directeur compte double.

On vous demande de réaliser un dispositif logique permettant l'affichage du résultat du vote sur une LED.

Question

Établissez la table de vérité de commande du voyant en fonction des variables d'entrées.

Simulation

On se propose d'utiliser le schéma suivant pour simuler le fonctionnement de la machine de vote :

Schéma d'une machine de voteInformations[1]

De droite à gauche : directeur, adjoint a, adjoint b, adjoint c.

Question

Vous réaliserez et testerez une implémentation du système de vote utilisant un tableau qui permettra de stocker la table de vérité.

Solution

1
#define LED_ON B00000100
2
#define LED_OFF B11111011
3
#define PORTD_INITIAL B00000100
4
#define MASK B11110000
5
6
#define PORT_LED 2
7
8
9
bool table[]={0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1};
10
byte votes;
11
12
13
void setup(){
14
  DDRD = PORTD_INITIAL; //Réglage du sens des bits de port
15
  PORTD = PORTD & LED_OFF;//Extinction de la LED
16
}
17
18
void loop()
19
{
20
  //Lecture des entrées
21
  votes = (PIND & MASK) >> 4; //masquage du quartet poids faibles et décalage gauche de 4 positions
22
  
23
  //Ecriture 
24
  if(table[votes]){
25
      PORTD = PORTD | LED_ON;
26
27
      //digitalWrite(PORT_LED, HIGH); //Variante
28
29
  }
30
  else{
31
          PORTD = PORTD & LED_OFF;
32
33
      //digitalWrite(PORT_LED, LOW); //Variante   
34
35
}
36
37
/* Autre variante en replacement du if...else : digitalWrite(PORT_LED,table[votes]); */
38
39
}
40
/*
41
D C B A  Voyant
42
0 0 0 0  0
43
0 0 0 1  0
44
0 0 1 0  0
45
0 0 1 1  0
46
0 1 0 0  0
47
0 1 0 1  0
48
0 1 1 0  0
49
0 1 1 1  1
50
1 0 0 0  0
51
1 0 0 1  1
52
1 0 1 0  1
53
1 0 1 1  1
54
1 1 0 0  1
55
1 1 0 1  1
56
1 1 1 0  1
57
1 1 1 1  1
58
*/
59