Categories:

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

Tags: