Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********* Pleasedontcode.com **********
- Pleasedontcode thanks you for automatic code generation! Enjoy your code!
- - Terms and Conditions:
- You have a non-exclusive, revocable, worldwide, royalty-free license
- for personal and commercial use. Attribution is optional; modifications
- are allowed, but you're responsible for code maintenance. We're not
- liable for any loss or damage. For full terms,
- please visit pleasedontcode.com/termsandconditions.
- - Project: FakeBomb
- - Source Code compiled for: Arduino Uno
- - Source Code created on: 2023-12-03 01:29:44
- - Source Code generated by: Francesco Alessandro
- ********* Pleasedontcode.com **********/
- /****** SYSTEM REQUIREMENTS *****/
- /****** SYSTEM REQUIREMENT 1 *****/
- /* Il programma inizia visualizzando una barra di */
- /* caricamento sull'LCD. Successivamente deve partire */
- /* un timer di 10 minuti e sull'LCD dev'essere */
- /* visualizzato "INSERIRE PASSWORD" e nel frattempo */
- /* dev'essere riprodotta la "traccia1.mp3" dal */
- /* DFPlayerMini. */
- /****** SYSTEM REQUIREMENT 2 *****/
- /* Attraverso il keypad dev'essere monitorata */
- /* l'introduzione di un codice composto da 4 numeri e */
- /* finalizzato con carattere #. */
- /****** SYSTEM REQUIREMENT 3 *****/
- /* Se i 4 numeri sono uguali alla password "5421" */
- /* allora deve accendersi il led verde e sull'LCD */
- /* deve comparire la scritta "CODICE CORRETTO, BOMBA */
- /* DISINNESCATA". Se sbagliato "CODICE SBAGLIATO, */
- /* RIPROVA". */
- /****** SYSTEM REQUIREMENT 4 *****/
- /* Durante il countdown deve lampeggiare il led BLU. */
- /* Se il countdown raggiunge 10 secondi allora la */
- /* traccia audio "traccia2.mp3" e "traccia3.mp3" */
- /* devono essere riprodotte. */
- /****** SYSTEM REQUIREMENT 5 *****/
- /* Se il countdown termina e non viene inserita la */
- /* password giusta allora il led rosso deve */
- /* accendersi ad intermittenza e devono essere */
- /* riprodotte le tracce mp3 "traccia4.mp3", */
- /* "traccia5.mp3" e "traccia6.mp3". */
- /****** END SYSTEM REQUIREMENTS *****/
- /********* User code review feedback **********
- #### Feedback 1 ####
- - il countdown deve partire subito all'avvio e non essere dipenden
- te dall'inserimento della password
- ********* User code review feedback **********/
- /****** DEFINITION OF LIBRARIES *****/
- #include <SoftwareSerial.h>
- #include <Wire.h>
- #include <DFRobotDFPlayerMini.h>
- #include <LiquidCrystal_I2C.h>
- #include <Keypad.h>
- /****** SYSTEM REQUIREMENTS *****/
- const unsigned long TIMER_DURATION = 20000; //10 * 60 * 1000; // 10 minutes in milliseconds
- const char PASSWORD[5] = "5421";
- const char CORRECT_CODE_MESSAGE[] = "CODICE CORRETTO, BOMBA DISINNESCATA";
- const char WRONG_CODE_MESSAGE[] = "CODICE SBAGLIATO, RIPROVA";
- const char INSERT_PASSWORD_MESSAGE[] = "INSERIRE PASSWORD";
- const char COUNTDOWN_MESSAGE[] = "COUNTDOWN: ";
- const char MP3_TRACK1_FOLDER[] = "traccia1.mp3";
- const char MP3_TRACK2_FOLDER[] = "traccia2.mp3";
- const char MP3_TRACK3_FOLDER[] = "traccia3.mp3";
- const char MP3_TRACK4_FOLDER[] = "traccia4.mp3";
- const char MP3_TRACK5_FOLDER[] = "traccia5.mp3";
- const char MP3_TRACK6_FOLDER[] = "traccia6.mp3";
- /***** DEFINITION OF DIGITAL INPUT PINS *****/
- const uint8_t pad_Keypad4x4_R1_PIN_D2 = 2;
- const uint8_t pad_Keypad4x4_R2_PIN_D3 = 3;
- const uint8_t pad_Keypad4x4_R3_PIN_D4 = 4;
- const uint8_t pad_Keypad4x4_R4_PIN_D5 = 5;
- /***** DEFINITION OF DIGITAL OUTPUT PINS *****/
- const uint8_t pad_Keypad4x4_C1_PIN_D6 = 6;
- const uint8_t pad_Keypad4x4_C2_PIN_D7 = 7;
- const uint8_t pad_Keypad4x4_C3_PIN_D8 = 8;
- const uint8_t pad_Keypad4x4_C4_PIN_D9 = 9;
- const uint8_t VERDE_LED_PIN_D11 = 11;
- const uint8_t ROSSO_LED_PIN_D12 = 12;
- const uint8_t BLU_LED_PIN_D10 = 10;
- /***** DEFINITION OF Software Serial *****/
- const uint8_t mp3_DFPlayerMini_Serial_PIN_SERIAL_TX_A0 = A0;
- const uint8_t mp3_DFPlayerMini_Serial_PIN_SERIAL_RX_A1 = A1;
- SoftwareSerial mp3_DFPlayerMini_Serial(mp3_DFPlayerMini_Serial_PIN_SERIAL_RX_A1, mp3_DFPlayerMini_Serial_PIN_SERIAL_TX_A0);
- /***** DEFINITION OF I2C PINS *****/
- const uint8_t lcd_LCD1602I2C_I2C_PIN_SDA_A4 = A4;
- const uint8_t lcd_LCD1602I2C_I2C_PIN_SCL_A5 = A5;
- const uint8_t lcd_LCD1602I2C_I2C_SLAVE_ADDRESS = 0x27;
- const uint8_t KEYPAD4X4_ROWS = 4; //four rows
- const uint8_t KEYPAD4X4_COLS = 4; //four columns
- char hexaKeys_Keypad4x4[KEYPAD4X4_ROWS][KEYPAD4X4_COLS] = {
- {'1','2','3','A'},
- {'4','5','6','B'},
- {'7','8','9','C'},
- {'*','0','#','D'},
- };
- /****** DEFINITION OF LIBRARIES CLASS INSTANCES *****/
- DFRobotDFPlayerMini mp3Player;
- LiquidCrystal_I2C lcd(lcd_LCD1602I2C_I2C_SLAVE_ADDRESS, 20, 4);
- Keypad customKeypad = Keypad(makeKeymap(hexaKeys_Keypad4x4),
- (byte[]) {pad_Keypad4x4_R1_PIN_D2, pad_Keypad4x4_R2_PIN_D3, pad_Keypad4x4_R3_PIN_D4, pad_Keypad4x4_R4_PIN_D5},
- (byte[]) {pad_Keypad4x4_C1_PIN_D6, pad_Keypad4x4_C2_PIN_D7, pad_Keypad4x4_C3_PIN_D8, pad_Keypad4x4_C4_PIN_D9},
- KEYPAD4X4_ROWS, KEYPAD4X4_COLS);
- bool isPasswordCorrect = false; // Set password as correct initially
- bool isCountdownStarted = true; // Start countdown immediately upon startup
- unsigned long countdownStartTime = 0;
- void setup()
- {
- Serial.begin(9600);
- delay(1000);
- Serial.println(TIMER_DURATION);
- // put your setup code here, to run once:
- pinMode(pad_Keypad4x4_R1_PIN_D2, INPUT_PULLUP);
- pinMode(pad_Keypad4x4_R2_PIN_D3, INPUT_PULLUP);
- pinMode(pad_Keypad4x4_R3_PIN_D4, INPUT_PULLUP);
- pinMode(pad_Keypad4x4_R4_PIN_D5, INPUT_PULLUP);
- pinMode(pad_Keypad4x4_C1_PIN_D6, OUTPUT);
- pinMode(pad_Keypad4x4_C2_PIN_D7, OUTPUT);
- pinMode(pad_Keypad4x4_C3_PIN_D8, OUTPUT);
- pinMode(pad_Keypad4x4_C4_PIN_D9, OUTPUT);
- pinMode(VERDE_LED_PIN_D11, OUTPUT);
- pinMode(ROSSO_LED_PIN_D12, OUTPUT);
- pinMode(BLU_LED_PIN_D10, OUTPUT);
- mp3_DFPlayerMini_Serial.begin(9600);
- mp3Player.begin(mp3_DFPlayerMini_Serial);
- lcd.init();
- lcd.backlight();
- lcd.setCursor(0, 0);
- lcd.print("Caricamento...");
- delay(2000); // Delay for the loading screen
- digitalWrite(BLU_LED_PIN_D10, HIGH); // Turn on BLU LED
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print(INSERT_PASSWORD_MESSAGE);
- mp3Player.volume(10); // Set volume to a reasonable level
- mp3Player.playFolder(1, 1); // Play "traccia1.mp3" from folder 1
- }
- void loop()
- {
- // put your main code here, to run repeatedly:
- char customKey = customKeypad.getKey();
- if (customKey)
- {
- Serial.println(customKey);
- if (customKey == '#')
- {
- if (isPasswordCorrect)
- {
- digitalWrite(VERDE_LED_PIN_D11, HIGH); // Turn on VERDE LED
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print(CORRECT_CODE_MESSAGE);
- while(1);
- }
- else
- {
- digitalWrite(ROSSO_LED_PIN_D12, HIGH); // Turn on ROSSO LED
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print(WRONG_CODE_MESSAGE);
- delay(1000);
- digitalWrite(ROSSO_LED_PIN_D12, LOW); // Turn off ROSSO LED
- mp3Player.enableLoopAll();
- mp3Player.playFolder(2, 1); // Play "traccia4.mp3" from folder 2
- mp3Player.playFolder(2, 2); // Play "traccia5.mp3" from folder 2
- mp3Player.playFolder(2, 3); // Play "traccia6.mp3" from folder 2
- while(1);
- }
- }
- else
- {
- isPasswordCorrect = checkPassword(customKey); // Check if the entered password is correct
- }
- }
- if (!isCountdownStarted && isPasswordCorrect)
- {
- startCountdown(); // Start the countdown if the password is correct
- }
- if (isCountdownStarted)
- {
- unsigned long currentTime = millis();
- unsigned long elapsedTime = currentTime - countdownStartTime;
- if (elapsedTime >= TIMER_DURATION)
- {
- countdownFinished(); // Countdown has finished, handle the situation
- }
- else
- {
- updateCountdownToLCD(elapsedTime); // Update the countdown on the LCD
- }
- if (elapsedTime >= (TIMER_DURATION - 10000))
- {
- playAdditionalTracks(); // Play additional tracks when 10 seconds left in the countdown
- }
- }
- }
- bool checkPassword(char customKey)
- {
- static char enteredPassword[5] = "";
- static uint8_t passwordIndex = 0;
- if (customKey >= '0' && customKey <= '9')
- {
- enteredPassword[passwordIndex++] = customKey;
- lcd.setCursor(passwordIndex - 1, 0);
- lcd.print("*");
- if (passwordIndex == 4)
- {
- enteredPassword[passwordIndex] = '\0'; // Null-terminate the entered password string
- passwordIndex = 0; // Reset the password index for future use
- Serial.println(enteredPassword);
- Serial.println(PASSWORD);
- if (strcmp(enteredPassword, PASSWORD) == 0)
- {
- Serial.println("PSW GIUSTA");
- return true; // Password is correct
- }
- else
- {
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print(WRONG_CODE_MESSAGE);
- delay(1000);
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print(INSERT_PASSWORD_MESSAGE);
- }
- }
- }
- return false;
- }
- void startCountdown()
- {
- isCountdownStarted = true;
- countdownStartTime = millis();
- }
- void updateCountdownToLCD(unsigned long elapsedTime)
- {
- unsigned long remainingTime = TIMER_DURATION - elapsedTime;
- unsigned long minutes = remainingTime / 60000;
- unsigned long seconds = (remainingTime % 60000) / 1000;
- lcd.setCursor(0, 1);
- lcd.print(COUNTDOWN_MESSAGE);
- if (minutes < 10)
- {
- lcd.print("0");
- }
- lcd.print(minutes);
- lcd.print(":");
- if (seconds < 10)
- {
- lcd.print("0");
- }
- lcd.print(seconds);
- // Blink the BLU LED
- unsigned long blinkInterval = 500;
- if ((elapsedTime / blinkInterval) % 2 == 0)
- {
- digitalWrite(BLU_LED_PIN_D10, HIGH);
- }
- else
- {
- digitalWrite(BLU_LED_PIN_D10, LOW);
- }
- }
- void playAdditionalTracks()
- {
- mp3Player.playFolder(2, 4); // Play "traccia2.mp3" from folder 2
- mp3Player.playFolder(2, 5); // Play "traccia3.mp3" from folder 2
- }
- void countdownFinished()
- {
- isCountdownStarted = false;
- isPasswordCorrect = false;
- countdownStartTime = 0;
- digitalWrite(ROSSO_LED_PIN_D12, HIGH); // Turn on ROSSO LED
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print(WRONG_CODE_MESSAGE);
- delay(1000);
- digitalWrite(ROSSO_LED_PIN_D12, LOW); // Turn off ROSSO LED
- mp3Player.enableLoopAll();
- mp3Player.playFolder(2, 4); // Play "traccia2.mp3" from folder 2
- mp3Player.playFolder(2, 5); // Play "traccia3.mp3" from folder 2
- mp3Player.playFolder(2, 6); // Play "traccia6.mp3" from folder 2
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement