//Bomba Airsoft
#include <LiquidCrystal_I2C.h> //inclusão da biblioteca módulo I2c
#include <Keypad.h> //inclusão da biblioteca teclado matricial
#include <string.h>
#define LedVermelho 12 //definição pino dos leds
#define LedVerde 13
#define tempo 10 //tempo do som
char* senha ="1234567"; //senha : altere se quiser
int posicao = 0; //posição do numero na senha
int time=5; // contador time
const byte rows = 4; //numero de linhas e colunas do teclado
const byte cols = 4;
int autofalante=7; //pino do autofalante
int freq=2000; //frequencia para o bip
int dur=120; //duração do bip
int codepos=0;
int estadoled = LOW; //variável para o estado do led
int intervalo=1000;
int previousMillis = 0;
int frequencia = 0;
char keyMap [rows] [cols] = { //define the cymbols on the buttons of the keypad
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins [rows] = {11, 10,9,8}; //pinos do teclado
byte colPins [cols] = {6, 5, 4};
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, rows, cols);
LiquidCrystal_I2C lcd(0x27,16,2);//endereço I2c módulo display
void setup(){
lcd.begin(16, 2);
pinMode(LedVermelho, OUTPUT); //setando o led como saída
pinMode(LedVerde, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("xxxxxxx");
lcd.setCursor(0, 0);
}
void contador(int tempoinicial){ //rotina de acionamento da bomba
lcd.clear();
lcd.print("xxxxxxx");
lcd.setCursor(0, 1);
lcd.print("BOMBA ARMADA");
int count=time;
while(count>0){
char numteclado;
numteclado=keyget();
if(numteclado == '*' || numteclado == '#'){ //reseta senha
posicao=0;
}
if(numteclado == senha [posicao]){
posicao ++;
}
if(posicao == 7){//rotina para desarmar se a senha for correta
lcd.print("BOMBA DESARMADA");
lcd.setCursor(0, 1);
lcd.print("SOLDADOS VENCEM");
digitalWrite(LedVerde,HIGH);
digitalWrite(LedVermelho,LOW);
while(1);
}
lcd.setCursor(0, 1); //rotina para contagem regressiva
int temporestante=time-(millis()/1000-tempoinicial);
lcd.print("BOMBA ARMADA ");
lcd.print(temporestante);
if (temporestante<10){//Colocar 0 na frente quando for menor que 10
lcd.setCursor(13, 1);
lcd.print("0");
lcd.setCursor(15, 1);
lcd.print(" ");
}
if (temporestante==25){//rotinas para mudança da velocidade do bip
intervalo=800;
}
if (temporestante==15){
intervalo=700;
}
if (temporestante==10){
intervalo=600;
}
if (temporestante==6){
intervalo=400;
}
if (temporestante==3){
intervalo=250;
}
int currentMillis=millis();
if (currentMillis - previousMillis >= intervalo) {
previousMillis = currentMillis;
if (estadoled == LOW) {//Led piscando durante a contagem
estadoled = HIGH;
} else {
estadoled = LOW;
}
digitalWrite(12, estadoled);
tone(autofalante,freq,dur);
}
if (temporestante<=0){//Mensagem se o tempo acabar
lcd.setCursor(0, 0);
lcd.print("TERRORISTAS");
lcd.setCursor(0, 1);
lcd.print("VENCEM: DETONADO");
digitalWrite(LedVermelho,HIGH);
tocarsom();
while(1);
}
}
return;
}
void tocarsom(){//som quando perfe
// for (frequencia =150; frequencia < 1800; frequencia += 1)
{
//tone(autofalante, frequencia, tempo);
//delay(1);
}
for (frequencia = 2800; frequencia > 150; frequencia -= 1)
{
tone(autofalante, frequencia, tempo);
delay(1);
}
}
char keyget(){
char numteclado = myKeypad.getKey(); //define qual tecla é pressionada com getKey
if (numteclado >='0' && numteclado<='9'){ //posição da senha
codepos++;
}
if(numteclado == '*' || numteclado == '#'){//reseta senha
posicao=0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ENTRY RESET!");
delay(100);
lcd.clear();
lcd.print("xxxxxxx");
codepos=0;
lcd.setCursor(0, 0);
}
if (codepos>=7){
lcd.clear();
lcd.print("xxxxxxx");
codepos=0;
lcd.setCursor(0, 0);
}
lcd.setCursor(codepos-1, 0);
if (numteclado != NO_KEY){
//rotina para um som diferente para cada tecla pressionada
if (numteclado == '1'){
tone(autofalante,freq,dur);
lcd.print(1);
}
if (numteclado == '2'){
tone(autofalante,freq*1.25,dur);
lcd.print(2);
}
if (numteclado == '3'){
tone(autofalante,freq*1.5,dur);
lcd.print(3);
}
if (numteclado == '4'){
tone(autofalante,freq*1.75,dur);
lcd.print(4);
}
if (numteclado == '5'){
tone(autofalante,freq*2,dur);
lcd.print(5);
}
if (numteclado == '6'){
tone(autofalante,freq*2.25,dur);
lcd.print(6);
}
if (numteclado == '7'){
tone(autofalante,freq*2.5,dur);
lcd.print(7);
}
if (numteclado == '8'){
tone(autofalante,freq*2.75,dur);
lcd.print(8);
}
if (numteclado == '9'){
tone(autofalante,freq*3,dur);
lcd.print(9);
}
if (numteclado == '0'){
tone(autofalante,freq*3.25,dur);
lcd.print(0);
}
}
return numteclado;
}
void loop(){
char numteclado;
numteclado=keyget();
if(numteclado == '*' || numteclado == '#'){
posicao=0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ENTRY RESET!");
delay(100);
lcd.clear();
lcd.print("xxxxxxx");
codepos=0;
lcd.setCursor(0, 0);
}
if(numteclado == senha [posicao]){
posicao ++;
}
if(posicao == strlen(senha)){
posicao=0;
int tempoinicial=(millis())/1000;
contador(tempoinicial);
}
delay(100);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
bz1:1
bz1:2
led1:A
led1:C
led2:A
led2:C
r1:1
r1:2
r2:1
r2:2