Bonjour eatyone
Voici le code , à optimiser et personnaliser selon ses besoins.
#include <Button.h>
#include <LiquidCrystal_I2C.h>
#include "TM1637Display.h"
#include <Servo.h>
Button bouton(6);
LiquidCrystal_I2C lcd(0x27,16,2);
TM1637Display display(8, 9);
TM1637Display display2(11, 10);
Servo Bras1;
const unsigned long blinkDuration = 10000;
const unsigned long blinkPeriod = 500;
const int ledbuzzer=5;
const int led1rouge=23;
const int led2rouge=25;
const int led3rouge=27;
const int led4rouge=29;
const int ledverte=33;
const int interu=42;
const int inter_rouge=48;
const int inter_vert=50;
const int pin_INTERRUPTEUR = 44; //47
boolean boutonEvent = false;
boolean AppuiBouton = false;
boolean AppuiBouton2 = false;
int joueson=1;
int i;
int j;
int k;
int m;
int pos=1;
int premier;
int deuxieme;
int troisieme;
int quatrieme;
int positionjeu=0; // position dans le jeu
int leson;
int reward;
unsigned long lightNumberTempo;
unsigned long lightNumberMillis = millis() + lightNumberTempo;
unsigned long lightNumberTempo2;
unsigned long lightNumberMillis2 = millis() + lightNumberTempo2;
unsigned long lightNumberTempo3;
unsigned long lightNumberMillis3 = millis() + lightNumberTempo3;
unsigned long lightNumberTempo4;
unsigned long lightNumberMillis4 = millis() + lightNumberTempo4;
void setup() {
pinMode(pin_INTERRUPTEUR, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(2,0);
lcd.print("BUZZER POUR");
lcd.setCursor(1,1);
lcd.print("LANCER LE JEU");
pinMode(6, INPUT_PULLUP);
display.setBrightness(5);
display.clear();
display2.setBrightness(5);
display2.clear();
Bras1.attach(2);
Bras1.write(180);
}
void loop() {
clignote();
if (digitalRead(interu) == LOW)
{digitalWrite(inter_rouge, HIGH); digitalWrite(inter_vert,LOW); reward=1200;}
else
{digitalWrite(inter_vert, HIGH); digitalWrite(inter_rouge,LOW); reward=800;}
if (bouton.pressed())
{
boutonEvent = true;
}
if (AppuiBouton == true && positionjeu ==2)
{
if (millis() - lightNumberMillis >= lightNumberTempo)
{
i ++;
if (i > 9){i = 0;}
depart();
lightNumberMillis = millis();
tone (51, 1000*joueson,50);
}
}
if (AppuiBouton == true && positionjeu == 3)
{
if (millis() - lightNumberMillis2 >= lightNumberTempo2)
{
j ++;
if (j > 9){j = 0;}
depart();
lightNumberMillis2 = millis();
tone (51, 1000*joueson,50);
}
}
if (AppuiBouton == true && positionjeu == 4)
{
if (millis() - lightNumberMillis3 >= lightNumberTempo3)
{
k++;
if (k > 9){k = 0;}
depart();
lightNumberMillis3 = millis();
tone (51, 1000*joueson,50);
}
}
if (AppuiBouton == true && positionjeu == 5)
{
if (millis() - lightNumberMillis4 >= lightNumberTempo4)
{
m++;
if (m > 9){m = 0;}
depart();
lightNumberMillis4 = millis();
tone (51, 1000*joueson,50);
}
}
if(boutonEvent == true && positionjeu==0)
{
// Ecrit la structure en mémoire
lcd.clear();
lcd.setCursor(0,0);
lcd.print("GENERATION DE LA");
lcd.setCursor(0,1);
lcd.print("COMBINAISON ...");
premier=random(10);
deuxieme=random(10);
troisieme=random(10);
quatrieme=random(10);
aleatoire();
i = 0;
j = 0;
k = 0;
m = 0;
lcd.clear();
lcd.setCursor(2,0);
lcd.print("BUZZER POUR");
lcd.setCursor(0,1);
lcd.print("HACKER LE COFFRE");
positionjeu = 1;
boutonEvent = false;
depart();
if (digitalRead(interu) == LOW)
{lightNumberTempo = 150; lightNumberTempo2 = 110; lightNumberTempo3 = 80; lightNumberTempo4 = 40;}
else
{lightNumberTempo = 250;lightNumberTempo2 = 210;lightNumberTempo3 = 180;lightNumberTempo4 = 140;}
}
if(boutonEvent == true && positionjeu==1)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("HACK EN COURS");
lcd.setCursor(2,1);
lcd.print("NIVEAU 1 ...");
positionjeu = 2;
boutonEvent = false;
AppuiBouton = true;
}
if(boutonEvent == true && positionjeu==2)
{
if (premier==i) {
digitalWrite(led1rouge,HIGH);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("HACK EN COURS");
lcd.setCursor(2,1);
lcd.print("NIVEAU 2 ...");
positionjeu = 3;
boutonEvent = false;
AppuiBouton = true;
depart();
}
else {AppuiBouton = false;
positionjeu = 9;
perdu();
}
}
if(boutonEvent == true && positionjeu == 3)
{
if (deuxieme==j) {
digitalWrite(led2rouge,HIGH);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("HACK EN COURS");
lcd.setCursor(2,1);
lcd.print("NIVEAU 3 ...");
AppuiBouton = true;
positionjeu = 4;
boutonEvent = false;
depart();
}
else {
AppuiBouton = false;
positionjeu = 9;
perdu();
}
}
if(boutonEvent == true && positionjeu == 4)
{
if (troisieme==k) {
digitalWrite(led3rouge,HIGH);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("HACK EN COURS");
lcd.setCursor(2,1);
lcd.print("NIVEAU 4 ...");
AppuiBouton = true;
positionjeu = 5;
boutonEvent = false;
depart();
}
else {AppuiBouton = false;
positionjeu = 9;
perdu();
}
}
if(boutonEvent == true && positionjeu == 5)
{
if (quatrieme==m) {
gagne();
AppuiBouton = true;
positionjeu = 6;
boutonEvent = false;
delay(2000);
lcd.clear();
lcd.setCursor(3,0);
lcd.print("RECOMPENSE");
lcd.setCursor(4,1);
lcd.print("EN COURS");
delay(1000);
Bras1.write(0);
delay(1*reward);
Bras1.write(120);
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PROCHAINE PARTIE");
lcd.setCursor(3,1);
lcd.print("DANS 3 ...");
delay(1000);
lcd.setCursor(3,1);
lcd.print("DANS 2 ...");
delay(1000);
lcd.setCursor(3,1);
lcd.print("DANS 1 ...");
delay(1000);
positionjeu = 0;
boutonEvent = false;
lcd.clear();
lcd.setCursor(2,0);
lcd.print("BUZZER POUR");
lcd.setCursor(2,1);
lcd.print("RECOMMENCER");
}
else {AppuiBouton = false;
positionjeu = 9;
perdu();
}
}
if (boutonEvent == true && positionjeu == 9)
{
positionjeu = 0;
boutonEvent = false;
digitalWrite(51,LOW);
lcd.clear();
lcd.setCursor(6,0);
lcd.print("FIN");
lcd.setCursor(3,1);
lcd.print("DE PARTIE");
lcd.clear();
lcd.setCursor(2,0);
lcd.print("BUZZER POUR");
lcd.setCursor(2,1);
lcd.print("RECOMMENCER");
eteindre();
}
}
void aleatoire ()
{
display.setSegments(tire, 1, 0);
tone (51, 200*joueson,50);
delay(250);
display.showNumberDec(premier, true, 1, 0); // (Nombre à afficher, pas touche , pas touche , position sur ecran à gauche = 0 à droite = 3)
delay(250);
tone (51, 200*joueson,50);
display.setSegments(tire, 1, 1);
delay(250);
display.showNumberDec(deuxieme, true, 1, 1);
delay(250);
tone (51, 200*joueson,50);
display.setSegments(tire, 1, 2);
delay(250);
display.showNumberDec(troisieme, true, 1, 2);
delay(250);
tone (51, 200*joueson,50);
display.setSegments(tire, 1, 3);
delay(250);
display.showNumberDec(quatrieme, true, 1, 3);
delay(250);
tone (51, 1000*joueson,400);
}
void depart ()
{
display2.showNumberDec(i, true, 1, 0);
display2.showNumberDec(j, true, 1, 1);
display2.showNumberDec(k, true, 1, 2);
display2.showNumberDec(m, true, 1, 3);
}
void allume ()
{
digitalWrite(led1rouge,HIGH);
digitalWrite(led2rouge,HIGH);
digitalWrite(led3rouge,HIGH);
digitalWrite(led4rouge,HIGH);
}
void eteindre ()
{
digitalWrite(led1rouge,LOW);
digitalWrite(led2rouge,LOW);
digitalWrite(led3rouge,LOW);
digitalWrite(led4rouge,LOW);
digitalWrite(ledverte,LOW);
}
void perdu ()
{
lcd.clear();
lcd.setCursor(5,0);
lcd.print("PERDU !");
lcd.setCursor(0,1);
lcd.print("MAUVAIS TIMING !");
allume();
tone (51,200*joueson,350);
delay(300);
eteindre();
tone (51,200*joueson,30);
delay(300);
allume();
tone (51,200*joueson,30);
delay(300);
eteindre();
tone (51,200*joueson,30);
delay(300);
allume();
tone (51,200*joueson,30);
delay(300);
eteindre();
}
void gagne ()
{
lcd.clear();
lcd.setCursor(5,0);
lcd.print("BRAVO !");
lcd.setCursor(1,1);
lcd.print("COFFRE OUVERT !");
allume();
delay(300);
tone (51,1300*joueson,30);
eteindre();
delay(300);
allume();
delay(300);
tone (51,1300*joueson,30);
eteindre();
digitalWrite(ledverte,HIGH);
delay(300);
tone (51,1500*joueson,30);
digitalWrite(ledverte,LOW);
delay(300);
tone (51,1500*joueson,40);
digitalWrite(ledverte,HIGH);
delay(300);
tone (51,1500*joueson,50);
digitalWrite(ledverte,LOW);
delay(300);
tone (51,1500*joueson,400);
digitalWrite(ledverte,HIGH);
}
void clignote ()
{
static unsigned long startms = 0;
static unsigned long blinkms = 0;
startms = millis(); // init time
if (boutonEvent == false && positionjeu==0 && startms && millis() - startms <= blinkDuration)
{
if (millis() - blinkms >= blinkPeriod)
{
if (pos>6) {pos=1;}
if (pos==1) { eteindre (); digitalWrite(led1rouge, HIGH); }
if (pos==2) { eteindre (); digitalWrite(led2rouge, HIGH); }
if (pos==3) { eteindre (); digitalWrite(led3rouge, HIGH); }
if (pos==4) { eteindre (); digitalWrite(led4rouge, HIGH); }
if (pos==5) { eteindre (); digitalWrite(led3rouge, HIGH); }
if (pos==6) { eteindre (); digitalWrite(led2rouge, HIGH); }
pos++;
blinkms = millis();
}
if (digitalRead(buttonPin) == 0) {
// JE MAINTIEN APPUYER
eteindre ();
lcd.clear();
lcd.setCursor(2,0);
lcd.print("STATISTIQUES");
lcd.setCursor(4,1);
lcd.print("PARTIES");
delay(1000);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("JOUEES : ");lcd.print(valeur_1);
lcd.setCursor(1,1);
lcd.print("GAGNEES : "); lcd.print(valeur_2);
delay(3500);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("TAUX REUSSITE");
lcd.setCursor(5,1);
lcd.print(valeur_3);lcd.print(" %");
delay(3500);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("BUZZER POUR");
lcd.setCursor(5,1);
lcd.print("JOUER");
}
else {} //RELACHE
if (digitalRead(buttonPin2) == 0 && AppuiBouton2 == false) {
joueson = 0;
lcd.clear();
lcd.setCursor(6,0);
lcd.print("SON");
lcd.setCursor(4,1);
lcd.print("INACTIF");
delay(1000);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("BUZZER POUR");
lcd.setCursor(5,1);
lcd.print("JOUER");
AppuiBouton2= true;
}
if (digitalRead(buttonPin2) == 0 && AppuiBouton2 == true) {
joueson = 1;
tone (51,1500,200);
lcd.clear();
lcd.setCursor(6,0);
lcd.print("SON");
lcd.setCursor(5,1);
lcd.print("ACTIF");
delay(1000);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("BUZZER POUR");
lcd.setCursor(5,1);
lcd.print("JOUER");
AppuiBouton2= false;
}
}
else
{
startms = 0;
}
}
Bon week-end