//Bibliotecas
#include <Adafruit_NeoPixel.h>
#include <IRremote.h>
#include <LiquidCrystal.h>
#include "Servo.h"
#define LED_PIN 13
#define LED_COUNT 24
//Definições
Servo janelas;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int RECV = 11;
IRrecv irrecv(RECV);
decode_results results;
int arcondicionado = 0;
int starttime;
int activetime;
int prevoustime = 0;
int hours = 0;
int mins = 0;
int alarm_hours = 0;
int alarm_mins = 0;
int stop = 0;
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
//Setup
void setup()
{
Serial.begin(9600);
//Lcd
lcd.begin(16, 2);
lcd.clear();
//Neo Pixel
strip.begin();
strip.show();
irrecv.enableIRIn();//Controle IR
pinMode(11, INPUT);//Sensor IR
digitalWrite(11, HIGH);
janelas.attach(A0);//Janelas
janelas.write(0);
pinMode(8, INPUT);//Botão
digitalWrite(8, HIGH);
pinMode(9, OUTPUT);
pinMode(12, OUTPUT);
pinMode(10, OUTPUT);//Lâmpada
starttime = millis() / 1000;
}
void loop()
{
//Potencia lampada
int intensidade= analogRead(A2);
analogWrite(10,map(intensidade,0,1023,0,255));
//ArCondicionado
int temp = map(analogRead(A1), 20,358,-40,125);
if (temp >= 27 && arcondicionado == 0)
{
digitalWrite(9, HIGH);
}
else
{
digitalWrite(9, LOW);
}
while (digitalRead(8) == LOW)
{
if (irrecv.decode(&results))
{
Serial.println(results.value, HEX);
unsigned int codigoRecebido = results.value;
irrecv.resume();
if(codigoRecebido != 0xFFFF){
if (results.value == 0xFD50AF)
{
alarm_mins++;
}
}
if (results.value == 0xFD10EF)
{
alarm_mins--;
}
if (results.value == 0xFD609F)
{
alarm_hours++;
}
if (results.value == 0xFD20DF)
{
alarm_hours--;
}
}
//Inicialização do alarme
janelas.write(0);
stop = 0;
lcd.setCursor(6, 1);
lcd.print("Alarme");
lcd.setCursor(6, 0);
lcd.setCursor(6, 0);
if (alarm_hours < 10)
{
lcd.print("0");
lcd.print(alarm_hours);
}
else
{
lcd.print(alarm_hours);
}
lcd.print(":");
if (alarm_mins < 10)
{
lcd.print("0");
lcd.print(alarm_mins);
}
else
{
lcd.print(alarm_mins);
}
if (alarm_mins > 59)
{
alarm_hours++;
alarm_mins = 0;
}
if (alarm_hours > 23)
{
alarm_hours = 0;
}
if (alarm_hours <= 0)
{
alarm_hours = 0;
}
if (alarm_mins <= 0)
{
alarm_mins = 0;
}
delay(500);
lcd.clear();
}
//Relogio em funcionamento
activetime = (millis() / 1000) - starttime;
if (prevoustime < (activetime - 59))
{
mins++;
prevoustime = activetime;
}
if (mins > 59)
{
hours++;
mins = 0;
}
if (hours > 23)
{
hours = 0;
}
lcd.setCursor(6, 0);
if (hours < 10)
{
lcd.print("0");
lcd.print(hours);
}
else
{
lcd.print(hours);
}
lcd.print(":");
if (mins < 10)
{
lcd.print("0");
lcd.print(mins);
}
else
{
lcd.print(mins);
}
lcd.setCursor(5, 1);
lcd.print("Relogio ");
//Alarme tocando
if (alarm_hours == hours && alarm_mins == mins && alarm_mins != 0 && stop != 1)
{
//delay(200);
janelas.write(90);
digitalWrite(12, HIGH);
for (int i = 1; i <= 24; i++)
{
strip.setPixelColor(i - 1, 0, 255, 0);
strip.setPixelColor(i, 255, 0, 0);
strip.show();
}
delay(200);
}
else
{
delay(300);
}
//Algumas funções do controle
if (irrecv.decode(&results))
{
unsigned int codigoRecebido = results.value;
Serial.println(results.value, HEX);
irrecv.resume();
if(codigoRecebido != 0xFFFF)
{
//Parar alarme
if (results.value == 0xFDA05F)
{
stop = 1;
digitalWrite(12, LOW);
for (int i = 24; i >= 1; i--)
{
strip.setPixelColor(i - 1, 127, 127, 127);
strip.show();
}
}
//Abrir janelas
else if (results.value == 0xFD807F)
{
janelas.write(90);
}
//Fechar janelas
else if (results.value == 0xFD906F)
{
janelas.write(0);
}
}
}
lcd.clear();
}
Comments