Bombe Airsoft Mode Domination v1
Description :
La Bombe Airsoft Mode Domination v1 est un dispositif interactif conçu pour animer des scénarios de jeu en mode « Domination ». Le système est équipé d’un clavier matriciel à membrane 16 touches permettant de saisir facilement les différents paramètres du jeu directement sur l’Arduino.
Les paramètres programmables incluent :
- Le temps total de la partie,
- Le délai avant le début du jeu (compte à rebours pré-partie).
Une fois la partie lancée, chaque équipe dispose d’un bouton dédié. Lorsqu’un joueur appuie sur le bouton de son équipe, le temps associé à cette équipe commence à s’incrémenter. Un anneau LED (ring LED) affiche alors la couleur correspondant à l’équipe active, offrant une indication visuelle immédiate du contrôle de l’objectif.
Lorsque l’une des deux équipes atteint le temps programmé, un affichage visuel indique automatiquement l’équipe gagnante.
Un relais a également été ajouté afin de signaler le début et la fin de la partie, permettant par exemple d’activer une alarme, un buzzer ou un signal lumineux externe.
Prérequis :
- 1 x Carte Arduino Uno
- 1 x LCD 20×4 2004 avec adaptateur d interface série IIC I2C
- 1 x Anneau LED x12 RGB WS2812
- 2 x Bouton
- 1 x KY-019 module relais 5V
- 1 x Clavier matricé à membrane 16 touches
- 1 x Buzzer passif 5v
- 1 x Résistance 220Ω
- 1 x Breadboard
Version IDE :
- Arduino IDE 2.3.5
Bibliothèque :
- Keypad.h (version 3.1.1)
- LiquidCrystal_I2C.h(version: 1.1.4 par
johnrickman) - Adafruit_NeoPixel.h (version 1.15.2 par Adafruit)
Vidéo de démonstration :
Schéma de câblage :


Code :
Code Arduino :
//Gestion des entrées//////////////////
const int BtRouge = A1; //Pin du bouton Rouge
const int BtVert = A2; //Pin du bouton Vert
//Variable gestion entrées
bool EtatBtRouge;
bool EtatBtVert;
///////////////////////////////////////
//Gestion des sorties//////////////////
const int bipper = 12; //Broche du bipper
const int relayalarme = 10; //Broche Relay alarme
///////////////////////////////////////
//Gestion RING Led//////////////////
#include <Adafruit_NeoPixel.h>
#define PIN 11 // Pin du pixels du ring LED
#define NUMPIXELS 12 // Nombre de pixels du ring LED
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
//Variable gestion RING Led
int Pixelsshow;
///////////////////////////////////////
//Gestion Keypad///////////////////////
#include <Keypad.h>
const byte ROWS = 4; //quatre rangées
const byte COLS = 4; //quatre colonnes
//définir les symboles sur les boutons des claviers
char hexaKeys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
byte rowPins[ROWS] = { 9, 8, 7, 6 }; //connecter aux broches de rangée du clavier
byte colPins[COLS] = { 5, 4, 3, 2 }; //se connecter aux broches de colonne du clavier
//initialiser une instance de la classe NewKeypad
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
///////////////////////////////////////
//Gestion LCD /////////////////////////
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
char customKey;
byte tiretdroite[8] = { B00001, B00001, B00001, B00001, B00001, B00001, B00001, B00001 };
byte tiretgauche[8] = { B10000, B10000, B10000, B10000, B10000, B10000, B10000, B10000 };
byte barrepleinechargement[8] = { B11111, B00000, B11111, B11111, B11111, B11111, B00000, B11111 };
byte barrevidechargement[8] = { B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111 };
byte fleche[] = { B00000, B00100, B00010, B11111, B00010, B00100, B00000, B00000 };
///////////////////////////////////////
//Variables programme//////////////////
int NavModejeu = 1; //Navigation mode jeu
int Modedejeu = 0; //Stock le N° du jeu selectionner
int NavModeDomination = 0; //Navigation dans mode Domination
int TpsjeuDomination[7] = { 0, 0, 0, 0, 0, 0, 0 }; //Stock la valeur des temps(H,H,M,M,S,S,M)
int GestionTemps[6] = { 0, 0, 0, 0, 0, 0 };
char msg[20];
boolean Btactif[2] = { 0, 0 };
///////////////////////////////////////
//Variables Timer//////////////////
unsigned long currentMillis;
unsigned long Clignotementsaisie;
unsigned long Timersecpartie;
unsigned long previousMillis1;
unsigned long previousMillis2;
///////////////////////////////////////
//Variable Bt reset
unsigned long Timereset = 0;
int ImpulsBtReset = 0; //Stock le nombre impulsion sur bouton reset
///////////////////////////////////////
void setup() {
pinMode(BtRouge, INPUT_PULLUP);
pinMode(BtVert, INPUT_PULLUP);
pinMode(relayalarme, OUTPUT);
pinMode(bipper, OUTPUT);
lcd.init();
lcd.backlight();
pixels.begin();
pixels.clear();
pixels.show();
lcd.createChar(2, tiretdroite);
lcd.createChar(3, tiretgauche);
lcd.createChar(4, barrepleinechargement);
lcd.createChar(5, barrevidechargement);
lcd.createChar(6, fleche);
intro();
chargement();
}
void loop() {
customKey = customKeypad.getKey();
currentMillis = millis();
btreset();
if (Modedejeu == 0) {
NavModejeuMenu();
selectmodejeu();
} else if (Modedejeu == 1) {
Domination();
}
}
void chargement() {
//BARRE CHARGEMENT ////////////////////
lcd.setCursor(1, 1);
lcd.write(byte(2));
for (int i = 2; i <= 17; i++) {
lcd.setCursor(i, 1);
lcd.write(byte(5));
}
lcd.setCursor(18, 1);
lcd.write(byte(3));
for (int i = 2; i <= 17; i++) {
lcd.setCursor(i, 1);
lcd.write(byte(4));
delay(100);
}
///////////////////////////////////////
}
void RingLEDAn1(int Vert, int Rouge) {
if (currentMillis - previousMillis1 >= 200) {
previousMillis1 = currentMillis;
if (Pixelsshow <= NUMPIXELS) {
if (Rouge == 1) {
pixels.setPixelColor(Pixelsshow, pixels.Color(150, 0, 0));
}
if (Vert == 1) {
pixels.setPixelColor(Pixelsshow, pixels.Color(0, 150, 0));
}
pixels.show();
Pixelsshow++;
}
if (Pixelsshow > NUMPIXELS - 1) {
Pixelsshow = 0;
pixels.clear();
}
}
}
void RingLEDAn2(int Couleur) {
if (currentMillis - previousMillis1 >= 200) {
previousMillis1 = currentMillis;
if (Couleur == 20) {
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(150, 0, 0));
}
} else {
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(0, 150, 0));
}
}
pixels.show();
} else {
pixels.clear();
pixels.show();
}
}
void bipper1(int Vert, int Rouge) {
if (currentMillis - previousMillis2 < 100) {
if (Rouge == 1) {
tone(bipper, 600);
}
if (Vert == 1) {
tone(bipper, 1000);
}
}
if (currentMillis - previousMillis2 > 100 && currentMillis - previousMillis2 < 200) {
noTone(bipper);
}
if (currentMillis - previousMillis2 > 200) {
previousMillis2 = currentMillis;
}
}
void intro() {
//INTRO BOMB SIMULATOR ////////////////
lcd.setCursor(0, 0);
lcd.print("-- Bomb simulator --");
lcd.setCursor(0, 3);
lcd.print(" -- V1.0 -- ");
delay(500);
///////////////////////////////////////
}
void Domination() {
//GESTION JEU DOMINATION //////////////
switch (NavModeDomination) {
case 0:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" -- DOMINATION -- ");
NavModeDomination++;
break;
case 1:
chargement();
NavModeDomination++;
break;
case 2:
lcd.setCursor(0, 1);
lcd.print(" Temps de jeu : ");
sprintf(msg, "%d%d:%d%d:%d%d", TpsjeuDomination[0], TpsjeuDomination[1], TpsjeuDomination[2], TpsjeuDomination[3], TpsjeuDomination[4], TpsjeuDomination[5]);
lcd.setCursor(6, 2);
lcd.print(msg);
NavModeDomination++;
break;
case 3:
//Saisie H
Clignotsaisie();
if (chiffre() == 0 || chiffre() == 1 || chiffre() == 2) {
TpsjeuDomination[0] = chiffre();
lcd.setCursor(6, 2);
lcd.print(TpsjeuDomination[0]);
NavModeDomination++;
}
NavModeDomination = NavModeDomination + btdroite();
NavModeDomination = NavModeDomination + btvalider();
break;
case 4:
//Saisie HH
Clignotsaisie();
if (chiffre() >= 0) {
TpsjeuDomination[1] = chiffre();
lcd.setCursor(7, 2);
lcd.print(TpsjeuDomination[1]);
NavModeDomination++;
}
NavModeDomination = NavModeDomination + btdroite();
NavModeDomination = NavModeDomination - btgauche();
NavModeDomination = NavModeDomination + btvalider();
break;
case 5:
//Saisie M
Clignotsaisie();
if (chiffre() >= 0 && chiffre() <= 5) {
TpsjeuDomination[2] = chiffre();
lcd.setCursor(9, 2);
lcd.print(TpsjeuDomination[2]);
NavModeDomination++;
}
NavModeDomination = NavModeDomination + btdroite();
NavModeDomination = NavModeDomination - btgauche();
NavModeDomination = NavModeDomination + btvalider();
break;
case 6:
Clignotsaisie();
if (chiffre() >= 0) {
TpsjeuDomination[3] = chiffre();
lcd.setCursor(10, 2);
lcd.print(TpsjeuDomination[3]);
NavModeDomination++;
}
NavModeDomination = NavModeDomination + btdroite();
NavModeDomination = NavModeDomination - btgauche();
NavModeDomination = NavModeDomination + btvalider();
break;
case 7:
Clignotsaisie();
if (chiffre() >= 0 && chiffre() <= 5) {
TpsjeuDomination[4] = chiffre();
lcd.setCursor(12, 2);
lcd.print(TpsjeuDomination[4]);
NavModeDomination++;
}
NavModeDomination = NavModeDomination + btdroite();
NavModeDomination = NavModeDomination - btgauche();
NavModeDomination = NavModeDomination + btvalider();
break;
case 8:
Clignotsaisie();
if (chiffre() >= 0) {
TpsjeuDomination[5] = chiffre();
lcd.setCursor(13, 2);
lcd.print(TpsjeuDomination[5]);
NavModeDomination++;
}
NavModeDomination = NavModeDomination + btdroite();
NavModeDomination = NavModeDomination - btgauche();
NavModeDomination = NavModeDomination + btvalider();
break;
case 9:
lcd.setCursor(0, 3);
lcd.print("Press # pour valider");
if (btgauche() == 1) {
lcd.setCursor(0, 3);
lcd.print(" ");
}
NavModeDomination = NavModeDomination - btgauche();
NavModeDomination = NavModeDomination + btvalider();
break;
case 10:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" -- DOMINATION -- ");
lcd.setCursor(0, 1);
lcd.print(" Debut du jeu : ");
NavModeDomination++;
break;
case 11:
Clignotsaisie();
if (chiffre() >= 0 && chiffre() <= 9) {
TpsjeuDomination[6] = chiffre();
lcd.setCursor(5, 2);
lcd.print(TpsjeuDomination[6]);
NavModeDomination++;
}
if (TpsjeuDomination[6] <= 1) {
lcd.setCursor(6, 2);
lcd.print(" minute ");
} else {
lcd.setCursor(6, 2);
lcd.print(" minutes");
}
NavModeDomination = NavModeDomination + btdroite();
NavModeDomination = NavModeDomination + btvalider();
break;
case 12:
lcd.setCursor(0, 3);
lcd.print("Press # pour valider");
if (btgauche() == 1) {
lcd.setCursor(0, 3);
lcd.print(" ");
}
NavModeDomination = NavModeDomination - btgauche();
NavModeDomination = NavModeDomination + btvalider();
break;
case 13:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" -- DOMINATION -- ");
NavModeDomination++;
break;
case 14:
sprintf(msg, "Tps jeu : %d%d:%d%d:%d%d", TpsjeuDomination[0], TpsjeuDomination[1], TpsjeuDomination[2], TpsjeuDomination[3], TpsjeuDomination[4], TpsjeuDomination[5]);
lcd.setCursor(0, 1);
lcd.print(msg);
sprintf(msg, "Debut jeu : %d min", TpsjeuDomination[6]);
lcd.setCursor(0, 2);
lcd.print(msg);
lcd.setCursor(0, 3);
lcd.print("Press # pour lancer");
NavModeDomination = NavModeDomination + btvalider();
break;
case 15:
lcd.clear();
GestionTemps[0] = TpsjeuDomination[6];
lcd.setCursor(0, 0);
lcd.print(" -- DOMINATION -- ");
lcd.setCursor(0, 1);
lcd.print(" Debut du jeu : ");
lcd.setCursor(6, 2);
sprintf(msg, "00:0%d:00", GestionTemps[0]);
lcd.print(msg);
NavModeDomination++;
break;
case 16:
if (Timersecpartie == 0) {
Timersecpartie = currentMillis;
} else if (currentMillis > (Timersecpartie + 1000)) {
if (GestionTemps[1] > 0) {
GestionTemps[1]--;
} else if (GestionTemps[1] == 0 && GestionTemps[0] > 0) {
GestionTemps[1] = 59;
GestionTemps[0]--;
} else {
NavModeDomination++;
}
Timersecpartie = currentMillis;
}
lcd.setCursor(10, 2);
sprintf(msg, "%d:%02d", GestionTemps[0], GestionTemps[1]);
lcd.print(msg);
break;
case 17:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" -- DOMINATION -- ");
lcd.setCursor(0, 2);
lcd.print(" good luck have fun ");
tone(bipper, 1000);
digitalWrite(relayalarme, HIGH);
delay(4000);
noTone(bipper);
digitalWrite(relayalarme, LOW);
NavModeDomination++;
break;
case 18:
for (int i = 0; i <= 5; i++) {
GestionTemps[i] = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" -- DOMINATION -- ");
lcd.setCursor(0, 1);
lcd.print("Equipe R Equipe V");
lcd.setCursor(0, 2);
lcd.print("00:00:00");
lcd.setCursor(12, 2);
lcd.print("00:00:00");
lcd.setCursor(0, 3);
lcd.print("Objectif :");
sprintf(msg, "%d%d:%d%d:%d%d", TpsjeuDomination[0], TpsjeuDomination[1], TpsjeuDomination[2], TpsjeuDomination[3], TpsjeuDomination[4], TpsjeuDomination[5]);
lcd.setCursor(12, 3);
lcd.print(msg);
NavModeDomination++;
break;
case 19:
EtatBtRouge = digitalRead(BtRouge);
EtatBtVert = digitalRead(BtVert);
if (EtatBtRouge == 0) {
Btactif[0] = 0;
Btactif[1] = 1;
} else if (EtatBtVert == 0) {
Btactif[0] = 1;
Btactif[1] = 0;
}
RingLEDAn1(Btactif[0], Btactif[1]);
bipper1(Btactif[0], Btactif[1]);
if (Timersecpartie == 0) {
currentMillis = millis();
Timersecpartie = currentMillis;
} else if (currentMillis > (Timersecpartie + 1000)) {
if (Btactif[0] == 1) {
GestionTemps[2]++;
} else if (Btactif[1] == 1) {
GestionTemps[5]++;
}
if (GestionTemps[5] > 59) {
GestionTemps[4]++;
GestionTemps[5] = 0;
}
if (GestionTemps[4] > 59) {
GestionTemps[3]++;
GestionTemps[4] = 0;
}
if (GestionTemps[2] > 59) {
GestionTemps[1]++;
GestionTemps[2] = 0;
}
if (GestionTemps[1] > 59) {
GestionTemps[0]++;
GestionTemps[1] = 0;
}
Timersecpartie = currentMillis;
}
lcd.setCursor(0, 2);
sprintf(msg, "%02d:%02d:%02d", GestionTemps[3], GestionTemps[4], GestionTemps[5]);
lcd.print(msg);
lcd.setCursor(12, 2);
sprintf(msg, "%02d:%02d:%02d", GestionTemps[0], GestionTemps[1], GestionTemps[2]);
lcd.print(msg);
if ((GestionTemps[0] >= ((TpsjeuDomination[0] * 10) + TpsjeuDomination[1])) && (GestionTemps[1] >= (TpsjeuDomination[2] * 10) + TpsjeuDomination[3]) && (GestionTemps[2] >= (TpsjeuDomination[4] * 10) + TpsjeuDomination[5])) {
NavModeDomination = 21;
lcd.clear();
}
if ((GestionTemps[3] >= ((TpsjeuDomination[0] * 10) + TpsjeuDomination[1])) && (GestionTemps[4] >= (TpsjeuDomination[2] * 10) + TpsjeuDomination[3]) && (GestionTemps[5] >= (TpsjeuDomination[4] * 10) + TpsjeuDomination[5])) {
NavModeDomination++;
lcd.clear();
}
break;
case 20:
digitalWrite(relayalarme, HIGH);
RingLEDAn2(NavModeDomination);
tone(bipper, 1000);
lcd.setCursor(0, 0);
lcd.print(" -- DOMINATION -- ");
lcd.setCursor(0, 2);
lcd.print(" Rouge WIN ");
break;
case 21:
digitalWrite(relayalarme, HIGH);
RingLEDAn2(NavModeDomination);
tone(bipper, 1000);
lcd.setCursor(0, 0);
lcd.print(" -- DOMINATION -- ");
lcd.setCursor(0, 2);
lcd.print(" VERT WIN ");
break;
}
}
int Clignotsaisie() {
int Cursor;
int PosTpsjeuDomination;
if (NavModeDomination == 3 || NavModeDomination == 4) {
Cursor = NavModeDomination + 3;
PosTpsjeuDomination = NavModeDomination - 3;
}
if (NavModeDomination == 5 || NavModeDomination == 6) {
Cursor = NavModeDomination + 4;
PosTpsjeuDomination = NavModeDomination - 3;
}
if (NavModeDomination == 7 || NavModeDomination == 8) {
Cursor = NavModeDomination + 5;
PosTpsjeuDomination = NavModeDomination - 3;
}
if (NavModeDomination == 11) {
Cursor = NavModeDomination - 6;
PosTpsjeuDomination = NavModeDomination - 5;
}
if (currentMillis < (Clignotementsaisie + 500) && btdroite() == 0 && btgauche() == 0 && btvalider() == 0) {
lcd.setCursor(Cursor, 2);
lcd.print(" ");
} else if (currentMillis >= (Clignotementsaisie + 500) && currentMillis < (Clignotementsaisie + 1600) || btdroite() == 1 || btgauche() == 1 || btvalider() == 1) {
lcd.setCursor(Cursor, 2);
lcd.print(TpsjeuDomination[PosTpsjeuDomination]);
} else if (currentMillis >= (Clignotementsaisie + 1600)) {
Clignotementsaisie = currentMillis;
}
}
int flechehaut() {
//GESTION BOUTON FLECHE HAUT ///////
int Saisie = 0;
if (customKey == 'A') {
Saisie = 1;
}
return Saisie;
///////////////////////////////////////
}
int flechebas() {
//GESTION BOUTON FLECHE BAS ///////
int Saisie = 0;
if (customKey == 'B') {
Saisie = 1;
}
return Saisie;
///////////////////////////////////////
}
int btgauche() {
//GESTION BOUTON FLECHE GAUCHE ///////
int Saisie = 0;
if (customKey == 'C') {
Saisie = 1;
}
return Saisie;
///////////////////////////////////////
}
int btdroite() {
//GESTION BOUTON FLECHE DROITE ///////
int Saisie = 0;
if (customKey == 'D') {
Saisie = 1;
}
return Saisie;
///////////////////////////////////////
}
int btvalider() {
//GESTION BOUTON VALIDER /////////////
int Saisie = 0;
if (customKey == '#') {
Saisie = 1;
}
return Saisie;
///////////////////////////////////////
}
int chiffre() {
//GESTION CHIFFREs /////////////
int Saisie = -1;
if (customKey == '1') {
Saisie = 1;
} else if (customKey == '2') {
Saisie = 2;
} else if (customKey == '3') {
Saisie = 3;
} else if (customKey == '4') {
Saisie = 4;
} else if (customKey == '5') {
Saisie = 5;
} else if (customKey == '6') {
Saisie = 6;
} else if (customKey == '7') {
Saisie = 7;
} else if (customKey == '8') {
Saisie = 8;
} else if (customKey == '9') {
Saisie = 9;
} else if (customKey == '0') {
Saisie = 0;
}
return (Saisie);
///////////////////////////////////////
}
void btreset() {
//GESTION BOUTON RESET ////////////////
if (customKey == '*' && Timereset == 0) {
Timereset = millis();
ImpulsBtReset++;
} else if (customKey == '*' && ImpulsBtReset == 3) {
reset();
} else if (customKey == '*' && Timereset > 0 && currentMillis < (Timereset + 2000)) {
ImpulsBtReset++;
} else if (Timereset > 0 && currentMillis > (Timereset + 2000)) {
ImpulsBtReset = 0;
Timereset = 0;
}
///////////////////////////////////////
}
void selectmodejeu() {
if (flechehaut() == 1 && Modedejeu == 0) {
NavModejeu--;
if (NavModejeu < 2) {
NavModejeu = 4;
}
}
if (flechebas() == 1 && Modedejeu == 0) {
NavModejeu++;
if (NavModejeu > 4) {
NavModejeu = 2;
}
}
if (btvalider() == 1 && Modedejeu == 0 && NavModejeu == 2) {
Modedejeu = NavModejeu - 1;
NavModejeu = 0;
}
if (btvalider() == 1 && Modedejeu == 0 && NavModejeu == 3) {
//Libre
}
if (btvalider() == 1 && Modedejeu == 0 && NavModejeu == 3) {
//Libre
}
}
void NavModejeuMenu() {
switch (NavModejeu) {
case 0:
break;
case 1:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SELECTION DU JEUX : ");
lcd.setCursor(2, 1);
lcd.print("Domination ");
lcd.setCursor(2, 2);
lcd.print("--------");
lcd.setCursor(2, 3);
lcd.print("--------");
NavModejeu++;
break;
case 2:
lcd.setCursor(0, 1);
lcd.write(byte(6));
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
break;
case 3:
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.write(byte(6));
lcd.setCursor(0, 3);
lcd.print(" ");
break;
case 4:
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.write(byte(6));
break;
default:
break;
}
}
void reset() {
pixels.clear();
pixels.show();
noTone(bipper);
lcd.clear();
lcd.setCursor(0, 0);
digitalWrite(relayalarme, LOW);
lcd.print(" - Bombe Reset. - ");
delay(2000);
//Variables à remettre à 0 pour le reset
NavModejeu = 1;
Modedejeu = 0;
ImpulsBtReset = 0;
Timereset = 0;
Timersecpartie = 0;
Pixelsshow = 0;
//Variable Mode Domination à remettre à 0 pour le reset
NavModeDomination = 0;
for (int i = 0; i <= 5; i++) {
GestionTemps[i] = 0;
}
Btactif[0] = 0;
Btactif[1] = 0;
Clignotementsaisie = 0;
}

Bonjour
Tout d’abord merci pour le projet que tu propose.
Je suis en train de regarder pour faire une bombe factice pour nos partie d’airsoft.
Mes connaissances électronique sont très limité.
Serait-il possible que tu m’aiguille sur cette partie ?
Projet:
Avec un pavé tactile saisie du code de désamorçage et du temps limité de partie.
Un buzzeur de fin de partie.
Un afficheur lcd simple pour l’affichage des donnés
Des leds pour le mode bombe amorcé et désamorcer.
Je peux prendre en photo le matériel que j’ai si tu accepte que l’on échange la dessus
Bonjour
On va regarder ensemble contact moi sur Facebook.
« Projetsduino »
Cordialement