#include <OneButton.h>
#define pin_BP_START 8
OneButton bouton(pin_BP_START);
#define PIN_bouton_1 2
#define PIN_bouton_2 3
#define Pin_Led_1 10
#define Pin_Led_2 9
byte Led[]= {0,9,10};
volatile byte gagnant = 0;
byte f = 0;
bool raz = false;
static unsigned long prevMillis = 0;
const unsigned int LED_Temps_clignotement = 500;
void Joueur_1_gagne();
void Joueur_2_gagne();
void Reset();
void clignote(byte vainqueur){
Serial.print(F("Le joueur "));
Serial.print(vainqueur );
Serial.println(F(" a gagne !"));
f=0;raz=false;
unsigned long debut=millis();
while(f<10)
{
bouton.tick();
if(millis()>(debut+500))
{
f++;debut=millis();digitalWrite(Led[vainqueur], !digitalRead(Led[vainqueur]));
}
}
}
ISR (INT0_vect)
{
EIMSK=0b00000000;//dévalide les interruptions INT0 et INT1
gagnant=1;//pour case 1 dans le tableau des leds
}
ISR (INT1_vect)
{
EIMSK=0b00000000;//dévalide les interruptions INT0 et INT1
gagnant=2;//pour case 2dans le tableau des leds
}
void Reset()
{ if(!raz){//si ce n'est pas un double appel
EIMSK=0b00000011; //revalide les interruptions INT0 et INT1
gagnant=0;
Serial.println(F("Attention, le jeu recommence !"));
f=10;//our forcer la boucle for à cesser
raz=true;//pour eviter un double appel de la fonction reset
digitalWrite(Led[1], LOW);//force l'extinction des leds si besoin
digitalWrite(Led[2], LOW);
sei();
}
}
void setup()
{
Serial.begin(115200);
DDRD&=0b00000011;//0=entrée
PORTD|=0b00001100;//1=pullup
EIMSK=0b00000011;//valide into et int1
EICRA=0b00001010;//flanc descendant sur int0 et int1
Serial.println("Demarrage !");
pinMode(Pin_Led_1, OUTPUT);
pinMode(Pin_Led_2, OUTPUT);
pinMode(PIN_bouton_1, INPUT_PULLUP);
pinMode(PIN_bouton_2, INPUT_PULLUP);
bouton.attachClick(Reset);
}
void loop(){
bouton.tick();
if (gagnant){clignote(gagnant);Reset();}
}