M’illumino di meno Codice-in-c
M’illumino di meno.ino
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#define iR_1 28 //sensore 1 primo varco
#define iR_2 26 //sensore 2 primo varco
#define iR_3 24 //sensore 1 secondo varco
#define iR_4 22 //sensore 2 secondo varco
MFRC522 rfid(48,49);//pin collegati sda rst
LiquidCrystal_I2C lcd(0x3F, 16, 2);
String chiave = “9392bf16”;
#define Ls1 30 //luce stanza 1
#define Ls2 32 //luce stanza 2
#define Bs1 34//pulsante stanza 1
#define Bs2 36//pulsante stanza 2
#define LDRs1 A3 //fotoresistore stanza 1
#define LDRs2 A4 //fotoresistore stanza 2
#define Buzz 11 //pin buzzer allarme
#include “mi_illumino_di_meno.h”
//#include “Lettura_RFID”
//#include “Monitor_LCD”
void setup() {
Serial.begin(9600);// opens serial port, sets data rate to 9600 bps
SPI.begin();
lcd.begin ();
rfid.PCD_Init();
pinMode(iR_1, INPUT);
pinMode(iR_2, INPUT);
pinMode(iR_3, INPUT);
pinMode(iR_4, INPUT);
pinMode(Buzz, OUTPUT);
}
//dichiarazione delle stanze e rispettivi LDR
stanza stanza1(Ls1, OFF, 0, Bs1); //dichiarazione stanza 1
int LDR_stanza1; //dichiarazione variabile dove verrà memorizzato il livello di luminosità stanza 1
stanza stanza2(Ls2, OFF, 0, Bs2); //dichiarazione stanza 2
int LDR_stanza2; //dichiarazione variabile dove verra memorizzato il livello di luminosità stanza 1
//definizione dei varchi 1entrata-2uscita
varco V1 = {iR_1, iR_2, {0, 0, 0}, 0}; // si riferisce alla stanza 1
varco V2 = {iR_4, iR_3, {0, 0, 0}, 0}; // si riferisce alla stanza 1
varco V3 = {iR_3, iR_4, {0, 0, 0}, 0}; // si riferisce alla stanza 2
bool stateAllarm = false;
void loop() {
stateAllarm = controlloAll(chiave, stateAllarm);
//stateAllarm = true;
if (stateAllarm == false) {
V1 = modForRoom(V1);
V2 = modForRoom(V2);
V3 = modForRoom(V3);
LDR_stanza1 = livL(LDRs1);
stanza1.controllo(V1, LDR_stanza1, 700);
stanza1.controllo(V2, LDR_stanza1, 700);
stanza1.pulsante();
LDR_stanza2 = livL(LDRs2);
stanza2.controllo(V3, LDR_stanza2, 700);
stanza2.pulsante();
spegniallarme(Buzz);
//visualizzazione sul visore
stampLCD1(stanza1, stanza2);
/* Serial.print(sensorStatus(iR_3,iR_4));
Serial.print(” “); */
} else {
stampLCD2();
V1 = modForRoom(V1);
V2 = modForRoom(V2);
V3 = modForRoom(V3);
stanza1.controllo(V1, 0, 0);
stanza1.controllo(V2, 0, 0);
stanza2.controllo(V3, 0, 0);
spegniallarme(Buzz);
if (stanza2.Np > 0 || stanza1.Np>0) {
allarmeattiva(Buzz);//suono buzzer
stampLCD3();
}
}
}
Controllo_accensione.cpp
#include “mi_illumino_di_meno.h”
#include <Arduino.h>
//funzione controllo della classe stanza
void stanza::controllo(varco c,int l,int lv){
Np=Np + c.modificatore;
if(imposto==OFF){
if(Np>0 && l<=lv){
digitalWrite(pin,HIGH);
stato=ON;
ms=millis();
} else {
//timer di spegnimento
if(millis()-ms>=1500){
digitalWrite(pin,LOW);
stato=OFF;
}
}
}else{
digitalWrite(pin,HIGH);
if(Np<0 ){
digitalWrite(pin,LOW);
stato=OFF;
imposto=OFF;
}
}
}
//funzione per lo stato imposto
void stanza::pulsante(){
long tdb = 900; //tempo di debounce in millisecondi
if(digitalRead(pinB)==true && imposto==OFF && (millis()-millsP)>5000){
imposto = ON;
millsP=millis();
}else if(digitalRead(pinB)==true && imposto==ON && (millis()-millsP)>5000){
imposto = OFF;
millsP=millis();
}
}
Lettura_LDR.cpp
#include “mi_illumino_di_meno.h”
#include <Arduino.h>
float livL(int a){
return (float)analogRead(a);
};
Lettura_RFID
#include “mi_illumino_di_meno.h”
#include <Arduino.h>
//includere nel foglio principale la libreria –> <MFRC522.h>
// dichiarare nel foglio principale il sensore -> MFRC522 rfid(48,49); //pin collegati sda rsd
//inizializzare nel void setup —————–> SPI.begin(); rfid.PCD_Init();
String getUID(){
String uid = “”;
if(rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()){
for(int i =0; i<rfid.uid.size; i++){
uid += rfid.uid.uidByte[i] < 0x10 ? “0” : “”;
uid += String(rfid.uid.uidByte[i], HEX);
}
//Serial.println(“RFID ID: ” + uid);
rfid.PICC_HaltA(); //per terminare la comunicazione con la tessera
}
return uid;
}
//lettura della carta
bool controlloAll(String key,bool state){
if(state==false && getUID()==key){
return true;
}else if(state==true && getUID()==key){
return false;
}else{
return state;
}
}
void spegniallarme(int pin){
noTone(pin);
}
void allarmeattiva(int pin){
tone(pin, millis()%800+400);
}
Monitor_LCD
#include “mi_illumino_di_meno.h”
#include <Arduino.h>
void stampLCD1(stanza a, stanza b){
lcd.clear();
lcd.home();
lcd.print(“Persone S1”);
lcd.setCursor(12,0);
lcd.print(a.Np);
lcd.setCursor(0,1);
lcd.print(“Persone S2”);
lcd.setCursor(12,1);
lcd.print(b.Np);
};
void stampLCD2(){
lcd.clear();
lcd.home();
lcd.print(“Allarme attiva”);
}
void stampLCD3(){
lcd.clear();
lcd.home();
lcd.print(“Allarme intrusi”);
}
Sensore_IR.cpp
#include “mi_illumino_di_meno.h”
#include <Arduino.h>
/*ci fornisce lo stato del complesso dei due sensori per ogni porta,
* quando è acceso solo il primo sensore che viene inserito nella
* funzione viene restituito il valore 1, quando è attivo
* il secondo sensore che viene inserito nella funzione viene
* restituito il valore 2, quando sono attivi ambedue i sensori
* viene restituito il valore 3, quando invece sono spenti
* entrambi viene restituito il valore 0
*
* – PRIMO SENSORE 1 –
* – SECONDO SENSORE 2 –
* – AMBEDUE I SENSORI 3 –
* – NESSUN SENSORE 0 –
*
*/
int sensorStatus(int s1,int s2){
if(digitalRead(s1)==false && digitalRead(s2)==false){
return 3;
}else if(digitalRead(s1)==false){
return 1;
}else if(digitalRead(s2)==false){
return 2;
}else {
return 0;
}
}
//creiamo una funzione che in base alla definizione delle porte che abbiamo ci aggiunge o sottrae direttamente
varco modForRoom(varco V){
V.s[2]=sensorStatus(V.se,V.su);
if(V.s[1]==0 && V.s[2]!=0){
V.s[0]=V.s[2];
}
if(V.s[2]==0 && V.s[1]==2 && V.s[1]!=V.s[0]){
V.modificatore = 1;
}else if(V.s[2]==0 && V.s[1]==1 && V.s[1]!=V.s[0]){
V.modificatore = -1;
}else {
V.modificatore = 0;
}
V.s[1]=V.s[2];
return V;
};
mi_illumino_di_meno.h
#ifndef mi_illumono_di_meno_h
#define mi_illumono_di_meno_h
#include <Arduino.h>
#define ON 1
#define OFF 0
struct varco {
int se;
int su;
int s[3];
int modificatore;
};
class stanza{
public:
int pin;//pin del led della stanza
int stato;//stato ON/OFF della luce
int Np;//numero persone
int pinB;//pin del pulsante
int imposto = 0;//stato del bottone
//variabili per il controllo
long ms = 0;//variabile per ritardo spegnimeto luce a Np 0 per stanza
long millsP = 0;//variabile per il debounce dei bottoni
stanza(int pinLamp, int statoIniziale, int NumeroP, int pinButton){
pin=pinLamp;
stato=statoIniziale;
Np=NumeroP;
pinB=pinButton;
pinMode(pin,OUTPUT);
}
void controllo(varco c,int l,int lv);//definita il Controllo_accensione.cpp
void pulsante(); //definita il Controllo_accensione.cpp
};
int sensorStatus(int s1,int s2); //Funzione definita in Sensore_IR.cpp
varco modForRoom(varco V); //Funzione definita in Sensore_IR.cpp
float livL(int a); //Funzione definita in Lettura_LDR.cpp
String getUID(); //Funzione definita in Lettura_RFID.ino
#endif