#include <OneButton.h>
//a,b,c,d,e,f,g
const byte segValue[10][7] = {
{0,0,0,0,0,0,1}, //0
{1,0,0,1,1,1,1}, //1
{0,0,1,0,0,1,0}, //2
{0,0,0,0,1,1,0}, //3
{1,0,0,1,1,0,0}, //4
{0,1,0,0,1,0,0}, //5
{0,1,0,0,0,0,0}, //6
{0,0,0,1,1,1,1}, //7
{0,0,0,0,0,0,0}, //8
{0,0,0,0,1,0,0} //9
};
const byte segPin[8]={2,3,4,5,6,7,8}; //{a,b,c,d,e,f,g}
const byte DIGIT_PIN[2] = {A0,A1}; //segment
// définition des boutons
const byte BTN_PLUS = 9;
const byte BTN_MINUS = 10;
const byte BTS_RESET = 11;
long time_display = 0;
long time_count = 0;
byte score_player_A = 0, score_player_B = 0;
byte set_player_A = 0, set_player_B = 0;
bool set_over = false;
OneButton button_plus, button_minus, button_reset;
void setup() {
for(int i=0;i<10;i++){
pinMode(segPin[i], OUTPUT);
}
pinMode(DIGIT_PIN[0], OUTPUT);
pinMode(DIGIT_PIN[1], OUTPUT);
digitalWrite(DIGIT_PIN[0], LOW);
digitalWrite(DIGIT_PIN[1], LOW);
//pinMode(BTN_PLUS, INPUT_PULLUP);
button_plus.setup(BTN_PLUS, INPUT_PULLUP, true);
button_plus.attachClick(plus_player_A);
}
void loop()
{
// rafraichissement de l'affichage
if((millis() - time_display) > 50)
{
display_N(score_player_A);
time_display = millis(); // on met à jour le temps
}
button_plus.tick();
/*
// traitement des boutons
if((millis() - time_count) > 500)
{
plus_player_A();
time_count = millis(); // on met à jour le temps
}
*/
}
// Fonctions pour ajouter un point au player a
void plus_player_A()
{
// Si le bouton est enfoncé
if (digitalRead(BTN_PLUS) == LOW) {
if(!set_over)
score_player_A++;
if(!set_over && update_set_player_A()) {
set_player_A++;
set_over = true;
}
// Attendez que le bouton soit relâché
// (pour éviter que la valeur ne soit continuellement
// mise à jour tout en maintenant le bouton enfoncé)
while (digitalRead(BTN_PLUS) == LOW)
display_N(score_player_A);
}
}
// return vrai si on doit mettre à jour le nombre de set du player A
bool update_set_player_A() {
bool result = false;
if(score_player_A == 11 && score_player_B < 10) {
result = true;
} else if(score_player_A > 11 && (score_player_A - score_player_B == 2)) {
result = true;
}
return result;
}
void display_N(int num)
{
int hex = num % 10;
int dec = (num % 100) / 10;
for(int i=0; i<100; i++)
{
segOutput(1, hex, 1);
segOutput(0, dec, 1);
}
}
//LED
void segClear(){
for(int i=0;i<8;i++){
digitalWrite(segPin[i], HIGH);
}
}
//LED
void segOutput(int d, int Number, int dp){
segClear();
digitalWrite(DIGIT_PIN[d], HIGH);
for(int i=0;i<7;i++){
digitalWrite(segPin[i], segValue[Number][i]);
}
digitalWrite(segPin[7], dp);
delayMicroseconds(1000);
digitalWrite(DIGIT_PIN[d], LOW);
}