Grazie per le risposte ma sono riuscito a risolvere. solo ora ho un altro problema per far partire la bomba è il timer vorrei mettere un pulsante, ora lo faccio partire premeto il tasto 1 della tastiera. Ho fatto delle prove ma non riesco come posso fare? (una prova che ho fatto e messa come commento)
ecco il prgramma
#include <Keypad.h>
#include <LiquidCrystal.h>
#include <Tone.h>
#define pound 14
int Scount = 59;
int Mcount = 29;
int Hcount = 0;
int DefuseTimer = 0;
const int BUTTON = 38;
int val = 0;
long secMillis = 0;
long interval = 1000;
char password[4];
int currentLength = 0;
int i = 0;
char entered[4];
char code [5];
char f;
#include <SPI.h>
#define ZONA1 44
#define ZONA2 45
#define ZONA3 46
#define ZONA4 47
#define ZONA5 48
#define ZONA6 49
#define ZONA7 50
#define ZONA8 51
#define PULSANTE 38
int val0 = 0;
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 = 0;
int val7 = 0;
int val8 = 0;
byte out[] = { 19, 18, 17, 16, 15, 14, 13, 12, 11, }; // C19_44 C18_45 C17_46 C16_47 C15_48 C14_49 C13_50
int riga1;
int riga2;
int riga3;
int riga4;
int colonna1;
int colonna2;
int colonna3;
int colonna4;
const int numeroRighe = 2;
const int numeroColonne = 16;
//char code [5];
//char f;
int v;
int c;
int restart = 0;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
const byte ROWS = 5;
const byte COLS = 5;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {
30, 31, 32, 33}; // Connessione delle righe: Riga0, Riga1, Riga2 e Riga3 ai pins di Arduino.
byte colPins[COLS] = {
34, 35, 36, 37};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{
pinMode (ZONA1, OUTPUT); // imposto zona1 e zona 2 come uscite
pinMode (ZONA2, OUTPUT);
pinMode (ZONA3, OUTPUT);
pinMode (ZONA4, OUTPUT);
pinMode (ZONA5, OUTPUT);
pinMode (ZONA6, OUTPUT);
pinMode (ZONA7, OUTPUT);
pinMode (ZONA8, OUTPUT);
pinMode (30, INPUT);
pinMode (31, INPUT);
pinMode (32, INPUT);
pinMode (33, INPUT);
pinMode (34, INPUT);
pinMode (35, INPUT);
pinMode (36, INPUT);
pinMode (37, INPUT);
pinMode (BUTTON,INPUT);
digitalWrite (ZONA1, LOW);
digitalWrite (ZONA2, LOW);
digitalWrite (ZONA3, LOW);
digitalWrite (ZONA4, LOW);
digitalWrite (ZONA5, LOW);
digitalWrite (ZONA6, LOW);
digitalWrite (ZONA7, LOW);
digitalWrite (ZONA8, LOW);
lcd.begin(16, 2);
Serial.begin(9600);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Enter Code: ");
while (currentLength < 4)
{
lcd.setCursor(currentLength + 6, 1);
lcd.cursor();
char key = keypad.getKey();
key == NO_KEY;
if (key != NO_KEY)
{
if ((key != '*')&&(key != '#'))
{
lcd.print(key);
password[currentLength] = key;
currentLength++;
}
}
}
if (currentLength == 4)
{
delay(500);
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.setCursor(6,1);
lcd.print(password[0]);
lcd.print(password[1]);
lcd.print(password[2]);
lcd.print(password[3]);
delay(3000);
lcd.clear();
currentLength = 0;
}
lcd.clear(); // Start with a blank screen
Serial.println("SISTEMA ATTIVO");
lcd.setCursor(1,0);
lcd.print("SISTEMA ATTIVO");
delay (1000);
lcd.setCursor(1,1);
lcd.println("DETONA BOMBA ");
for (f=0; f<1; f++)
code[f] = keypad.waitForKey();
Serial.print("Tasto numero ");
Serial.print(f);
Serial.print(" - valore ");
Serial.println(code[f]);
if (code[0] == '1') {
// val = digitalRead(BUTTON);
// if ( BUTTON == HIGH) {
lcd.clear(); // Start with a blank screen
delay (1000);
lcd.setCursor(0,1);
Serial.println ("BOMBA ATTIVATA"); // se zona 1 è attiva la bomba è attiva
lcd.print("BOMBA ATTIVATA");
delay (1000);
}
c ='1';
val1 = digitalRead (ZONA1); // leggo lo stato delle uscite
val2 = digitalRead (ZONA2);
val3 = digitalRead (ZONA3); // leggo lo stato delle uscite
val4 = digitalRead (ZONA4);
val5 = digitalRead (ZONA5); // leggo lo stato delle uscite
val6 = digitalRead (ZONA6);
val7 = digitalRead (ZONA7); // leggo lo stato delle uscite
val8 = digitalRead (ZONA8);
}
void loop()
{
timer();
char key2 = keypad.getKey();
if (key2 == '*')
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CODE:");
while (currentLength < 4)
{
char key2 = keypad.getKey();
if (key2 == '#')
{
currentLength = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CODE: ");
}
else
if (key2 != NO_KEY)
{
lcd.setCursor(currentLength + 7, 0);
lcd.cursor();
lcd.print(key2);
entered[currentLength] = key2;
currentLength++;
delay(100);
lcd.noCursor();
lcd.setCursor(currentLength + 6, 0);
lcd.print("*");
lcd.setCursor(currentLength + 7, 0);
lcd.cursor();
}
}
if (currentLength == 4)
{
if (entered[0] == password[0] && entered[1] == password[1] && entered[2] == password[2] && entered[3] == password[3])
{
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print("BOMBA ");
currentLength = 0;
lcd.setCursor(0,1);
lcd.print("DISINNESCATA!");
delay(50000);
}
else
{
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print("CODICE ERRATO!");
lcd.setCursor (0,1);
lcd.print("BOMBA ESPLOSA!!! ");
digitalWrite (ZONA1, HIGH);
digitalWrite (ZONA2, HIGH);
digitalWrite (ZONA3, HIGH);
digitalWrite (ZONA4, HIGH);
digitalWrite (ZONA5, HIGH);
digitalWrite (ZONA6, HIGH);
digitalWrite (ZONA7, HIGH);
digitalWrite (ZONA8, HIGH);
Serial.println ("TUTTE LE ZONE SONO ATTIVE"); // tutte le zone sono attivate
delay (50000);
}
}
}
}
void timer()
{
Serial.print(Scount);
Serial.println();
if (Hcount <= 0)
{
if ( Mcount < 0 )
{
lcd.noCursor();
lcd.clear();
lcd.home();
}
}
lcd.setCursor (0,1);
lcd.print ("TIMER: ");
if (Hcount >= 10)
{
lcd.setCursor (7,1);
lcd.print (Hcount);
}
if (Hcount < 10)
{
lcd.setCursor (7,1);
lcd.write ("0");
lcd.setCursor (8,1);
lcd.print (Hcount);
}
lcd.print (":");
if (Mcount >= 10)
{
lcd.setCursor (10,1);
lcd.print (Mcount);
}
if (Mcount < 10)
{
lcd.setCursor (10,1);
lcd.write ("0");
lcd.setCursor (11,1);
lcd.print (Mcount);
}
lcd.print (":");
if (Scount >= 10)
{
lcd.setCursor (13,1);
lcd.print (Scount);
}
if (Scount < 10)
{
lcd.setCursor (13,1);
lcd.write ("0");
lcd.setCursor (14,1);
lcd.print (Scount);
}
if (Hcount <0)
{
Hcount = 0;
}
if (Mcount <0)
{
Hcount --;
Mcount = 59;
}
if (Scount <1)
{
Mcount --;
Scount = 59;
}
if (Scount > 0)
{
unsigned long currentMillis = millis();
digitalWrite (ZONA1, LOW);
if(currentMillis - secMillis > interval)
{
secMillis = currentMillis;
Scount --;
digitalWrite (ZONA1, HIGH);
}
}
}