Buongiorno a Tutti,
da qualche mese sono entrato nel mondo di Arduino.
Da qualche settimana ho iniziato a fare il mio primo progetto.
Vorrei usare Arduino come sistema di allarme e come sistema di domotica.
ho un problema...
ho un sensore magnetico ed un sensore PIR.
Quando allontano il magnete dal sensore o quando rilevo un movimento si accende il led.
Il problema è che quando uno dei due sensori ritorna nella modalità LOW o HIGH, il led smette di funzionare.
Mi potreste dare una mano ?
// LCD 20x4
#include <LiquidCrystal_I2C.h>
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
//DEFINISCI VARIABILI INGRESSI ANALOGICI
//MONITORAGGIO TEMPERATURA INTERNA (CONTROL UNIT)
#define ONE_WIRE_BUS 4
//MONITORAGGIO APERTURA CONTROL UNIT
int I_Limit_Switch = 3;
int Limit_Switch_State = LOW;
//EXTERNAL SENSOR - MAGNETIC/MOTION SENSOR
int I_External_Sensor_1 = 22;
int External_Sensor_1_State = HIGH;
int External_Sensor_2 = 23;
int External_Sensor_2_State = LOW;
int External_Sensor_3 = 24;
int External_Sensor_3_State = LOW;
int External_Sensor_4 = 25;
int External_Sensor_4_State = LOW;
int External_Sensor_5 = 26;
int External_Sensor_5_State = LOW;
int External_Sensor_6 = 27;
int External_Sensor_6_State = LOW;
int External_Sensor_7 = 28;
int External_Sensor_7_State = LOW;
int External_Sensor_8 = 29;
int External_Sensor_8_State = LOW;
int External_Sensor_9 = 30;
int External_Sensor_9_State = LOW;
int External_Sensor_10 = 31;
int External_Sensor_10_State = LOW;
int External_Sensor_11 = 32;
int External_Sensor_11_State = LOW;
int External_Sensor_12 = 33;
int External_Sensor_12_State = LOW;
int External_Sensor_13 = 34;
int External_Sensor_13_State = LOW;
//MOTION SENSOR
int I_Motion_Sensor_1 = 38;
int Motion_Sensor_1_State = LOW;
int Motion_Sensor_2 = 39;
int Motion_Sensor_2_State = LOW;
int Motion_Sensor_3 = 40;
int Motion_Sensor_3_State = LOW;
//MONITORAGGIO TEMPERATURA - SENSORI DHT22
#define DHT_1 A0
#define DHT_2 A1
#define DHT_3 A2
#define DHT_4 A3
#define DHT_5 A4
#define DHT_6 A5
#define DHT_7 A6
#define DHT_8 A7
#define DHT_9 A8
#define DHT_10 A9
// LCD 20x4
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
// LED
#define Led_Green 7 // led verde, porta 16 (A2)
#define Led_Red 5 // led rosso, porta 17 (A3)
#define Led_Blue 8 // caricamento
#define Led_Yellow 6 // Error
#define Buzzer 9 // sirena Interna
// RELE'
#define Sirena 46 // Relè N. 1
#define Ventola_Interna 47 // Relè N. 2
#define Rele3 48 // Relè N. 3
#define Rele4 49 // Relè N. 4
// COMANDO SERIALE
char Comando;
//------------------------------------------------------------------------------------
//***************************** VOID SETUP **************************************
// SENSORE DALLAS 18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup()
{
Serial.begin(115200);
Serial.println("Domotica R 1.0");
Loading();
pinMode(I_Limit_Switch,INPUT);
pinMode(I_External_Sensor_1, INPUT);
pinMode(External_Sensor_2, INPUT);
pinMode(External_Sensor_3, INPUT);
pinMode(External_Sensor_4, INPUT);
pinMode(External_Sensor_5, INPUT);
pinMode(External_Sensor_6, INPUT);
pinMode(External_Sensor_7, INPUT);
pinMode(External_Sensor_8, INPUT);
pinMode(External_Sensor_9, INPUT);
pinMode(External_Sensor_10, INPUT);
pinMode(External_Sensor_11, INPUT);
pinMode(External_Sensor_12, INPUT);
pinMode(External_Sensor_13, INPUT);
pinMode(I_Motion_Sensor_1, INPUT);
pinMode(Motion_Sensor_2, INPUT);
pinMode(Motion_Sensor_3, INPUT);
pinMode(Led_Green, OUTPUT);
pinMode(Led_Red, OUTPUT);
pinMode(Led_Blue, OUTPUT);
pinMode(Led_Yellow, OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(Sirena, OUTPUT);
pinMode(Ventola_Interna, OUTPUT);
pinMode(Rele3, OUTPUT);
pinMode(Rele4, OUTPUT);
digitalWrite(Sirena, HIGH);
digitalWrite(Ventola_Interna, HIGH);
digitalWrite(Rele3, HIGH);
digitalWrite(Rele4, HIGH);
}
//***************************** VOID LOOP *****************************
void loop ()
{
Print_Menu();
// F_Comandi();
A_Limit_Switch();
A_External_Sensor_1();
A_Motion_Sensor_1();
}
//************************** ALLARMI **************************
void A_Limit_Switch()
{
int V_Limit_Switch = digitalRead(I_Limit_Switch);
if(V_Limit_Switch != Limit_Switch_State)
{
Limit_Switch_State = V_Limit_Switch;
if( Limit_Switch_State == HIGH)
{
Serial.println("Control Unit Aperta (1)"); // Stampa su Seriale
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(F("Control Unit")); // Stampa su LCD
lcd.setCursor(0, 2);
lcd.print(F("***** APERTA *****"));
digitalWrite(Led_Red, HIGH); // Accende LED Rosso
digitalWrite(Sirena, LOW); // Accende SIRENA
}
else{
Serial.println("Control Unit Chiusa (0)");
lcd.clear();
Print_Menu(); // Ritorna al Menu Principale
digitalWrite(Led_Red, LOW); // Spegne LED Rosso
digitalWrite(Sirena, HIGH); // Spegne SIRENA
}
}
}
//************************** EXTERNAL SENSOR **************************
void A_External_Sensor_1()
{
int V_External_Sensor_1 = digitalRead(I_External_Sensor_1);
if(V_External_Sensor_1 != External_Sensor_1_State)
{
External_Sensor_1_State = V_External_Sensor_1;
if(External_Sensor_1_State == LOW)
{
Serial.println("Porta Principale Aperta (1)"); // Stampa su Seriale
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(F("Porta Principale")); // Stampa su LCD
lcd.setCursor(0, 2);
lcd.print(F("***** APERTA *****"));
digitalWrite(Led_Red, HIGH); // Accende LED Rosso
digitalWrite(Sirena, LOW); // Accende SIRENA
}
else{
Serial.println("Porta Principale Chiusa (0)");
lcd.clear();
Print_Menu(); // Ritorna al Menu Principale
digitalWrite(Led_Red, LOW); // Spegne LED Rosso
digitalWrite(Sirena, HIGH); // Spegne SIRENA
}
}
}
//************************** MOTION SENSOR **************************
void A_Motion_Sensor_1()
{
int V_Motion_Sensor_1 = digitalRead(I_Motion_Sensor_1);
if(V_Motion_Sensor_1 != Motion_Sensor_1_State)
{
Motion_Sensor_1_State = V_Motion_Sensor_1;
if(Motion_Sensor_1_State == HIGH)
{
Serial.println("Movimento (1)"); // Stampa su Seriale
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(F("Corridoio")); // Stampa su LCD
lcd.setCursor(0, 2);
lcd.print(F("***** APERTA *****"));
digitalWrite(Led_Red, HIGH); // Accende LED Rosso
digitalWrite(Sirena, LOW); // Accende SIRENA
}
else{
Serial.println("NO Movimento (0)");
lcd.clear();
Print_Menu(); // Ritorna al Menu Principale
digitalWrite(Led_Red, LOW); // Spegne LED Rosso
digitalWrite(Sirena, HIGH); // Spegne SIRENA
}
}
}