Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Librarii folosite */
- #include <IRremote.h>
- #include "DHT.h"
- #include <LiquidCrystal_I2C.h>
- #include <Wire.h>
- #include "RTClib.h"
- #define PIN_RELEU_PRIZA_0 2
- #define PIN_RELEU_PRIZA_1 3
- #define PIN_RELEU_PRIZA_2 4
- #define PIN_SENZOR_DHT11 5
- #define PIN_IR_RECEIVER 6
- #define PIN_BUTON_1 9
- #define PIN_BUTON_2 10
- #define PIN_BUTON_3 8
- #define PIN_LED_ROSU 11
- #define PIN_LED_VERDE 12
- #define PIN_LED_ALBASTRU 13
- #define PIN_SENZOR_CRT_PRIZA_0 A0
- #define PIN_SENZOR_CRT_PRIZA_1 A1
- #define PIN_SENZOR_CRT_PRIZA_2 A2
- #define PIN_SENZOR_LUMINA A3
- #define NR_PRIZE 2 /* Numerotate: 0,1,2 */
- const int val_min_lumina = 10; /* Pragul de 0% pentru luminozitate */
- const int val_max_lumina = 500; /* Pragul de 100% pentru luminozitate */
- int mVperAmp = 100; // use 100 for 20A Module and 66 for 30A Module
- double Voltage = 0;
- double VRMS = 0;
- double AmpsRMS = 0;
- char* tipuri_de_comanda[] = {"Nefolosita", "Temperatura", "Umiditate", "Lumina", "Telecomanda", "Ceas" };
- int nr_comenzi_posibile = 5;
- /* Initializari senzori */
- /** Infrared receiver **/
- IRrecv irrecv(PIN_IR_RECEIVER);
- decode_results results;
- /** Humidity/Temperature **/
- DHT dht(PIN_SENZOR_DHT11, DHT11);
- /** LCD Display **/
- LiquidCrystal_I2C lcd(0x3F, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
- /** Modul RTC**/
- RTC_DS1307 RTC;
- enum culori_led
- {
- rosu,
- verde,
- albastru,
- mov,
- portocaliu,
- stins
- };
- enum ceas
- {
- ora,
- minut,
- secunda
- };
- enum meniuri_posibile
- {
- meniu_initializare,
- meniu_monitorizare,
- meniu_selectMenu,
- meniu_senzori,
- meniu_manual
- };
- //int meniuCurent = meniu_initializare;
- int meniuCurent = meniu_senzori;
- // int meniuCurent = meniu_manual;
- /* Structuri */
- typedef struct
- {
- char nume[10]; /* Nume asociat prizei (orientativ) */
- bool stare; /* FALSE - Nerogramata / TRUE = Programata */
- bool pornita;
- int pin_releu; /* Pinul digital la care este legat releul asociat prizei */
- int pin_senzorCurent; /* Pinul analogic la care este legat senzorul de curent asociat prizei */
- float consum_I; /* Consumul de curent instantaneu al prizei */
- int tip_comanda; /* 0 - Nefolosita, 1 - Temperatura, 2 - Umiditate, 3 - Lumina, 4 - Telecomanda, 5 - Ceas */
- float prag_temperatura; /* Pragul de temperatura exprimat in grade celsius la care priza porneste */
- float prag_umiditate; /* Pragul de umiditate exprimat in procente [0:100%]*/
- int prag_lumina; /* Pragul de luminozitate exprimat in procente [0:100%]*/
- unsigned long cod_telecomanda;
- int ceasON_ora;
- int ceasON_minut;
- int ceasOFF_ora;
- int ceasOFF_minut;
- } structura_priza;
- structura_priza prizaNr[] =
- {
- {
- "Priza 0",
- false,
- false,
- PIN_RELEU_PRIZA_0,
- PIN_SENZOR_CRT_PRIZA_0,
- 0, //consum
- 0, //comanda
- 15, //grade
- 15, //umiditate
- 0, //prag lumina
- 0, //cod telecomanda
- 0, //ceasON ora
- 0, //ceasON minut
- 0, //ceasOFF ora
- 0 //ceasOFF minut
- },
- {
- "Priza 1",
- false,
- false,
- PIN_RELEU_PRIZA_1,
- PIN_SENZOR_CRT_PRIZA_1,
- 0, //consum
- 0, //comanda
- 15, //grade
- 15, //umiditate
- 0, //prag lumina
- 0, //cod telecomanda
- 0, //ceasON ora
- 0, //ceasON minut
- 0, //ceasOFF ora
- 0 //ceasOFF minut
- },
- {
- "Priza 2",
- false,
- false,
- PIN_RELEU_PRIZA_2,
- PIN_SENZOR_CRT_PRIZA_2,
- 0, //consum
- 0, //comanda
- 15, //grade
- 15, //umiditate
- 0, //prag lumina
- 0, //cod telecomanda
- 0, //ceasON ora
- 0, //ceasON minut
- 0, //ceasOFF ora
- 0 //ceasOFF minut
- }
- };
- //PICTOGRAME
- byte termometru[8] = //icon for termometer
- {
- B00100,
- B01010,
- B01010,
- B01010,
- B01110,
- B11111,
- B11111,
- B01110
- };
- byte picatura[8] = //icon for water droplet
- {
- B00100,
- B00100,
- B01010,
- B01010,
- B10001,
- B10001,
- B10001,
- B01110,
- };
- byte soare[8] = //icon for water droplet
- {
- B00000,
- B00100,
- B10101,
- B01110,
- B01110,
- B10101,
- B00100,
- B00000,
- };
- byte ceas[8] = //icon for water droplet
- {
- B00000,
- B01110,
- B10001,
- B10011,
- B10101,
- B10101,
- B01110,
- B00000,
- };
- byte curent[8] = //icon for water droplet
- {
- B11111,
- B11011,
- B10001,
- B11011,
- B11111,
- B11111,
- B10001,
- B11111,
- };
- byte bullet[8] = //icon for water droplet
- {
- B00000,
- B00000,
- B00100,
- B01110,
- B11011,
- B01110,
- B00100,
- B00000,
- };
- void setup() {
- digitalWrite(PIN_RELEU_PRIZA_0, HIGH);
- digitalWrite(PIN_RELEU_PRIZA_1, HIGH);
- digitalWrite(PIN_RELEU_PRIZA_2, HIGH);
- // put your setup code here, to run once:
- pinMode(PIN_RELEU_PRIZA_0, OUTPUT);
- pinMode(PIN_RELEU_PRIZA_1, OUTPUT);
- pinMode(PIN_RELEU_PRIZA_2, OUTPUT);
- pinMode(PIN_SENZOR_DHT11, OUTPUT);
- pinMode(PIN_IR_RECEIVER , OUTPUT);
- pinMode(PIN_BUTON_1 , INPUT_PULLUP);
- pinMode(PIN_BUTON_2 , INPUT_PULLUP);
- pinMode(PIN_BUTON_3 , INPUT_PULLUP);
- pinMode(PIN_LED_ROSU, OUTPUT);
- pinMode(PIN_LED_VERDE , OUTPUT);
- pinMode(PIN_LED_ALBASTRU , OUTPUT);
- pinMode(PIN_SENZOR_CRT_PRIZA_0 , INPUT);
- pinMode(PIN_SENZOR_CRT_PRIZA_1 , INPUT);
- pinMode(PIN_SENZOR_CRT_PRIZA_2 , INPUT);
- pinMode(PIN_SENZOR_LUMINA , INPUT);
- Serial.begin(9600);
- irrecv.enableIRIn(); // Start the receiver
- dht.begin();
- Wire.begin();
- RTC.begin();
- lcd.init();
- lcd.backlight();
- if (! RTC.isrunning()) {
- RTC.adjust(DateTime(__DATE__, __TIME__));
- }
- lcd.createChar(0, termometru);
- lcd.createChar(1, picatura);
- lcd.createChar(2, soare);
- lcd.createChar(3, ceas);
- lcd.createChar(4, curent);
- lcd.createChar(5, bullet);
- }
- void loop() {
- //digitalWrite(PIN_RELEU_PRIZA_0, LOW);
- //digitalWrite(PIN_RELEU_PRIZA_1, HIGH);
- //digitalWrite(PIN_RELEU_PRIZA_2, HIGH);
- for (int i = 0; i <= NR_PRIZE; i++) //parcurg fiecare priza
- {
- prizaNr[i].consum_I = citire_senzor_curent(prizaNr[i].pin_senzorCurent);
- }
- switch (meniuCurent)
- {
- case meniu_initializare:
- {
- func_meniu_initializare();
- break;
- }
- case meniu_monitorizare:
- {
- func_meniu_monitorizare();
- actualizare_stare_prize();
- break;
- }
- case meniu_senzori:
- {
- func_meniu_senzori();
- break;
- }
- case meniu_selectMenu:
- {
- func_meniu_selectMenu();
- break;
- }
- case meniu_manual:
- {
- func_meniu_manual();
- actualizare_releu();
- break;
- }
- }
- // DateTime now = RTC.now();
- // lcd.clear();
- // lcd.setCursor(0, 0);
- //
- // lcd.print(now.year(), DEC);
- // lcd.print('/');
- // lcd.print(now.month(), DEC);
- // lcd.print('/');
- // lcd.print(now.day(), DEC);
- // lcd.print(' ');
- // lcd.print(now.hour(), DEC);
- // lcd.print(':');
- // lcd.print(now.minute(), DEC);
- // lcd.print(':');
- // lcd.print(now.second(), DEC);
- // // put your main code here, to run repeatedly:
- //
- // if (digitalRead(PIN_BUTON_1) == LOW)
- // {
- // // digitalWrite(PIN_LED_ROSU, HIGH);
- // aprinde_led(portocaliu);
- // digitalWrite(PIN_RELEU_PRIZA_0, LOW);
- // }
- // else
- // {
- // //digitalWrite(PIN_LED_ROSU, LOW);
- // aprinde_led(stins);
- // digitalWrite(PIN_RELEU_PRIZA_0, HIGH);
- // }
- //
- // /***********************************************************/
- // if (digitalRead(PIN_BUTON_2) == LOW)
- // {
- // digitalWrite(PIN_LED_VERDE, HIGH);
- // digitalWrite(PIN_RELEU_PRIZA_1, LOW);
- // }
- //
- // else
- // {
- // digitalWrite(PIN_LED_VERDE, LOW);
- // digitalWrite(PIN_RELEU_PRIZA_1, HIGH);
- // }
- //
- // /************************************************************/
- // if (digitalRead(PIN_BUTON_3) == LOW)
- // {
- // digitalWrite(PIN_LED_ALBASTRU, HIGH);
- // digitalWrite(PIN_RELEU_PRIZA_2, LOW);
- // }
- //
- // else
- // {
- // digitalWrite(PIN_LED_ALBASTRU, LOW);
- // digitalWrite(PIN_RELEU_PRIZA_2, HIGH);
- // }
- // if (irrecv.decode(&results))
- // {
- //
- // Serial.println(results.value, HEX);
- // irrecv.resume();
- // }
- // //Serial.println("######################");
- // //Serial.print("Nivel lumina: ");
- // //Serial.print(citire_senzor_lumina());
- // //Serial.println("%");
- // //
- // //Serial.println("######################");
- // //Serial.print("Nivel temperatura: ");
- // //Serial.print(citire_senzor_temperatura());
- // //Serial.println(" *C");
- // //
- // //
- // //Serial.println("######################");
- // //Serial.print("Nivel umiditate: ");
- // //Serial.print(citire_senzor_umiditate());
- // //Serial.println(" %");
- // //
- // //Serial.println("######################");
- // Serial.print("Curent consumat: ");
- // Serial.print(citire_senzor_curent(PIN_SENZOR_CRT_PRIZA_2));
- // Serial.println(" A");
- // //delay(500);
- }
- void aprinde_led(int culoare)
- {
- if (culoare == rosu)
- {
- digitalWrite(PIN_LED_VERDE, LOW); // sting LEDul verde
- digitalWrite(PIN_LED_ALBASTRU, LOW); // sting LEDul albastru
- digitalWrite(PIN_LED_ROSU, HIGH); // aprind LEDul rosu
- }
- if (culoare == verde)
- {
- digitalWrite(PIN_LED_ALBASTRU, LOW); // sting LEDul albastru
- digitalWrite(PIN_LED_ROSU, LOW); // sting LEDul rosu
- digitalWrite(PIN_LED_VERDE, HIGH); // aprind LEDul verde
- }
- if (culoare == albastru)
- {
- digitalWrite(PIN_LED_ROSU, LOW); // sting LEDul rosu
- digitalWrite(PIN_LED_VERDE, LOW); // sting LEDul verde
- digitalWrite(PIN_LED_ALBASTRU, HIGH); // aprind LEDul albastru
- }
- if (culoare == mov)
- {
- digitalWrite(PIN_LED_ROSU, HIGH); // aprind LEDul rosu
- digitalWrite(PIN_LED_VERDE, LOW); // sting LEDul verde
- digitalWrite(PIN_LED_ALBASTRU, HIGH); // aprind LEDul albastru
- }
- if (culoare == portocaliu)
- {
- digitalWrite(PIN_LED_ROSU, HIGH); // aprind LEDul rosu
- digitalWrite(PIN_LED_VERDE, HIGH); // aprind LEDul verde
- digitalWrite(PIN_LED_ALBASTRU, LOW); // sting LEDul albastru
- }
- if (culoare == stins)
- {
- digitalWrite(PIN_LED_ROSU, LOW); // sting LEDul rosu
- digitalWrite(PIN_LED_VERDE, LOW); // sting LEDul verde
- digitalWrite(PIN_LED_ALBASTRU, LOW); // sting LEDul albastru
- }
- }
- int citire_senzor_lumina()
- {
- int valoareEfectiva; /* Valoarea citita analogic de la fotorezistor */
- int valoareProcentuala; /* Valoarea citita anterior si mapata la intervalul [0:100] */
- valoareEfectiva = analogRead(PIN_SENZOR_LUMINA); /* Citesc senzorul analogic */
- /* Mapez valoare la noul interval */
- valoareProcentuala = map(valoareEfectiva, val_min_lumina, val_max_lumina, 0, 100);
- return valoareProcentuala; /* Returnez valoarea in procente */
- }
- float citire_senzor_temperatura()
- {
- float temperatura_citita = 0;
- temperatura_citita = dht.readTemperature(); /* Valoarea temperaturii returnata de senzorul DHT11 */
- return temperatura_citita * 0.896; /* Returnez valoarea inmultita cu un factor de calibrare */
- }
- float citire_senzor_umiditate()
- {
- float umiditate_citita = 0;
- umiditate_citita = dht.readHumidity(); /* Valoarea temperaturii citita de senzorul DHT11 */
- return umiditate_citita; /* Returnez valoarea citita */
- }
- float citire_senzor_curent(int param_pin_senzor)
- {
- float result;
- int readValue; /* Valoarea citita de la senzor */
- int maxValue = 0; /* Valoarea maxima */
- int minValue = 1024; /* Valoarea minima */
- uint32_t start_time = millis();
- while ((millis() - start_time) < 100)
- {
- /* Masor timp de o secunda */
- readValue = analogRead(param_pin_senzor);
- /* Verific daca am o valoare mai mare decat maxValue */
- if (readValue > maxValue)
- {
- /* Daca e mai mare, aceasta devine valoarea maxima */
- maxValue = readValue;
- }
- /* Verific daca am o valoare mai mica decat minValue */
- if (readValue < minValue)
- {
- /*Daca e mai mica, aceasta devine valoarea minima */
- minValue = readValue;
- }
- }
- /* Calculez curentul consumat */
- result = ((maxValue - minValue) * 5.0) / 1024.0;
- Voltage = result;
- VRMS = (Voltage / 2.0) * 0.707;
- AmpsRMS = (VRMS * 1000) / mVperAmp;
- if (AmpsRMS < 0.06)
- {
- /* Elimin citirile eronate */
- AmpsRMS = 0;
- }
- return AmpsRMS;
- }
- unsigned long citire_senzor_IR()
- {
- if (irrecv.decode(&results))
- {
- irrecv.resume();
- }
- return results.value;
- }
- int citire_senzor_ceas(int param) /*param = ORA sau MINUT */
- {
- int retVal = 0;
- DateTime now = RTC.now();
- /* Daca parametrul cerut este ora */
- if (param == ora)
- {
- retVal = now.hour();
- }
- /* Daca parametrul cerut este minutul */
- if (param == minut)
- {
- retVal = now.minute();
- }
- /* Daca parametrul cerut este secunda */
- if (param == secunda)
- {
- retVal = now.second();
- }
- /* Returnez valoarea citita */
- return retVal;
- }
- void func_meniu_initializare()
- {
- meniuCurent = meniu_initializare;
- for (int i = 0; i <= NR_PRIZE; i++) //parcurg fiecare priza
- {
- while ( prizaNr[i].stare == false)
- {
- lcd.setCursor(0, 0);
- lcd.print("Cum comand ");
- lcd.print(prizaNr[i].nume);
- lcd.print("?");
- lcd.setCursor(0, 1);
- lcd.print(prizaNr[i].tip_comanda);
- lcd.print(" -> ");
- lcd.print(tipuri_de_comanda[prizaNr[i].tip_comanda]);
- lcd.setCursor(0, 3);
- lcd.print(" + OK -");
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- lcd.clear();
- if (prizaNr[i].tip_comanda < nr_comenzi_posibile)
- prizaNr[i].tip_comanda ++;
- else
- prizaNr[i].tip_comanda = 0;
- }
- if (digitalRead(PIN_BUTON_3) == LOW)
- {
- lcd.clear();
- if (prizaNr[i].tip_comanda > 0 )
- prizaNr[i].tip_comanda --;
- else
- prizaNr[i].tip_comanda = nr_comenzi_posibile;
- }
- if (digitalRead(PIN_BUTON_2) == LOW)
- {
- lcd.clear();
- switch (prizaNr[i].tip_comanda)
- {
- case 0: /* Cazul in care tipul de comanda este: Nefolosita */
- { // mergi la urmatoarea priza
- prizaNr[i].stare = true;
- break;
- }
- case 1: /* Cazul in care tipul de comanda este: Temperatura */
- {
- while ( digitalRead(PIN_BUTON_3) == HIGH) //cat timp nu apas OK
- {
- lcd.setCursor(0, 0);
- lcd.print("Temp. citita: ");
- lcd.print(citire_senzor_temperatura(), 1);
- lcd.print((char)223);
- lcd.print("C");
- lcd.setCursor(0, 1);
- lcd.print("Prag pornire: ");
- lcd.print(prizaNr[i].prag_temperatura, 1);
- lcd.print((char)223);
- lcd.print("C");
- lcd.setCursor(0, 3);
- lcd.print(" + - SET");
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].prag_temperatura < 35)
- {
- prizaNr[i].prag_temperatura = prizaNr[i].prag_temperatura + 0.5;
- delay(200);
- }
- else
- prizaNr[i].prag_temperatura = 15;
- }
- if (digitalRead(PIN_BUTON_2) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].prag_temperatura > 15)
- {
- prizaNr[i].prag_temperatura = prizaNr[i].prag_temperatura - 0.5;
- delay(200);
- }
- else
- prizaNr[i].prag_temperatura = 35;
- }
- }
- prizaNr[i].stare = true;
- lcd.clear();
- break;
- }
- case 2: /* Cazul in care tipul de comanda este: Umiditate */
- {
- while ( digitalRead(PIN_BUTON_3) == HIGH) //cat timp nu apas OK
- {
- lcd.setCursor(0, 3);
- lcd.print(" + - SET");
- lcd.setCursor(0, 0);
- lcd.print("Umid. citita: ");
- lcd.print(citire_senzor_umiditate(), 1);
- lcd.print("%");
- lcd.setCursor(0, 1);
- lcd.print("Prag umidit.: ");
- lcd.print(prizaNr[i].prag_umiditate, 1);
- lcd.print("%");
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].prag_umiditate < 100)
- {
- prizaNr[i].prag_umiditate = prizaNr[i].prag_umiditate + 5;
- delay(200);
- }
- else
- prizaNr[i].prag_umiditate = 15;
- }
- if (digitalRead(PIN_BUTON_2) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].prag_umiditate > 15)
- {
- prizaNr[i].prag_umiditate = prizaNr[i].prag_umiditate - 5;
- delay(200);
- }
- else
- prizaNr[i].prag_umiditate = 100;
- }
- }
- prizaNr[i].stare = true;
- lcd.clear();
- break;
- }
- case 3: /* Cazul in care tipul de comanda este: Luminozitate */
- {
- while ( digitalRead(PIN_BUTON_3) == HIGH) //cat timp nu apas OK
- {
- lcd.setCursor(0, 3);
- lcd.print(" + - SET");
- lcd.setCursor(0, 0);
- lcd.print("Lum. citita: ");
- lcd.print(citire_senzor_lumina());
- lcd.print("%");
- lcd.setCursor(0, 1);
- lcd.print("Prag lumin.: ");
- lcd.print(prizaNr[i].prag_lumina, 1);
- lcd.print("%");
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].prag_lumina < 100)
- {
- prizaNr[i].prag_lumina = prizaNr[i].prag_lumina + 2;
- delay(200);
- }
- else
- prizaNr[i].prag_lumina = 0;
- }
- if (digitalRead(PIN_BUTON_2) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].prag_lumina > 0)
- {
- prizaNr[i].prag_lumina = prizaNr[i].prag_lumina - 2;
- delay(200);
- }
- else
- prizaNr[i].prag_lumina = 100;
- }
- }
- prizaNr[i].stare = true;
- lcd.clear();
- break;
- }
- case 4: /* Cazul in care tipul de comanda este: Telecomanda */
- {
- while ( digitalRead(PIN_BUTON_3) == HIGH) //cat timp nu apas OK
- {
- lcd.setCursor(0, 3);
- lcd.print(" SET");
- lcd.setCursor(0, 0);
- lcd.print("Astept cod IR");
- lcd.setCursor(0, 1);
- lcd.print("Cod citit: ");
- prizaNr[i].cod_telecomanda = citire_senzor_IR();
- lcd.print(citire_senzor_IR(), HEX);
- }
- prizaNr[i].stare = true;
- lcd.clear();
- break;
- }
- case 5: /* Cazul in care tipul de comanda este: CEAS */
- {
- prizaNr[i].ceasON_ora = citire_senzor_ceas(ora);
- prizaNr[i].ceasON_minut = citire_senzor_ceas(minut);
- prizaNr[i].ceasOFF_ora = citire_senzor_ceas(ora);
- prizaNr[i].ceasOFF_minut = citire_senzor_ceas(minut);
- while ( digitalRead(PIN_BUTON_3) == HIGH) //cat timp nu apas OK
- {
- lcd.setCursor(0, 3);
- lcd.print(" + - SET");
- lcd.setCursor(0, 0);
- lcd.print("Ora curenta: ");
- lcd.print(citire_senzor_ceas(ora));
- lcd.print(":");
- lcd.print(citire_senzor_ceas(minut));
- lcd.setCursor(0, 1);
- lcd.print("Ora ON: ");
- lcd.print(prizaNr[i].ceasON_ora);
- lcd.setCursor(12, 1);
- lcd.print(" <-");
- lcd.setCursor(0, 2);
- lcd.print("Minut ON: ");
- lcd.print(prizaNr[i].ceasON_minut);
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].ceasON_ora < 23)
- {
- prizaNr[i].ceasON_ora = prizaNr[i].ceasON_ora + 1;
- delay(200);
- }
- else
- prizaNr[i].ceasON_ora = 0;
- }
- if (digitalRead(PIN_BUTON_2) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].ceasON_ora > 0)
- {
- prizaNr[i].ceasON_ora = prizaNr[i].ceasON_ora - 1;
- delay(200);
- }
- else
- prizaNr[i].ceasON_ora = 23;
- }
- }
- delay(300);
- lcd.clear();
- while ( digitalRead(PIN_BUTON_3) == HIGH) //cat timp nu apas OK
- {
- lcd.setCursor(0, 3);
- lcd.print(" + - SET");
- lcd.setCursor(0, 0);
- lcd.print("Ora curenta: ");
- lcd.print(citire_senzor_ceas(ora));
- lcd.print(":");
- lcd.print(citire_senzor_ceas(minut));
- lcd.setCursor(0, 1);
- lcd.print("Ora ON: ");
- lcd.print(prizaNr[i].ceasON_ora);
- lcd.setCursor(0, 2);
- lcd.print("Minut ON: ");
- lcd.print(prizaNr[i].ceasON_minut);
- lcd.setCursor(12, 2);
- lcd.print(" <-");
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].ceasON_minut < 59)
- {
- prizaNr[i].ceasON_minut = prizaNr[i].ceasON_minut + 1;
- delay(200);
- }
- else
- prizaNr[i].ceasON_minut = 0;
- }
- if (digitalRead(PIN_BUTON_2) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].ceasON_minut > 0)
- {
- prizaNr[i].ceasON_minut = prizaNr[i].ceasON_minut - 1;
- delay(200);
- }
- else
- prizaNr[i].ceasON_minut = 59;
- }
- }
- //DE AICICIAICAICAIC
- delay(300);
- lcd.clear();
- while ( digitalRead(PIN_BUTON_3) == HIGH) //cat timp nu apas OK
- {
- lcd.setCursor(0, 3);
- lcd.print(" + - SET");
- lcd.setCursor(0, 0);
- lcd.print("Ora curenta: ");
- lcd.print(citire_senzor_ceas(ora));
- lcd.print(":");
- lcd.print(citire_senzor_ceas(minut));
- lcd.setCursor(0, 1);
- lcd.print("Ora OFF: ");
- lcd.print(prizaNr[i].ceasOFF_ora);
- lcd.setCursor(12, 1);
- lcd.print(" <-");
- lcd.setCursor(0, 2);
- lcd.print("Min OFF: ");
- lcd.print(prizaNr[i].ceasOFF_minut);
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].ceasOFF_ora < 23)
- {
- prizaNr[i].ceasOFF_ora = prizaNr[i].ceasOFF_ora + 1;
- delay(200);
- }
- else
- prizaNr[i].ceasOFF_ora = 0;
- }
- if (digitalRead(PIN_BUTON_2) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].ceasOFF_ora > 0)
- {
- prizaNr[i].ceasOFF_ora = prizaNr[i].ceasOFF_ora - 1;
- delay(200);
- }
- else
- prizaNr[i].ceasOFF_ora = 23;
- }
- }
- delay(300);
- lcd.clear();
- while ( digitalRead(PIN_BUTON_3) == HIGH) //cat timp nu apas OK
- {
- lcd.setCursor(0, 3);
- lcd.print(" + - SET");
- lcd.setCursor(0, 0);
- lcd.print("Ora curenta: ");
- lcd.print(citire_senzor_ceas(ora));
- lcd.print(":");
- lcd.print(citire_senzor_ceas(minut));
- lcd.setCursor(0, 1);
- lcd.print("Ora OFF: ");
- lcd.print(prizaNr[i].ceasOFF_ora);
- lcd.setCursor(0, 2);
- lcd.print("Min OFF: ");
- lcd.print(prizaNr[i].ceasOFF_minut);
- lcd.setCursor(12, 2);
- lcd.print(" <-");
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].ceasOFF_minut < 59)
- {
- prizaNr[i].ceasOFF_minut = prizaNr[i].ceasOFF_minut + 1;
- delay(200);
- }
- else
- prizaNr[i].ceasOFF_minut = 0;
- }
- if (digitalRead(PIN_BUTON_2) == LOW)
- {
- lcd.clear();
- if ( prizaNr[i].ceasOFF_minut > 0)
- {
- prizaNr[i].ceasOFF_minut = prizaNr[i].ceasOFF_minut - 1;
- delay(200);
- }
- else
- prizaNr[i].ceasOFF_minut = 59;
- }
- }
- //pana aiciaiciacia
- prizaNr[i].stare = true;
- lcd.clear();
- break;
- }
- }
- }
- delay(200);
- }
- }
- lcd.clear();
- lcd.print("Prizele au fost");
- lcd.setCursor(0, 1);
- lcd.print("configurate");
- delay(1000);
- meniuCurent = meniu_monitorizare;
- }
- void func_meniu_monitorizare()
- {
- meniuCurent = meniu_monitorizare;
- lcd.clear();
- lcd.setCursor(0, 3);
- lcd.print("|menu|");
- for (int i = 0; i <= NR_PRIZE; i++) //parcurg fiecare priza
- {
- lcd.setCursor(0, i);
- lcd.print(prizaNr[i].nume);
- lcd.print(" |");
- if (prizaNr[i].pornita == 1)
- lcd.print("ON | ");
- else
- lcd.print("OFF| ");
- lcd.print(prizaNr[i].consum_I);
- lcd.setCursor(19, i);
- lcd.print("A");
- }
- delay(100);
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- func_meniu_selectMenu();
- }
- }
- void func_meniu_senzori()
- {
- //lcd.clear();
- //lcd.setCursor(0,3);
- //lcd.print("|menu|");
- lcd.setCursor(11, 0);
- lcd.print(" ");
- lcd.setCursor(0, 0);
- lcd.print("|Temp|");
- lcd.write(0);
- lcd.print("| -> ");
- lcd.print(citire_senzor_temperatura(), 1);
- lcd.print((char)223);
- lcd.print("C");
- lcd.setCursor(11, 1);
- lcd.print(" ");
- lcd.setCursor(0, 1);
- lcd.print("|Umid|");
- lcd.write(1);
- lcd.print("| -> ");
- lcd.print(citire_senzor_umiditate(), 1);
- lcd.print("%");
- lcd.setCursor(11, 2);
- lcd.print(" ");
- lcd.setCursor(0, 2);
- lcd.print("|Lumi|");
- lcd.write(2);
- lcd.print("| -> ");
- lcd.print(citire_senzor_lumina());
- lcd.print("%");
- lcd.setCursor(11, 3);
- lcd.print(" ");
- lcd.setCursor(0, 3);
- lcd.print("|Ceas|");
- lcd.write(3);
- lcd.print("| -> ");
- lcd.print(citire_senzor_ceas(ora));
- lcd.print(":");
- lcd.print(citire_senzor_ceas(minut));
- lcd.print(":");
- lcd.print(citire_senzor_ceas(secunda));
- delay(20);
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- func_meniu_selectMenu();
- //meniuCurent = meniu_selectMenu;
- }
- }
- void func_meniu_selectMenu()
- {
- static int i = 0;
- if (meniuCurent != meniu_selectMenu)
- {
- lcd.clear();
- delay(500);
- }
- meniuCurent = meniu_selectMenu;
- lcd.setCursor(0, 0);
- lcd.print("MENIU");
- lcd.setCursor(0, 3);
- lcd.print("+ GO -");
- lcd.setCursor(9, 0);
- lcd.print("| | Init");
- lcd.setCursor(9, 1);
- lcd.print("| | Monitor");
- lcd.setCursor(9, 2);
- lcd.print("| | Senzor");
- lcd.setCursor(9, 3);
- lcd.print("| | Manual");
- // lcd.setCursor(0, i - 1);
- // lcd.print(" ");
- lcd.setCursor(10, i);
- lcd.write(5);
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- delay(350); /*Debounce*/
- if (i < 3)
- {
- i++;
- lcd.clear();
- }
- else
- {
- i = 0;
- lcd.clear();
- }
- }
- if (digitalRead(PIN_BUTON_3) == LOW)
- {
- delay(350); /*Debounce*/
- if (i > 0)
- {
- i--;
- lcd.clear();
- }
- else
- {
- i = 3;
- lcd.clear();
- }
- }
- //daca s-a apasat butonul OK, se acceseaza meniul corespunztor
- if (digitalRead(PIN_BUTON_2) == LOW)
- {
- switch(i)
- {
- case 0:
- {
- func_meniu_initializare();
- break;
- }
- case 1:
- {
- func_meniu_monitorizare();
- break;
- }
- case 2:
- {
- func_meniu_senzori();
- break;
- }
- case 3:
- {
- func_meniu_manual();
- break;
- }
- }
- }
- }
- void func_meniu_manual()
- {
- static int i = 0;
- if (meniuCurent != meniu_manual)
- {
- lcd.clear();
- delay(500);
- }
- meniuCurent = meniu_manual;
- lcd.setCursor(2, 0);
- lcd.print("PRIZA 0 |");
- if (prizaNr[0].pornita == 1)
- {
- lcd.print("ON|");
- }
- else
- {
- lcd.print("OFF|");
- }
- lcd.setCursor(2, 1);
- lcd.print("PRIZA 1 |" );
- if (prizaNr[1].pornita == 1)
- {
- lcd.print("ON|");
- }
- else
- {
- lcd.print("OFF|");
- }
- lcd.setCursor(2, 2);
- lcd.print("PRIZA 2 |");
- if (prizaNr[2].pornita == 1)
- {
- lcd.print("ON|");
- }
- else
- {
- lcd.print("OFF|");
- }
- lcd.setCursor(2, 3);
- if (i < 3)
- {
- lcd.print("[+] [SET] [-]");
- }
- else
- {
- lcd.print("[+] [MENU] [-]");
- }
- if (digitalRead(PIN_BUTON_1) == LOW)
- {
- delay(350); /*Debounce*/
- if (i < 3)
- {
- i++;
- lcd.clear();
- }
- else
- {
- i = 0;
- lcd.clear();
- }
- }
- if (digitalRead(PIN_BUTON_3) == LOW)
- {
- delay(350); /*Debounce*/
- if (i > 0)
- {
- i--;
- lcd.clear();
- }
- else
- {
- i = 3;
- lcd.clear();
- }
- }
- lcd.setCursor(0, i);
- lcd.write(5);
- if (digitalRead(PIN_BUTON_2) == LOW)
- {
- delay(100);
- //Daca sunt cu selectia pe prize
- if (i < 3)
- {
- if (prizaNr[i].pornita == 0)
- {
- prizaNr[i].pornita = 1;
- }
- else
- {
- prizaNr[i].pornita = 0;
- }
- }//Altfel merg la meniu
- else
- {
- func_meniu_selectMenu();
- }
- }
- }
- void actualizare_stare_prize()
- {
- for (int i = 0; i <= NR_PRIZE; i++) //parcurg fiecare priza
- {
- if (prizaNr[i].stare == true);
- {
- switch (prizaNr[i].tip_comanda)
- { /*1 - Temperatura, 2 - Umiditate, 3 - Lumina, 4 - Telecomanda, 5 - Ceas */
- case 0: /* Depinde de temperatura */
- {
- prizaNr[i].pornita = false;
- actualizare_releu();
- break;
- }
- case 1: /* Depinde de temperatura */
- {
- if ( citire_senzor_temperatura() >= prizaNr[i].prag_temperatura )
- {
- prizaNr[i].pornita = true;
- }
- else
- {
- prizaNr[i].pornita = false;
- }
- actualizare_releu();
- break;
- }
- case 2: /* Depinde de temperatura */
- {
- if ( citire_senzor_umiditate() >= prizaNr[i].prag_umiditate )
- {
- prizaNr[i].pornita = true;
- }
- else
- {
- prizaNr[i].pornita = false;
- }
- actualizare_releu();
- break;
- }
- case 3: /* Depinde de temperatura */
- {
- if ( citire_senzor_lumina() >= prizaNr[i].prag_lumina )
- {
- prizaNr[i].pornita = true;
- }
- else
- {
- prizaNr[i].pornita = false;
- }
- actualizare_releu();
- break;
- }
- case 4: /* Depinde de telecomanda */
- {
- results.value = 0;
- if (citire_senzor_IR() == prizaNr[i].cod_telecomanda)
- {
- if (prizaNr[i].pornita == false)
- {
- prizaNr[i].pornita = true;
- }
- else
- {
- prizaNr[i].pornita = false;
- }
- }
- actualizare_releu();
- break;
- }
- case 5: /* Depinde de ceas */
- {
- if ((citire_senzor_ceas(ora) == prizaNr[i].ceasON_ora) &&
- (citire_senzor_ceas(minut) == prizaNr[i].ceasON_minut))
- {
- Serial.print("Ora citita e: ");
- Serial.println(citire_senzor_ceas(ora));
- Serial.print("Ora setata e: ");
- Serial.println(prizaNr[i].ceasON_ora);
- Serial.println("############");
- Serial.print("min citit e: ");
- Serial.println(citire_senzor_ceas(minut));
- Serial.print("min setat e: ");
- Serial.println(prizaNr[i].ceasON_minut);
- prizaNr[i].pornita = true;
- }
- if ((citire_senzor_ceas(ora) == prizaNr[i].ceasOFF_ora) &&
- (citire_senzor_ceas(minut) == prizaNr[i].ceasOFF_minut))
- {
- prizaNr[i].pornita = false;
- }
- actualizare_releu();
- break;
- }
- default : /* Caz implicit */
- {
- prizaNr[i].pornita = false;
- actualizare_releu();
- break;
- }
- }
- }
- }
- }
- void actualizare_releu()
- {
- /* Parcurg fiecare priza in parte */
- for (int i = 0; i <= NR_PRIZE; i++)
- {
- if (prizaNr[i].pornita == true) /* Daca statusul prizei a fost setat pe 'pornit' */
- {
- digitalWrite(prizaNr[i].pin_releu, LOW); /* Aprind priza respectiva */
- }
- else if (prizaNr[i].pornita == false) /* Daca statusul prizei a fost setat pe 'oprit' */
- {
- digitalWrite(prizaNr[i].pin_releu, HIGH); /* Sting priza respectiva */
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement