Go Down

Topic: Compteur de points pour SNOOKER clavier 16 touches-afficheur 4 digits 7 segments (Read 649 times) previous topic - next topic

Palou72

Bonjour, un petit programme sans prétention pour compter les points pour un joueur ; par exemple ici pour au billard snooker, le maximum de points à additionner est 7, le chiffre peut être changé en fonction du sport ou du jeu.

Le fonctionnement est primaire, il suffit de taper le nombre de points réalisés et le total est affiché direct ; pour remise à zéro taper *.

Un programme pour deux joueurs est à l'étude mais encore un bug à résoudre.

Matériel utilisé :
Clavier 16 touches,.
Afficheur 4 digits 7 segments
Carte arduino 2560 (uno devrait suffire)
8 résistances 220 ohms

Code: [Select]

// clavier 16 touches + afficheur 4 digits 7segments
#include <Keypad.h>
//--- Constantes utilisées avec le clavier matriciel 4x4
const int LIGNES = 4; // 4 lignes
const int COLONNES = 4; // 4 colonnes
// --- Déclaration des constantes des broches E/S numériques ---

const int C4=8; // Constante pour la broche 2
const int C3=9; // Constante pour la broche 3
const int C2=10; // Constante pour la broche 4
const int C1=11; // Constante pour la broche 5

const int L4=4; // Constante pour la broche 16
const int L3=5; // Constante pour la broche 17
const int L2=6; // Constante pour la broche 18
const int L1=7; // Constante pour la broche 19

// --- Déclaration des variables globales ---

//--- Définition des touches
char touches[LIGNES][COLONNES] = { // tableau de char à 2 dimensions
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

// tableaux de lignes et colonnes
byte BrochesLignes[LIGNES] = {7, 6, 5, 4}; //connexions  broches de lignes du clavier
byte BrochesColonnes[COLONNES] = {11, 10, 9, 8}; //connexions broches de colonnes du clavier

char touche; // variable de stockage valeur touche appuyée
unsigned int valeur; // variable pour valeur saisie
int son= 0;
int soa= 0;
int compte = 0;
String chaine ="";
String chaine2 ="";
// création d'un objet keypad = initialisation clavier
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
const byte a = 46;
const byte b = 44;
const byte c = 42;
const byte d = 40;
const byte e = 38;
const byte f = 36;
const byte g = 34;
const byte p = 32;
const byte d4 = 30;
const byte d3 = 28;
const byte d2 = 26;
const byte d1 = 24;
long n = 0;
int x = 100;
int del = 5;
int count = 0;
void setup()
{

  pinMode(d1, OUTPUT);
  pinMode(d2, OUTPUT);
  pinMode(d3, OUTPUT);
  pinMode(d4, OUTPUT);
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(p, OUTPUT);
 Serial.begin(115200);
 }
void loop()
{
while (true){
char touche = clavier.getKey();
if (touche != NO_KEY){
 if (touche== '*' ){// remise à 0
   n = 0;
    break;
  }
    int valeur = touche - 48;
  if ((valeur>=1) && (valeur<=7)){
  n = n + valeur;
  break;//fin while
   }
  }// no key

  clearLEDs();//efface l'écran d'affichage
  pickDigit(0);//Allumez s d1
  pickNumber((n/1000));// get the value of thousand
  delay(del);//delay 5ms

  clearLEDs();//efface l'écran d'affichage
  pickDigit(1);//Allumez  d2
  pickNumber((n%1000)/100);//  obtenir la valeur de cent
  delay(del);//delay 5ms

  clearLEDs();//efface l'écran d'affichage à
  pickDigit(2);//Allumez  d3
  pickNumber(n%100/10);// obtenir la valeur de dix
  delay(del);//delay 5ms

  clearLEDs();// efface l'écran d'affichage
  pickDigit(3);//Allumez d4                 
  pickNumber(n%10);//  Obtenir la valeur d'un chiffre
  delay(del);//delay 5ms
  }//fin while
}
/**************************************/
void pickDigit(int x) //allumer un affichage à 7 segments
{
  // L'affichage LED à 7 segments est un écran à cathode commune. Donc, utilisez aussi digitalWrite pour régler d1 aussi haut et s'éteindra
  digitalWrite(d1, HIGH);
  digitalWrite(d2, HIGH);
  digitalWrite(d3, HIGH);
  digitalWrite(d4, HIGH);

  switch(x)
  {
    case 0:
    digitalWrite(d1, LOW);// d1 up
    break;
    case 1:
    digitalWrite(d2, LOW); // d2 up
    break;
    case 2:
    digitalWrite(d3, LOW); //Light d3 up
    break;
    default:
    digitalWrite(d4, LOW); //Light d4 up
    break;
  }
}
//La fonction contrôle l'affichage pour afficher les numéros
void pickNumber(int x)
{
  switch(x)
  {
    default:
    zero();
    break;
    case 1:
    one();
    break;
    case 2:
    two();
    break;
    case 3:
    three();
    break;
    case 4:
    four();
    break;
    case 5:
    five();
    break;
    case 6:
    six();
    break;
    case 7:
    seven();
    break;
    case 8:
    eight();
    break;
    case 9:
    nine();
    break;
  }
}
void clearLEDs() //efface l'écran d'affichage
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(p, LOW);
}

void zero() //affichage à  0
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
}

void one() //affichage à  1
{
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void two() //affichage  2
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
}
void three() //affichage à  3
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
}

void four() //affichage à  4
{
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void five() //affichage à  5
{
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void six() //affichage à  6
{
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void seven() //affichage à  7
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void eight() //affichage à  8
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void nine() //affichage à 9
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}


Go Up