#include #include #include #include #include #include #include #define DS1307_ADDRESS 0x68 //variavel do pino que esta plugado o Sensor //Neste caso é o pino 2, mais pode usar qualquer pino digital #define ONE_WIRE_BUS 2 //Instacia o Objeto oneWire e Seta o pino do Sensor para iniciar as leituras OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. //Repassa as referencias do oneWire para o Sensor Dallas (DS18B20) DallasTemperature sensor(&oneWire); // Modulo I2C display no endereco 0x27 LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); byte zero = 0x00; int horas; int minutos; int diadasemana; int diadomes; int mes; int ano; int segundos; int led = 5; int led2 = 6; Thread threadAlarme = Thread(); Thread threadComandos = Thread(); Thread threadIluminacao = Thread(); Thread threadHoras = Thread(); ThreadController master = ThreadController(); void setup(){ delay(5000); Wire.begin(); Serial.begin(9600); lcd.begin (16,2); Serial.println("Sensor de temperatura Dallas DS18b20"); pinMode(led, OUTPUT); pinMode(led2, OUTPUT); sensor.begin(); threadComandos.onRun(comandos); threadComandos.setInterval(500); threadAlarme.onRun(alarme); threadIluminacao.onRun(intensidadeLed); threadIluminacao.setInterval(500); threadHoras.onRun(capturaRTC); threadHoras.setInterval(1000); master.add(&threadComandos); master.add(&threadAlarme); master.add(&threadIluminacao); master.add(&threadHoras); display(); } void loop(){ master.run(); sensor.requestTemperatures(); float leitura=sensor.getTempCByIndex(0); Serial.println(leitura); lcd.setCursor(0,0); lcd.setCursor(9,0); lcd.print(leitura); lcd.write(223); lcd.print("C"); // Mostra os dados no display lcd.print(" "); // Acrescenta o 0 (zero) se a hora for menor do que 10 lcd.setCursor(0,0); if (horas <10) lcd.print("0"); lcd.print(horas); lcd.print(":"); // Acrescenta o 0 (zero) se minutos for menor do que 10 if (minutos < 10) lcd.print("0"); lcd.print(minutos); lcd.print(" "); // Acrescenta o 0 (zero) se minutos for menor do que 10 //if (segundos < 10) //lcd.print(" "); //lcd.print(segundos); lcd.setCursor(0,1); // Mostra o dia da semana switch(diadasemana) { case 0:lcd.print("DOMINGO"); break; case 1:lcd.print("SEGUNDA"); break; case 2:lcd.print("TERCA"); break; case 3:lcd.print("QUARTA"); break; case 4:lcd.print("QUINTA"); break; case 5:lcd.print("SEXTA"); break; case 6:lcd.print("SABADO"); } lcd.setCursor(8,1); // Acrescenta o 0 (zero) se dia do mes for menor do que 10 if (diadomes < 10) lcd.print("0"); lcd.print(diadomes); lcd.print("/"); // Acrescenta o 0 (zero) se mes for menor do que 10 if (mes < 10) lcd.print("0"); lcd.print(mes); lcd.print("/"); lcd.print(ano); } void comandos(){ String comando = stringEntrada(); if(comando == "1"){ MostraHoras(); //mostra as horas do modulo }else if(comando == "2"){ noInterrupts(); // Call to disable interrupts Serial.println("Digite as horas"); interrupts(); // Call to enable interrupts threadComandos.enabled = false; waitSerial(); Serial.println(comando); threadComandos.enabled = true; //setaHora(); //grava horario do codigo no modulo. }else if(comando == "3"){ VerificaIntensidadeLed(); }else if(comando == "4"){ threadAlarme.enabled = false; }else{ } } //Seta horario no modulo. void setaHora(){ byte segundos = 00; //Valores de 0 a 59 byte minutos = 53; //Valores de 0 a 59 byte horas = 16; //Valores de 0 a 23 byte diadasemana = 3; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc. byte diadomes = 7; //Valores de 1 a 31 byte mes = 6; //Valores de 1 a 12 byte ano = 17; //Valores de 0 a 99 Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados //As linhas abaixo escrevem no CI os valores de //data e hora que foram colocados nas variaveis acima Wire.write(ConverteParaBCD(segundos)); Wire.write(ConverteParaBCD(minutos)); Wire.write(ConverteParaBCD(horas)); Wire.write(ConverteParaBCD(diadasemana)); Wire.write(ConverteParaBCD(diadomes)); Wire.write(ConverteParaBCD(mes)); Wire.write(ConverteParaBCD(ano)); Wire.write(zero); //Start no CI Wire.endTransmission(); } byte ConverteParaBCD(byte val){ //Converte o número de decimal para BCD return ( (val/10*16) + (val%10) ); } byte ConverteparaDecimal(byte val) { //Converte de BCD para decimal return ( (val/16*10) + (val%16) ); } void display(){ Serial.println("============================"); Serial.println("|(1)Horas |"); Serial.println("|(2)Configurar Horas |"); Serial.println("|(3)Verifica Valor PWM |"); Serial.println("|(4)Desliga Alarme |"); Serial.println("============================"); } void MostraHoras(){ //capturaRTC(); //Mostra a data no Serial Monitor Serial.print("Hora : "); Serial.print(horas); Serial.print(":"); Serial.print(minutos); Serial.print(":"); Serial.print(segundos); Serial.print(" "); Serial.print("Data: "); Serial.print(diadomes); Serial.print("/"); Serial.print(mes); Serial.print("/"); Serial.print(ano); switch(diadasemana){ case 0:Serial.println(", Domingo"); break; case 1:Serial.println(", Segunda"); break; case 2:Serial.println(", Terca"); break; case 3:Serial.println(", Quarta"); break; case 4:Serial.println(", Quinta"); break; case 5:Serial.println(", Sexta"); break; case 6:Serial.println(", Sabado"); } } //canal 0 void alarme(){ if(horas == 10){ EEPROM.write(0,50 ); }else if(horas == 10 && minutos == 30){ EEPROM.write(0,80 ); }else if(horas == 11 && minutos == 00){ EEPROM.write(0,110); }else if(horas == 11 && minutos == 30){ EEPROM.write(0,140 ); }else if(horas == 12 && minutos == 00){ EEPROM.write(0,170 ); }else if(horas == 12 && minutos == 30){ EEPROM.write(0,200 ); }else if(horas == 13 && minutos == 00){ EEPROM.write(0,255 ); }else if(horas == 14){ EEPROM.write(0,255 ); }else if(horas == 15){ EEPROM.write(0,255 ); }else if(horas == 16){ EEPROM.write(0,255 ); }else if(horas == 17){ EEPROM.write(0,200 ); }else if(horas == 17 && minutos == 30){ EEPROM.write(0,170 ); }else if(horas == 18){ EEPROM.write(0,140 ); }else if(horas == 18 && minutos == 30){ EEPROM.write(0,110); }else if(horas == 19){ EEPROM.write(0,80 ); }else if(horas == 19 && minutos == 30){ EEPROM.write(0,50 ); }else if(horas == 20){ EEPROM.write(0,LOW ); //desligado }else if(horas == 21){ EEPROM.write(0,LOW ); //desligado }else if(horas == 22){ EEPROM.write(0,LOW ); //desligado }else if(horas == 23){ EEPROM.write(0,LOW ); //desligado }else if(horas == 0){ EEPROM.write(0,LOW ); //desligado }else if(horas == 1){ EEPROM.write(0,LOW ); //desligado }else if(horas == 2){ EEPROM.write(0,LOW ); //desligado }else if(horas == 3){ EEPROM.write(0,LOW ); //desligado }else if(horas == 4){ EEPROM.write(0,LOW ); //desligado }else if(horas == 5){ EEPROM.write(0,LOW ); //desligado }else if(horas == 6){ EEPROM.write(0,LOW ); //desligado }else if(horas == 7){ EEPROM.write(0,LOW ); //desligado }else if(horas == 8){ EEPROM.write(0,LOW ); //desligado }else if(horas == 9){ EEPROM.write(0,LOW ); //desligado } //canal 2 if(horas == 17){ EEPROM.write(2,50 ); }else if(horas == 17 && minutos == 30){ EEPROM.write(2,80 ); }else if(horas == 18){ EEPROM.write(2,110); }else if(horas == 18 && minutos == 30){ EEPROM.write(2,140 ); }else if(horas == 19){ EEPROM.write(2,170 ); }else if(horas == 19 && minutos == 30){ EEPROM.write(2,200 ); }else if(horas == 20){ EEPROM.write(2,255 ); }else if(horas == 20 && minutos == 30){ EEPROM.write(2,200 ); }else if(horas == 21){ EEPROM.write(2,170 ); }else if(horas == 21 && minutos == 30){ EEPROM.write(2,140 ); }else if(horas == 22){ EEPROM.write(2,110 ); }else if(horas == 22 && minutos == 30){ EEPROM.write(2,80 ); }else if(horas == 23){ EEPROM.write(2,50 ); }else if(horas == 23 && minutos == 30){ EEPROM.write(2,LOW ); }else if(horas == 0){ EEPROM.write(2,LOW ); }else if(horas == 1){ EEPROM.write(2,LOW ); }else if(horas == 2){ EEPROM.write(2,LOW); }else if(horas == 3){ EEPROM.write(2,LOW ); }else if(horas == 4){ EEPROM.write(2,LOW ); }else if(horas == 5){ EEPROM.write(2,LOW ); }else if(horas == 6){ EEPROM.write(2,LOW ); }else if(horas == 7){ EEPROM.write(2,LOW ); }else if(horas == 8){ EEPROM.write(2,LOW ); }else if(horas == 9){ EEPROM.write(2,LOW ); }else if(horas == 10){ EEPROM.write(2,LOW ); }else if(horas == 11){ EEPROM.write(2,LOW ); }else if(horas == 12){ EEPROM.write(2,LOW ); }else if(horas == 13){ EEPROM.write(2,LOW ); }else if(horas == 14){ EEPROM.write(2,LOW ); }else if(horas == 15){ EEPROM.write(2,LOW ); }else if(horas == 16){ EEPROM.write(2,LOW ); } } void capturaRTC(){ Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); Wire.endTransmission(); Wire.requestFrom(DS1307_ADDRESS, 7); segundos = ConverteparaDecimal(Wire.read()); minutos = ConverteparaDecimal(Wire.read()); horas = ConverteparaDecimal(Wire.read() & 0b111111); diadasemana = ConverteparaDecimal(Wire.read()); diadomes = ConverteparaDecimal(Wire.read()); mes = ConverteparaDecimal(Wire.read()); ano = ConverteparaDecimal(Wire.read()); } void intensidadeLed(){ int valorIntensidadeLed = EEPROM.read(0); analogWrite(led, valorIntensidadeLed); int valorIntensidadeLed2 = EEPROM.read(2); analogWrite(led2, valorIntensidadeLed2); } void VerificaIntensidadeLed(){ int valor = EEPROM.read(0); Serial.print("Valor PWM:"); Serial.println(valor); int valor2 = EEPROM.read(2); Serial.print("Valor2 PWM:"); Serial.println(valor2); } //Metodo para capturar string do terminal. String stringEntrada(){ String conteudo = ""; char valor; while(Serial.available() > 0){ valor = Serial.read(); if(valor != '\n'){ conteudo.concat(valor); } delay(10); } return conteudo; } void waitSerial(){ while (!Serial.available()); delay(10); while (Serial.available() && Serial.read()); }