Le forum a migré vers l'adresse suivante:

Forum

Masquer ce message

Simple-Duino Index du Forum



Bombe factice airsoft arduino .
Aller à la page: 1, 2  >

 
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Projets
Sujet précédent :: Sujet suivant  
Auteur Message
Kryloris
Débutant

Hors ligne

Inscrit le: 11 Sep 2014
Messages: 10
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Jeu 11 Sep - 17:51 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

PublicitéSupprimer les publicités ?
Bonjour a tous, je débute dans l'arduino, donc je galère un peu a modifier un programme, enfin juste faire a rajout pour avoir un bip sonore lors du décompte de la bombe factice.

Voici le programme complet arduino qui fonctionne a merveille ( by pic pac )



/********************************************************************************
**********
* Airsoft C4 Prop by Joshua Burgess
* v2 modify by PIC-PAC
* 13/08/2013
********************************************************************************
***********/

/********************************************************************************
**********
*
* TO DO
* ajouter option fil à couper
********************************************************************************
***********/

#include <Keypad.h>

#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
// set up the LCD's number of columns and rows:


const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {A1, A2, A3, A4}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 6, 7}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

Code:
// Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

#define ledpin 13

void setup()
{
  pinMode(ledpin,OUTPUT);
  digitalWrite(ledpin, HIGH);
  Serial.begin(9600);
}

void loop()
{
  char key = kpd.getKey();
  if(key)  // Check for a valid key.
  {
    switch (key)
    {
        default:
        Serial.println(key);
    }
  }
}







//Define all the bomb states
#define READY 0
#define ARMED 1
#define DISARMED 2
#define DETONATED 3
#define speakerPin 2

int second=30, minute=1, hour=0; // declare time variables
int bombState=0; //0 = Ready, 1 = Armed, 2 = Disarmed, 3 = detonated
int repeat=0;//flag to prevent repeat of getArmCode();
int repeatAdm=0; //flag to prevent repeat of getAadminCode();
int repeatDisarm=0;//flag to prevent repeat of getDisarmCode();
int repeatBuzzer=0;//flag to prevent buzzer from running multiple times.
int repeatTimerEdit=0;//flag to prevent repeat of timer edit function
//int speakerPin = 2;//pin that the piezo buzzer is connected to.
int blinkArmed = 0; // flag for blink text
int blinkDisarmed = 0; // flag to blink disarmed msg
int nbBlinkDisarmed = 6; // flag for number of blink disarmed msg (real number of blink = nbBlinkDisarmed / 2)
long previousTime = 0;//holds previous time in ms
long previousDelay = 0;//holds previous time in ms since buzzer was active
long interval = 60000;//60 second delay

char hour_str[4]; // For Convert int in char
char minute_str[4]; // For Convert int in char
char second_str[4]; // For Convert int in char
char timeInt_str[0]; // For Convert int in char
char newcode_str[0];
char newarmcode_str[0];
char newdisarmcode_str[0];


char ArmCode[] = "123456";//code to arm the bomb
char disarmCode[] = "123456";//code to disarm the bomb
char adminCode[] = "123456";//code to change timer

char ENTER_KEY = '#';
char CANCEL_KEY = '*';//stores the cancel key variable.
char timeSetKey = '*';//key to press to set the code.

void setup()
{lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(2, 0 );
lcd.print( "Bombe Factice" );
lcd.setCursor( 3, 1 );
lcd.print( "GOOD GAME" );
delay(2000);
lcd.setCursor( 2, 0 );
lcd.print( "Bombe Factice" );
lcd.setCursor( 3, 1 );
lcd.print( "BY PIC-PAC" );
delay(2000);
lcd.clear();
////backlightOn();
//blinkCursor();
//stopVscroll();
pinMode(speakerPin, OUTPUT);//sets the output pin for the piezo buzzer
}

void loop(){
switch (bombState) {
lcd.clear();

/***********************************************************
*Ready state prepares bomb, waits for arm code to be input
*
************************************************************/
case READY:
int resultOfGetArmCode;
lcd.clear();
lcd.setCursor(0, 0 );
delay(100);
//showCursor();
//blinkCursor();

lcd.print("Enter ArmCode :"); //Notify user of status.

resultOfGetArmCode = getArmCode();

if (resultOfGetArmCode == 1) {
lcd.clear();
lcd.setCursor(0, 0 );
delay(100);
lcd.print("Correct");
delay(500);
lcd.clear();
bombState = ARMED; //Start countdown

}//Close getArmCode(); = true

if (resultOfGetArmCode == 0) { //if code fails print "Incorrect"
tryAgainMsg();

}// Close getArmCode(); = false.

break;

/**************************************************
*Armed state. Countdown starts, waits for pushbutton to be pressed.
*If button is pressed, wait for code from keypad.
***************************************************/

case ARMED:
{
char disarmKey = keypad.getKey();

if (disarmKey == '#') {
char reslutOfDisarm;
lcd.clear();
lcd.setCursor(0, 0 );

delay(100);
lcd.print("Enter DisarmCode"); //if disarm button is pressed, ask user to input code.
reslutOfDisarm = getDisarmCode();

if (reslutOfDisarm == true) {
lcd.clear();
bombState = DISARMED; //and set bombState to disarmed.
break;
} //close getDisarmCode(); = True


if (reslutOfDisarm == false) {
tryAgainMsg();

if (second >= 15) {
second = second - 15;
}

else {
if (minute == 0 && hour == 0) {
second=1; //detonate.
}
if (minute > 0) {
second = 60 - (15 - second);
minute = minute - 1;
}

if (hour > 0 && minute == 0) {
second = 60 - (15 - second);
minute = 59;
hour = hour - 1 ;
}
}
} //close getDisarmCode(); = false
} //close if

}
countdown(); //if disarm key has not been pressed, continue countdown.

break;

/**************************************************************
*DISARMED. Counter stopped, displays "bomb disarmed"
*
**************************************************************/

case DISARMED:
int blinkDisarmFlag;
blinkDisarmFlag = 0;

//hideCursor();

for (nbBlinkDisarmed; nbBlinkDisarmed > 0; nbBlinkDisarmed--){ // blink msg
if (blinkDisarmFlag == 1){
lcd.setCursor(2, 0 );
lcd.print("BOMB DISARMED"); //bomb has been disarmed, inform user.
lcd.setCursor(2, 1 );
lcd.print("GOOD JOB TEAM");
delay(1000);
lcd.setCursor(2, 0 );
lcd.print("GOOD JOB TEAM"); //bomb has been disarmed, inform user.
lcd.setCursor(2, 1 );
lcd.print("BOMB DISARMED");
delay(9000);


asm volatile (" jmp 0");
blinkDisarmFlag = 0;

}
else{
lcd.clear();
delay(1000);
blinkDisarmFlag = 1;
}
} // end blink
break;

/*******************************************************
*Detonated. activate buzzer for 8 beeps, then 1 long.
*Print "Have A Nice Day. to LCD.
********************************************************/

case DETONATED:
if (repeatBuzzer == 0) { //make sure buzzer for loop has not already been run.

digitalWrite(speakerPin, HIGH);//turn on buzzer
lcd.setCursor(0, 0 );
lcd.print("BOOOOOOOOOOOOOOM"); //loop message informing user of bomb detonation.
//lcd.setCursor(0, 1 );
//lcd.print("Have A Nice Day"); //loop message informing user of bomb detonation.
delay(5000);//wait 5 seconds
digitalWrite(speakerPin, LOW);//turn off buzzer
repeatBuzzer = 1;//set flag to prevent code from looping again.
}

else {
//lcd.setCursor(0, 0 );
//lcd.print("BOOOOOOOOOOOOOOM"); //loop message informing user of bomb detonation.
lcd.setCursor(0, 1 );
lcd.print("Have A Nice Day"); //loop message informing user of bomb detonation.
delay(9000);


asm volatile (" jmp 0");

}

}//closes switch
}//closes loop
/*void software_Reset()
{
}*/
/***********************************************************
* Main countdown timer *
* countdown() *
************************************************************/
void countdown(){

static unsigned long lastTick = 0; // set up a local variable to hold the last time we decremented one second
static unsigned long currentMillis = 0;
// (static variables are initialized once and keep their values between function calls)

// decrement one second every 1000 milliseconds
if (second > 0) {
if (millis() - lastTick >= 1000) {
lastTick = millis();
second--;
serialOutput();
}
}

// decrement one minute every 60 seconds
if (minute > 0) {
if (second <= 0) {
minute--;
second = 60; // reset seconds to 60

}
}

// decrement one hour every 60 minutes
if (hour > 0) {
if (minute <= 0) {
hour--;
minute = 60; // reset minutes to 60
}//closes if
}//closes if


//the code below beeps the siren once every minute.
currentMillis = millis();
if (currentMillis - previousTime > interval)
{
previousTime = currentMillis;
previousDelay = currentMillis;

digitalWrite(speakerPin, HIGH);//turn on buzzer
}

if (currentMillis - previousDelay > 100) {//100ms chirp duration
digitalWrite(speakerPin, LOW);//turn off buzzer
}
} //close countdown();


/***********************************************************************
* getArmCode(); *
* Grabs the code to arm the bomb from the keypad. *
* *
************************************************************************/
boolean getArmCode(){
// returns true when all PW keys are pressed in sequence
// returns false when number of keys in pW pressed but don't exactly match the PW
// CANCEL_KEY erases all previous digits input
int count=0; // how many keys we have
int matchCount=0; // how many keys match
lcd.setCursor(0, 1 );

if(repeat == 0){

for(count=0, matchCount=0; count < sizeof(ArmCode)-1; count++){
char key;
char key_str[0]; // Define as string

do{
key = keypad.getKey();
delay (100);
}
while(key == '\0');

key_str[0] = key;
lcd.print(key_str);

if (key == timeSetKey && repeatTimerEdit == 0){
// ***************** MOD HERE ********************* ============> Random codes for arm & disarm
timerSet();
return 2;
}

if(key == ArmCode[count]) {
matchCount++;
}

else if(key == CANCEL_KEY){
count=0;
matchCount=0;
return 0;
}
}//close for loop
}//close repeat flag check

// here when the same number of keys pressed as characters in the PW
if(matchCount == count) {
repeat=1;
return 1;
}

else {
return 0;
}
}//close getArmCode();


/**********************************************************************
* getDisarmCode(); *
* Gets disarm code from keypad. *
* *
***********************************************************************/
boolean getDisarmCode(){

// returns true when all PW keys are pressed in sequence
// returns false when number of keys in pW pressed but don't exactly match the PW
// CANCEL_KEY erases all previous digits input

int count=0; // how many keys we have
int matchCount=0; // how many keys match
long disarmTime = millis()+7000L;//7000 instead of 15000 b/c of added delays making total 30s

lcd.setCursor(0, 1 );
//showCursor();
//blinkCursor();

if(repeatDisarm == 0){

for(count=0, matchCount=0; count < sizeof(disarmCode)-1; count++){
char key;
char key_str[0]; // Define as string

do{
if(disarmTime < millis()){ //if 15 seconds have passed, bail out
break;
}

key = keypad.getKey();
delay (100);
}
while(key == '\0');

key_str[0] = key;
lcd.print(key_str);

if(key == disarmCode[count]) {
matchCount++;
}

else if(key == CANCEL_KEY){
count=0;
matchCount=0;
return false;
}

if(disarmTime < millis()) {
return false;
break;
}

}// close for loop
} //close repeat flag check

// here when the same number of keys pressed as characters in the PW
if(matchCount == count) {
repeatDisarm=1;
return true;
}
else {
return false;

}
}//close getDisarmCode();


/**********************************************************************
* getAdminCode(); *
* Gets admin code from keypad. *
* *
***********************************************************************/
boolean getAdminCode(){

// returns true when all PW keys are pressed in sequence
// returns false when number of keys in pW pressed but don't exactly match the PW
// CANCEL_KEY erases all previous digits input

int count=0; // how many keys we have
int matchCount=0; // how many keys match

lcd.setCursor(0, 1 );


for(count=0, matchCount=0; count < sizeof(adminCode)-1; count++){
char key;
char key_str[0]; // Define as string

do{
key = keypad.getKey();
delay (100);
}
while(key == '\0');

// itoa(key, key_str,10);
key_str[0] = key;
lcd.print(key_str);
// lcd.print(itoa(key, key_str,16));


if(key == adminCode[count]) {
matchCount++;
}

else if(key == CANCEL_KEY){
count=0;
matchCount=0;
return false;
}

}// close for loop

// here when the same number of keys pressed as characters in the PW
if(matchCount == count) {
return true;
}
else{
return false;
}
// Do nothing if pwd is false / Parent function send tryAgin msg
}//close getAdminCode();


/*********************************************************************
* Timer edit function *
* *
* *
**********************************************************************/
void timerSet(){
lcd.clear();
lcd.print("Enter AdminCode");
char resultOfGetAdmCode;

resultOfGetAdmCode = getAdminCode();

if (resultOfGetAdmCode == true){
char timeInt;
char newcode;
char newarmcode;
char newdisarmcode;
char menupage;
int newadmincode;
lcd.clear();
lcd.setCursor(0, 0 );
lcd.print("1.Admin 2.Time");
lcd.setCursor(0, 1 );
lcd.print("3.Arm 4.Disarm");
do{
menupage = keypad.getKey();
}
while(menupage == '\0' || menupage == '*' || menupage == '0' || menupage > 52);

switch(menupage) {
case '1': // Edit admin code
lcd.clear();
lcd.setCursor(0, 0 );
lcd.print("new admin code :");
lcd.setCursor(0, 1 );
do{
newcode = keypad.getKey();
delay (100);
}
while(newcode == '\0');
newcode_str[0] = newcode;
lcd.print(newcode_str);
adminCode[0] = newcode_str[0];
newadmincode = (newcode - '0') * 10;//get first digit and convert to int
do{
newcode = keypad.getKey();
delay (100);
}
while(newcode == '\0');
newcode_str[0] = newcode;
lcd.print(newcode_str);
adminCode[1] = newcode_str[0];
newadmincode = (newcode - '0') + newadmincode;//get second digit.
do{
newcode = keypad.getKey();
delay (100);
}
while(newcode == '\0');
newcode_str[0] = newcode;
lcd.print(newcode_str);
adminCode[2] = newcode_str[0];
newadmincode = (newcode - '0') + newadmincode;//get 3rd digit.
do{
newcode = keypad.getKey();
delay (100);
}
while(newcode == '\0');
newcode_str[0] = newcode;
lcd.print(newcode_str);
adminCode[3] = newcode_str[0];
newadmincode = (newcode - '0') + newadmincode;//get 4th digit.
do{
newcode = keypad.getKey();
delay (100);
}
while(newcode == '\0');
newcode_str[0] = newcode;
lcd.print(newcode_str);
adminCode[4] = newcode_str[0];
newadmincode = (newcode - '0') + newadmincode;//get 5th digit.
do{
newcode = keypad.getKey();
delay (100);
}
while(newcode == '\0');
newcode_str[0] = newcode;
lcd.print(newcode_str);
adminCode[5] = newcode_str[0];
newadmincode = (newcode - '0') + newadmincode;//get 6th digit.

//newcode = 'L';


lcd.clear();

lcd.setCursor(0, 0 );
lcd.print("NEW ADMINCODE");
lcd.setCursor(0, 1 );
lcd.print(adminCode);
delay(5000);
lcd.clear();

break;

case '3': // Edit armcode
lcd.clear();
lcd.setCursor(0, 0 );
lcd.print("new armcode :");
lcd.setCursor(0, 1 );
do{
newarmcode = keypad.getKey();
delay (100);
}
while(newarmcode == '\0');
newarmcode_str[0] = newarmcode;
lcd.print(newarmcode_str);
ArmCode[0] = newarmcode_str[0];
newarmcode = (newarmcode - '0') * 10;//get first digit and convert to int
do{
newarmcode = keypad.getKey();
delay (100);
}
while(newarmcode == '\0');
newarmcode_str[0] = newarmcode;
lcd.print(newarmcode_str);
ArmCode[1] = newarmcode_str[0];
newarmcode = (newarmcode - '0') + newarmcode;//get second digit.
do{
newarmcode = keypad.getKey();delay (100);
}
while(newarmcode == '\0');
newarmcode_str[0] = newarmcode;
lcd.print(newarmcode_str);
ArmCode[2] = newarmcode_str[0];
newarmcode = (newarmcode - '0') + newarmcode;//get 3rd digit.
do{
newarmcode = keypad.getKey();
delay (100);
}
while(newarmcode == '\0');
newarmcode_str[0] = newarmcode;
lcd.print(newarmcode_str);
ArmCode[3] = newarmcode_str[0];
newarmcode = (newarmcode - '0') + newarmcode;//get 4th digit.
do{
newarmcode = keypad.getKey();
delay (100);
}
while(newarmcode == '\0');
newarmcode_str[0] = newarmcode;
lcd.print(newarmcode_str);
ArmCode[4] = newarmcode_str[0];
newarmcode = (newarmcode - '0') + newarmcode;//get 5th digit.
do{
newarmcode = keypad.getKey();
delay (100);
}
while(newarmcode == '\0');
newarmcode_str[0] = newarmcode;
lcd.print(newarmcode_str);
ArmCode[5] = newarmcode_str[0];
newarmcode = (newarmcode - '0') + newarmcode;//get 6th digit.

//newcode = 'L';


lcd.clear();

lcd.setCursor(0, 0 );
lcd.print("NEW ARMCODE");
lcd.setCursor(0, 1 );
lcd.print(ArmCode);
delay(5000);
lcd.clear();

break;

case '4': // Edit disarmcode
lcd.clear();
lcd.setCursor(0, 0 );
lcd.print("new disarmcode :");
lcd.setCursor(0, 1 );
do{
newdisarmcode = keypad.getKey();
delay (100);
}
while(newdisarmcode == '\0');
newdisarmcode_str[0] = newdisarmcode;
lcd.print(newdisarmcode_str);
disarmCode[0] = newdisarmcode_str[0];
newdisarmcode = (newdisarmcode - '0') * 10;//get first digit and convert to int
do{
newdisarmcode = keypad.getKey();
delay (100);
}
while(newdisarmcode == '\0');
newdisarmcode_str[0] = newdisarmcode;
lcd.print(newdisarmcode_str);
disarmCode[1] = newdisarmcode_str[0];
newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get second digit.
do{
newdisarmcode = keypad.getKey();
delay (100);
}
while(newdisarmcode == '\0');
newdisarmcode_str[0] = newdisarmcode;
lcd.print(newdisarmcode_str);
disarmCode[2] = newdisarmcode_str[0];
newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 3rd digit.
do{
newdisarmcode = keypad.getKey();
delay (100);
}
while(newdisarmcode == '\0');
newdisarmcode_str[0] = newdisarmcode;
lcd.print(newdisarmcode_str);
disarmCode[3] = newdisarmcode_str[0];
newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 4th digit.
do{
newdisarmcode = keypad.getKey();
delay (100);
}
while(newdisarmcode == '\0');
newdisarmcode_str[0] = newdisarmcode;
lcd.print(newdisarmcode_str);
disarmCode[4] = newdisarmcode_str[0];
newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 5th digit.
do{
newdisarmcode = keypad.getKey();
delay (100);
}
while(newdisarmcode == '\0');
newdisarmcode_str[0] = newdisarmcode;
lcd.print(newdisarmcode_str);
disarmCode[5] = newdisarmcode_str[0];
newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 6th digit.

//newcode = 'L';


lcd.clear();

lcd.setCursor(0, 0 );
lcd.print("NEW DISARMCODE");
lcd.setCursor(0, 1 );
lcd.print(disarmCode);
delay(5000);
lcd.clear();

break;

case '2': // Timer
lcd.clear();
lcd.print("Enter xx Hours");
lcd.setCursor(0, 1 );
do{
timeInt = keypad.getKey();
}
while(timeInt == '\0' || timeInt < '0' || timeInt > '6');
timeInt_str[0] = timeInt;
lcd.print(timeInt_str);

hour = (timeInt - '0') * 10;//get first digit and convert to int
do{
timeInt = keypad.getKey();
}
while(timeInt == '\0');
timeInt_str[0] = timeInt;
lcd.print(timeInt_str);

hour = (timeInt - '0') + hour;//get second digit.
delay(800);
lcd.clear();
timeInt = 'L';
// ------------------------------------------------------------------
lcd.print("Enter xx Minutes");
lcd.setCursor(0, 1 );
do{
timeInt = keypad.getKey();
}
while(timeInt == '\0' || timeInt < '0' || timeInt > '6');
timeInt_str[0] = timeInt;
lcd.print(timeInt_str);

while (timeInt < '0' || timeInt > '6'){
timeInt = keypad.getKey();
}
minute = (timeInt - '0') * 10;//get first digit and convert to int
do{
timeInt = keypad.getKey();
}
while(timeInt == '\0');
minute = (timeInt - '0') + minute;//get second digit.
timeInt_str[0] = timeInt;
lcd.print(timeInt_str);
delay(800);
lcd.clear();
timeInt = 'L';
// ------------------------------------------------------------------
lcd.print("Enter xx Seconds");
lcd.setCursor(0, 1 );
do{
timeInt = keypad.getKey();
}
while(timeInt == '\0' || timeInt < '0' || timeInt > '6');
timeInt_str[0] = timeInt;
lcd.print(timeInt_str);

while (timeInt < '0' || timeInt > '6'){
timeInt = keypad.getKey();
}
second = (timeInt - '0') * 10;//get first digit and convert to int
do{
timeInt = keypad.getKey();
}
while(timeInt == '\0');
second = (timeInt - '0') + second;//get second digit.
timeInt_str[0] = timeInt;
lcd.print(timeInt_str);
delay(800);
lcd.clear();
timeInt = 'L';
lcd.print("Time set :");
lcd.setCursor(0, 1 );
itoa (hour, hour_str, 10);
itoa (minute, minute_str, 10);
itoa (second, second_str, 10);
lcd.print(hour_str);
lcd.print(":");
lcd.print(minute_str);
lcd.print(":");
lcd.print(second_str);
delay(2000);
// ---------------------- Put randomize here --------------------------
repeatTimerEdit = 1;
}//end of getAdminCode == true

if(resultOfGetAdmCode == false){
tryAgainMsg();
// Do nothing if pwd is false / Parent function send tryAgin msg

}
lcd.clear();
}//end of timer edit function
}



/****************************************************************
* serialOutput(); *
* prints the values of the timer over the serial connection *
* and onto the LCD *
*****************************************************************/
void serialOutput() {


itoa (hour, hour_str, 10);
itoa (minute, minute_str, 10);
itoa (second, second_str, 10);


if(bombState != DISARMED){

lcd.setCursor(0, 0 );
delay(20);
if (blinkArmed == 0){
lcd.print("!! ARMED !!");
blinkArmed=1;
}
else {
lcd.print("!! !!");
blinkArmed=0;
}
lcd.setCursor(0, 1 );

lcd.print("Time = ");
if (hour <=9) {
lcd.print("0");
lcd.print(hour_str); // the hour, sent to the screen in decimal format
}
else{
lcd.print(hour_str);
}
lcd.print(":"); // a colon between the hour and the minute
if (minute <=9) {
lcd.print("0");
lcd.print(minute_str); // the minute, sent to the screen in decimal format
}
else{
lcd.print(minute_str);
}
lcd.print(":"); // a colon between the minute and the second
if (second <=9) {
lcd.print("0");
lcd.print(second_str); // the minute, sent to the screen in decimal format
}
else{
lcd.print(second_str);
}
//termination condition
}
if (second == 0 && minute == 0 && hour == 0) {
lcd.clear();

bombState = DETONATED; //clear LCD and set bomb state to "detonated" when timer runs out
}

if (bombState == DISARMED) {
lcd.clear();
}
}//close serialOutput();


void tryAgainMsg(){
lcd.clear();
//hideCursor();
delay(100);
lcd.print("T");
delay(150);
lcd.print("r");
delay(150);
lcd.print("y");
delay(150);
lcd.print(" ");
delay(150);
lcd.print("a");
delay(150);
lcd.print("g");
delay(150);
lcd.print("a");
delay(150);
lcd.print("i");
delay(150);
lcd.print("n");
delay(150);
lcd.print(" ");
delay(150);
lcd.print("!");
delay(1000);
}

void incorrectMsg(){
lcd.clear();

delay(100);
lcd.print("I");
delay(350);
lcd.print("n");
delay(350);
lcd.print("c");
delay(350);
lcd.print("o");
delay(350);
lcd.print("r");
delay(350);
lcd.print("r");
delay(350);
lcd.print("e");
delay(350);
lcd.print("c");
delay(350);
lcd.print("t");
delay(1000);
}
//END of bomb program.



maintenant le shema de câblage :





Tout fonctionne, juste le buzzer qu'il faut brancher en pin 2 et non en rx .

j'aimerai maintenant ajouter un bip sonore pour chaque seconde, mais comment faire ? Un grand merci d'avance si quelqu'un a la solution !


Dernière édition par Kryloris le Dim 21 Sep - 21:03 (2014); édité 1 fois
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Jeu 11 Sep - 18:50 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

c'est grâce à la fonction Tone() ou analogWrite() au choix.
Ensuite, il faut modifier cette partie du programme:
void countdown(){

static unsigned long lastTick = 0; // set up a local variable to hold the last time we decremented one second
static unsigned long currentMillis = 0;
// (static variables are initialized once and keep their values between function calls)

// decrement one second every 1000 milliseconds
if (second > 0) {
if (millis() - lastTick >= 1000) {
lastTick = millis();
second--;
// ICI UN BIP
serialOutput();
}
}

// decrement one minute every 60 seconds
if (minute > 0) {
if (second <= 0) {
minute--;
second = 60; // reset seconds to 60

}
}

// decrement one hour every 60 minutes
if (hour > 0) {
if (minute <= 0) {
hour--;
minute = 60; // reset minutes to 60
}//closes if
}//closes if


//the code below beeps the siren once every minute.
currentMillis = millis();
if (currentMillis - previousTime > interval)
{
previousTime = currentMillis;
previousDelay = currentMillis;

digitalWrite(speakerPin, HIGH);//turn on buzzer
}

if (currentMillis - previousDelay > 100) {//100ms chirp duration
digitalWrite(speakerPin, LOW);//turn off buzzer
}
} //close countdown();
____________________________
http://simple-duino.com
Revenir en haut
Kryloris
Débutant

Hors ligne

Inscrit le: 11 Sep 2014
Messages: 10
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Jeu 11 Sep - 19:42 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

Deja,merci :)

Alors si j'ai bien compris, il faut que je rajoute la librairie tone et que je remplace la partie du programme par celle que tu a mise ci dessus ?
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Jeu 11 Sep - 21:35 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

En fait, la fonction tone() existe par défaut, pas besoin de librairie supplémentaire.
Ensuite, si tu regardes la doc: 
Syntax
tone(pin, frequency) 
tone(pin, frequency, duration)
Parameters
pin: the pin on which to generate the tone
frequency: the frequency of the tone in hertz - unsigned int
duration: the duration of the tone in milliseconds (optional) - unsigned long


Tu as tout. Il faut connaitre la fréquence de la note que tu souhaites jouer et ça ira bien.
Ensuite, il faut simplement remplacer la ligne //ICI UN BIP par tone(pin, freq, durée);


La fonction noTone(); pourrais aussi t'être utile...
____________________________
http://simple-duino.com
Revenir en haut
Kryloris
Débutant

Hors ligne

Inscrit le: 11 Sep 2014
Messages: 10
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Jeu 11 Sep - 22:28 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

Ok je commence à comprendre ,merci de m'aider. je vais faire le nessesaire pour trouver la solution moi même. 
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Jeu 11 Sep - 22:52 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

Ok, je n'aime jamais donner les solutions toutes faites, si tu as encore des questions, je pourrais t'aider plus en détail mais on apprend toujours mieux en découvrant soit-même.
____________________________
http://simple-duino.com
Revenir en haut
Kryloris
Débutant

Hors ligne

Inscrit le: 11 Sep 2014
Messages: 10
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Ven 12 Sep - 10:53 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

Oui c'est mieu :) , je reviendrai surement ca m’étonnerai que ca marche du premier coup ^^ .
Revenir en haut
Kryloris
Débutant

Hors ligne

Inscrit le: 11 Sep 2014
Messages: 10
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Ven 12 Sep - 12:03 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

Ca marche ! mais bizarement, pas besoin de noTone . Voila la modif :

// decrement one second every 1000 milliseconds
if (second > 0) {
if (millis() - lastTick >= 1000) {
lastTick = millis();
second--;
 tone(3,392,100);
serialOutput();
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Ven 12 Sep - 12:16 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

Ok, parfait.
J'étais pas sûr à propos du noTone, de mémoire, on en a besoin lorsqu'on ne spécifie pas de durée.
____________________________
http://simple-duino.com
Revenir en haut
Kryloris
Débutant

Hors ligne

Inscrit le: 11 Sep 2014
Messages: 10
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Ven 12 Sep - 14:09 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

merci a vous en tout cas !

C'est passionnant l'arduino !

Maintenant que mon programme est prêt , pouvez vous me conseiller le matériel a acheter pour le câblage définitif ?
Souder des nouveaux cables ou rester en cable male femelle sur une plaque essai ?
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Ven 12 Sep - 17:06 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

Je vous conseille plutôt de faire un montage propre avec des câbles à souder sur une carte de ce type: http://www.lextronic.fr/P10926-plaque-a-bandes-pastillees----100-x-80-mm.html


Le résultat fera plus professionnel et plus propre.
____________________________
http://simple-duino.com
Revenir en haut
Kryloris
Débutant

Hors ligne

Inscrit le: 11 Sep 2014
Messages: 10
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Jeu 18 Sep - 20:25 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

ok merci le projet avance bien je mettrai quelques photos par la suite . 
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Ven 19 Sep - 11:09 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

Ok, merci de continuer à nous tenir au courant, ça fait plaisir de voir vos projets aboutir.
____________________________
http://simple-duino.com
Revenir en haut
Kryloris
Débutant

Hors ligne

Inscrit le: 11 Sep 2014
Messages: 10
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Dim 21 Sep - 20:08 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

je reviens a vous pour quelques petit conseils du coup :)

J'ai deux buzzer , un pour le bip bip et un pour l'alarme . mais le son est tres faible pour l'alarme. Ils sont tout les deux en 5v vu qu'ils passent par l'arduino . Que faire pour augmenter le son ?

Autre chose , comment est il possible d'avoir un son a l'appui d'une touche du clavier ?

merci d'avance !
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Dim 21 Sep - 20:56 (2014)    Sujet du message: Bombe factice airsoft arduino . Répondre en citant

Salut !
Pour "augmenter le volume", il faudrait utiliser un transistor pour contrôler une tension plus élevé. Cependant, il faut faire attention à la limite que le haut-parleur peut accepter...


Pour le son au clavier, il faut chercher l'endroit où dans le programme où on détecte que la touche est appuyée et placer le même bout de code que pour le BIP.
____________________________
http://simple-duino.com
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 00:42 (2017)    Sujet du message: Bombe factice airsoft arduino .

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Projets Toutes les heures sont au format GMT + 1 Heure
Aller à la page: 1, 2  >
Page 1 sur 2

 
Sauter vers:  

Index | creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB
Propulsé par Simple-Duino