Salve a tutti, non uccidetemi per come è scritto è il mio primo codice... Premetto che funziona tutto, ma ho un problema, funziona un solo contatto magnetico alla volta(i 2 contatti sono ReedPin e MagneticoPin) se li inverto stessa cosa si mette andare l'altro e uno no. Per esempio sul pin 13 vanno e sull'altro non funzionano, magari è una svista mia non so. Grazie in anticipo!P.S ho cancellato dei commenti e la parte che creavo il tastierino perchè era + di 9000char sennò scusate
int i = 0;
int j = 0;
int s = 0;
int x = 0;
int q = 0;
int w = 0;
int e = 0;
int r = 0;
int y = 0;
int acceso=0;
// Le variabili che seguono servono per definire i piedini digitali di arduino mega usati
int PirPin = 10;
int buzzer = 12;
int ReedPin = 49;
int MagneticoPin = 13;
int ledAcceso = 52;
int ledSpento = 53;
int ledInizio = 50;
#include <Wire.h> // Libreria di sistema - E' richiesta da I2CIO.cpp
#include <LiquidCrystal_I2C.h> // Libreria LCD I2C
LiquidCrystal_I2C lcd(0x27,16,2); // pongo l'indirizzo del display a 0x27
void disinserimento(){
q=0;
w=0;
e=0;
r=0;
x=0;
i=0;
j=0;
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Disinseririmento");
while ((w<6)||(e<6)){
char key = keypad.getKey();
if (q==0){
lcd.setCursor(0,1);
lcd.print("-");
lcd.print(">");
q++;
}
if (key != NO_KEY && w<6){
lcd.print("*");
keyInsert[w]=key;
w++;
}
if(key == '*') {
lcd.clear();
lcd.print("Verifica");
delay(1000);
for(e=0; e<6;e++){
if(keyInsert[e]==code[e]){
r++; //Incrementa
}
else{ //altrimenti
lcd.clear(); //Pulisce il display
lcd.print("Riprova"); //Scrittura display
disinserimento(); //Spostati nel disinserimento
}
}
}
}
if(r==6){ //Se r=6
lcd.clear(); //Pulisce il display
lcd.print("Disinserito"); //Scrittura display
delay(1000); //Attesa in [ms]
setup(); //Allarme disinserito e ritorna alla condizione iniziale
}
}
void SensorePir(){ //Routine del sensore pir
delay(1200); //Attesa in [ms]
digitalWrite(ledAcceso, LOW); //Led allarme inserito spento
digitalWrite(ledSpento, HIGH);//led allarme in allerta acceso
lcd.clear(); //Pulisce il display
lcd.setCursor(0,0); //Settaggio display
lcd.print("Intrusione"); //Scrittura display
lcd.setCursor(0,1); //Settaggio display
lcd.print("Salotto"); //Scrittura display
tone(buzzer,1000); //Attiva il cicalino
y=1; //Incrementa
if(key == 'A'){ //Se il tasto è = ad A svolgi quanto segue
disinserimento(); //Passa al disinserimento dell'allarme
}
}
void SensoreReed(){ //Routine del contatto magnetico
digitalWrite(ledAcceso, LOW); //Led allarme inserito spento
digitalWrite(ledSpento, HIGH);//led allarme in allerta acceso
lcd.clear(); //Pulisce il display
lcd.setCursor(0,0); //Settaggio display
lcd.print("Intrusione"); //Scrittura display
lcd.setCursor(0,1); //Settaggio display
lcd.print("Finestra"); //Scrittura display
tone(buzzer,4000); //Attiva il cicalino
y=1; //Incrementa
if(key == 'A'){ //Se il tasto è = ad A svolgi quanto segue
disinserimento(); //Passa al disinserimento dell'allarme
}
}
void SensoreMagnetico(){ //Routine del contatto magnetico2
digitalWrite(ledAcceso, LOW); //Led allarme inserito spento
digitalWrite(ledSpento, HIGH);//led allarme in allerta acceso
lcd.clear(); //Pulisce il display
lcd.setCursor(0,0); //Settaggio display
lcd.print("Intrusione"); //Scrittura display
lcd.setCursor(0,1); //Settaggio display
lcd.print("Porta"); //Scrittura display
tone(buzzer,4000); //Attiva il cicalino
y=1; //Incrementa
if(key == 'A'){ //Se il tasto è = ad A svolgi quanto segue
disinserimento(); //Passa al disinserimento dell'allarme
}
}
void sensori(){ //Routine dei sensori nella condizione iniziale di livello logico ancora basso
char key = keypad.getKey(); //serve per la corretta lettura della pressione sul tastierino
digitalRead(PirPin); //Legge lo stato logico del pin del Pir
digitalRead(ReedPin); //Legge lo stato logico del pin del contatto magnetico
digitalRead(MagneticoPin); //Legge lo stato logico del pin del contatto magnetico2
if(digitalRead(PirPin) == HIGH){ //Se il Pir manda un segnale alto(1) svolgi quanto segue
SensorePir(); //Passa alla routine del Pir
}
else if(digitalRead(ReedPin) == HIGH){//Se il contatto magnetico manda un segnale alto(1) svolgi quanto segue
SensoreReed(); //Passa alla routine del Contatto magnetico
}
else if(digitalRead(MagneticoPin) == HIGH){//Se il contatto magnetico manda un segnale alto(1) svolgi quanto segue
SensoreMagnetico(); //Passa alla routine del Contatto magnetico2
}
if(key == 'A'){ //Se il tasto è = ad A svolgi quanto segue
disinserimento(); //Passa al disinserimento dell'allarme
}
else{ //Altrimenti
sensori(); //Passa alla routine che controlla lo stato dei sensori
}
}
void setup(){ //Routine del setup
y=0; //Assume tale valore
noTone(buzzer); //Cicalino non attivo
pinMode(PirPin, INPUT); //Pin del Pir come ingresso
pinMode(ReedPin, INPUT); //Pin del Contatto magnetico come ingresso
pinMode(MagneticoPin, INPUT);//Pin del Contatto magnetico2 come ingresso
pinMode(ledAcceso, OUTPUT); //Pine del led allarme inserito come uscita
pinMode(ledSpento, OUTPUT); //Pine del led allarme in allerta come uscita
pinMode(ledInizio, OUTPUT); //Pine del led allarme in condizione iniziale come uscita
digitalWrite(PirPin, LOW); //Poni il pin del Pir a livello logico basso(0)
digitalWrite(ReedPin, LOW); //Poni il pin del Contatto magnetico a livello logico basso(0)
digitalWrite(ledSpento, LOW);//Poni il pin del led allarme in allerta a livello logico basso(0)
digitalWrite(ledInizio, HIGH);//Poni il pin del led allarme in condizione iniziale a livello logico alto(1)
lcd.init(); //Inizializza l'Lcd
lcd.backlight(); //Accende la retroilluminazione
lcd.begin(16,2); //Lcd a 16 colonne e 2 righe
lcd.clear(); //Pulisce il display
lcd.setCursor(0,0); //Settaggio display
lcd.print("Digita Password");//Scrittura display
}
void loop(){ //Routine di condizione iniziale
char key = keypad.getKey(); //serve per la corretta lettura della pressione sul tastierino
if (i==0){
lcd.setCursor(0,1); //Settaggio display
lcd.print("-"); //Scrittura display
lcd.print(">"); //Scrittura display
i++; //Incrementa
}
if (key != NO_KEY && j<6){ //Se ci sono caratteri e w<6 allora svolgi quanto segue
lcd.print("*"); //Scrittura display
keyInsert[j]=key; //Il tasto premuto è un tasto del tastierino
j++; //Incrementa
}
if(key == '*') {
lcd.clear(); //Pulisce il display
lcd.print("Verifica"); //Scrittura display
delay(1000); //Attesa in [ms]
for(s=0; s<6;s++){ //Ricontrolla N volte il codice inserito
if(keyInsert[s]==code[s]){ //Condizione di uguaglianza con il codice giusto preimpostato per eseguire quanto segue
x++; //Incrementa
}
}
if(x==6){
lcd.setCursor(0,0);
lcd.print("ALLARME INSERITO");
digitalWrite(ledAcceso, HIGH);
digitalWrite(ledInizio, LOW);
x=0;
j=0;
sensori();
}
else{
lcd.setCursor(0,0);
lcd.print("Accesso Negato");
x=0;
i=0;
j=0;
setup();
}
}
}