Ciao a tutti, sto usando arduino 2560 per comandare un sistema d'allarme composto da una tastiera 4x4, 2 sensori magnetici, un display lcd 16x2 e un buzzer. Il problema sorge quando dopo aver caricato il programma, inserito l'allarme e separato uno dei due sensori il buzzer suona dopo un po' di secondi o a intervalli irregolari. Ecco il programma:
Grazie per l'aiuto
#include <LiquidCrystal.h>
#include <Password.h>
#include <Keypad.h>
Password password = Password( "2580" );
int pin1=48; //1°sensore
int pin2=53; //2° sensore
int pin3=26; //buzzer
int ledv=25; //led di stato
int ledr=23; //led di stato
int alar=0;
int alarm=0;
LiquidCrystal lcd(12,11,5,4,3,2);
const byte rig = 4;
const byte col = 4;
char keys[rig][col] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rigPin[rig] = { 33,35,37,39 };
byte colPin[col] = { 41,43,45,47 };
Keypad keypad = Keypad( makeKeymap(keys), rigPin, colPin, rig, col );
void setup(){
pinMode(ledr,OUTPUT);
pinMode(ledv,OUTPUT);
digitalWrite(ledv,HIGH);
lcd.begin(16,2);
lcd.clear();
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
pinMode (pin1,INPUT);
pinMode (pin2,INPUT);
pinMode (pin3,OUTPUT);
}
void loop(){
if (digitalRead(ledr)==HIGH) {
digitalWrite(ledv,LOW);
digitalWrite(ledr,HIGH);
alarm = digitalRead (pin1);
if (alarm==HIGH) {
digitalWrite (pin3,HIGH);
delay (100);
digitalWrite (pin3,LOW);
delay (100);
}
alar = digitalRead (pin2);
if (alar==HIGH) {
digitalWrite (pin3,HIGH);
delay (100);
digitalWrite (pin3,LOW);
delay (100);
}}
keypad.getKey();
}
void keypadEvent(KeypadEvent eKey){
if (digitalRead(ledv)==HIGH) {
switch (keypad.getState()){
case PRESSED:
lcd.setCursor(0,0);
lcd.clear();
lcd.print(eKey);
switch (eKey){
case '': checkPassword(); break;
case '#': password.reset();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Cancellato");
delay(1200);
lcd.clear();break;
default: password.append(eKey);
}}}
else {
switch (keypad.getState()){
case PRESSED:
lcd.setCursor(0,0);
lcd.clear();
lcd.print(eKey);
switch (eKey){
case '': contrPassword(); break;
case '#': password.reset();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Cancellato");
delay(1200);
lcd.clear();break;
default: password.append(eKey);
}
}}
}
void checkPassword(){
if (password.evaluate()){
password.reset();
lcd.setCursor(0,0);
lcd.clear();
lcd.print("Allarme inserito");
}}
else{
password.reset();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Codice errato");
}}
void contrPassword () {
if (password.evaluate()){
password.reset();
lcd.setCursor(0,0);
lcd.clear();
lcd.print("Allarme disinserito");
digitalWrite(ledr,LOW);
digitalWrite(ledv,HIGH);
}
else {
password.reset();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Codice errato");
}}