Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- \\bibliotecas
- #include <DS1307.h>
- #include <SPI.h>
- #include <LiquidCrystal.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <Keypad.h> //Biblioteca adicionada manualmente na pasta arduino-1.0.4\libraries
- #include <Wire.h>
- #include <avr/wdt.h>
- #include <OneWire.h>
- #define BUFSIZ 100
- //Constantes de Entrada
- #define PIN_BLUE 7
- #define PIN_RED 8
- #define PIN_GREEN 9
- #define PIN_SAIDA_TERMO 31
- #define PIN_SAIDA_BOMBA 33
- #define PIN_SAIDA_LUZ 35
- #define PIN_SAIDA_AUX1 37
- #define PIN_SAIDA_BUZZ 41
- #define PIN_ENTRADA_NIVEL_B 39
- #define PIN_ENTRADA_NIVEL_A 41
- #define PIN_ENTRADA_TEMP 6
- //Constantes para configuração do RTC
- #define HORAS 2
- #define MINUTOS 1
- #define SEGUNDOS 0
- #define DIASEMANA 3
- #define DIAMES 4
- #define MES 5
- #define ANO 6
- OneWire ds(PIN_ENTRADA_TEMP);
- LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
- //KeyPad
- const byte ROWS = 4;
- const byte COLS = 3;
- char keys[ROWS][COLS] = {
- {'1','2','3'},
- {'4','5','6'},
- {'7','8','9'},
- {'#','0','*'}
- };
- //123 colunas
- //4567 linhas
- byte colPins[COLS] = {30, 32, 34};
- byte rowPins[ROWS] = {22, 24, 26, 28};
- Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
- char clientline[BUFSIZ];
- char comando[BUFSIZ];
- char comando_teclado[BUFSIZ];
- int index;
- int tamanhocomando;
- boolean inicioComando1;
- boolean inicioComando2;
- boolean inicioFuncaoTeclado;
- boolean inicioComandoTeclado;
- boolean fimComando;
- boolean recebendoComandoWeb;
- int indiceentrada;
- int HoraConfirmada;
- int QtdHoraConfirmada;
- int Segundo;
- boolean modoAutomatico;
- void setup() {
- Wire.begin(); // join i2c bus
- Serial.begin(9600); //
- // ds1307setup();
- wdt_enable(WDTO_8S);
- HoraConfirmada = 0;
- QtdHoraConfirmada = 0;
- pinMode(PIN_ENTRADA_NIVEL_B, INPUT);
- pinMode(PIN_ENTRADA_NIVEL_A, INPUT);
- pinMode(PIN_SAIDA_BOMBA, OUTPUT);
- pinMode(PIN_SAIDA_TERMO, OUTPUT);
- pinMode(PIN_SAIDA_AUX1, OUTPUT);
- pinMode(PIN_SAIDA_LUZ, OUTPUT);
- pinMode(PIN_SAIDA_BUZZ, OUTPUT);
- digitalWrite(PIN_SAIDA_BOMBA, LOW);
- digitalWrite(PIN_SAIDA_TERMO, LOW);
- digitalWrite(PIN_SAIDA_AUX1, LOW);
- digitalWrite(PIN_SAIDA_LUZ, LOW);
- digitalWrite(PIN_SAIDA_BUZZ, LOW);
- inicioComando1 = false;
- inicioFuncaoTeclado = false;
- inicioComandoTeclado = false;
- inicioComando2 = false;
- fimComando = false;
- recebendoComandoWeb = false;
- indiceentrada = 0;
- modoAutomatico = true;
- Segundo = 0;
- delay(500);
- lcd.begin(20, 4);
- lcd.print("Aquadroid ");
- lcd.setCursor(0, 1);
- lcd.print("Iniciando Sistema ");
- lcd.setCursor(0, 2);
- lcd.print(" ");
- delay(2000);
- lcd.setCursor(0, 1);
- lcd.print(" ");
- lcd.setCursor(0, 2);
- lcd.print(" ");
- BuzzerConfirma();
- }
- void loop()
- {
- wdt_reset();
- AguardaComandosTeclado();
- ModoAutomatico();
- if(Segundo == 0 )
- {
- LeituraTemperatura();
- }
- PrintData();
- }
- void LeituraTemperatura(){
- byte i;
- byte present = 0;
- byte data[12];
- byte addr[8];
- int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
- if ( !ds.search(addr)) {
- ds.reset_search();
- }
- ds.reset();
- ds.select(addr);
- ds.write(0x44,1);
- delay(800);
- present = ds.reset();
- ds.select(addr);
- ds.write(0xBE);
- for ( i = 0; i < 9; i++) {
- data[i] = ds.read();
- }
- LowByte = data[0];
- HighByte = data[1];
- TReading = (HighByte << 8) + LowByte;
- SignBit = TReading & 0x8000;
- if (SignBit)
- {
- TReading = (TReading ^ 0xffff) + 1;
- }
- Tc_100 = (6 * TReading) + TReading / 4;
- Whole = Tc_100 / 100;
- Fract = Tc_100 % 100;
- if (SignBit)
- {
- Serial.print("-");
- }
- Serial.print(Whole);
- Serial.print(".");
- if (Fract < 10)
- {
- Serial.print("0");
- }
- Serial.print(Fract);
- Serial.print("\n");
- lcd.setCursor(15, 0);
- lcd.print(Whole);
- lcd.print(".");
- lcd.print(Fract);
- }
- int ConfirmaTrocaHora(int hora)
- {
- if(HoraConfirmada == hora)
- {
- QtdHoraConfirmada = 0;
- return hora;
- }
- else
- {
- QtdHoraConfirmada++;
- }
- if(QtdHoraConfirmada>=4)
- {
- HoraConfirmada = hora;
- }
- return HoraConfirmada;
- }
- void ModoAutomatico(){
- lcd.setCursor(13, 0);
- if (modoAutomatico == true){
- digitalWrite(PIN_SAIDA_BOMBA, HIGH);
- digitalWrite(PIN_SAIDA_TERMO, HIGH);
- lcd.print("A");
- int rtc[7];
- #define ds1307get ;
- ds1307get(rtc,true);
- int hora = ConfirmaTrocaHora(rtc[HORAS]);
- if (hora >= 7 && hora < 19){
- digitalWrite(PIN_SAIDA_LUZ, HIGH);
- analogWrite(PIN_RED, 0);
- analogWrite(PIN_GREEN, 0);
- analogWrite(PIN_BLUE, 0);
- }
- else if (hora >= 19 && hora < 20){
- digitalWrite(PIN_SAIDA_LUZ, LOW);
- analogWrite(PIN_RED, 255);
- analogWrite(PIN_GREEN, 255);
- analogWrite(PIN_BLUE, 255);
- }
- else if (hora >= 20 && hora < 21){
- digitalWrite(PIN_SAIDA_LUZ, LOW);
- analogWrite(PIN_RED, 0);
- analogWrite(PIN_GREEN, 0);
- analogWrite(PIN_BLUE, 255);
- }
- else if (hora >= 21 && hora < 22){
- digitalWrite(PIN_SAIDA_LUZ, LOW);
- analogWrite(PIN_RED, 0);
- analogWrite(PIN_GREEN, 0);
- analogWrite(PIN_BLUE, 50);
- }
- else if (hora >= 22){
- digitalWrite(PIN_SAIDA_LUZ, LOW);
- analogWrite(PIN_RED, 0);
- analogWrite(PIN_GREEN, 0);
- analogWrite(PIN_BLUE, 0);
- }
- }
- else{
- lcd.print("M");
- }
- }
- void AguardaComandosTeclado()
- {
- char key = keypad.getKey();
- if (key != NO_KEY){
- BuzzerClica();
- lcd.setCursor(0, 1);
- lcd.print("Selecione uma funcao");
- lcd.setCursor(0, 2);
- Serial.print("KEY: ");
- Serial.println(key);
- if( inicioComandoTeclado == true )
- {
- Serial.println("Executado comando");
- if(key == '#')
- {
- BuzzerCancela();
- ComandoCancelado();
- Serial.println("Comando Cancelado");
- }
- else if (key == '*')
- {
- index++;
- clientline[index] = 'F';
- // clientline[index] = 0;
- Serial.println(clientline);
- DisparaComando();
- ComandoExecutado();
- Serial.println("Comando Executado");
- Serial.println(clientline);
- BuzzerConfirma();
- }
- else
- {
- index++;
- clientline[index] = key;
- Serial.print("Armazenando buffer: ");
- Serial.println(key);
- Serial.println(clientline);
- }
- }
- else
- {
- inicioComandoTeclado = true;
- index = 0;
- tamanhocomando = 0;
- memset( &clientline, 0, BUFSIZ ); //clear inString memory
- Serial.println("Executado menu");
- inicioFuncaoTeclado = true;
- switch (key) {
- case '1':
- clientline[index] = 'I';
- index++;
- clientline[index] = 'L';
- index++;
- clientline[index] = 'R';
- lcd.print("Luz Vermelha 0..250 ");
- break;
- case '2':
- clientline[index] = 'I';
- index++;
- clientline[index] = 'L';
- index++;
- clientline[index] = 'G';
- lcd.print("Luz Verde 0..250 ");
- break;
- case '3':
- clientline[index] = 'I';
- index++;
- clientline[index] = 'L';
- index++;
- clientline[index] = 'B';
- lcd.print("Luz Azul 0..250 ");
- break;
- case '4':
- clientline[index] = 'I';
- index++;
- clientline[index] = 'S';
- index++;
- clientline[index] = '4';
- lcd.print("Bomba 1:ON = 0:OFF ");
- break;
- case '5':
- clientline[index] = 'I';
- index++;
- clientline[index] = 'S';
- index++;
- clientline[index] = '3';
- lcd.print("Termo 1:ON = 0:OFF ");
- break;
- case '6':
- clientline[index] = 'I';
- index++;
- clientline[index] = 'S';
- index++;
- clientline[index] = '2';
- lcd.print("LUZ 1:ON = 0:OFF ");
- break;
- case '7':
- clientline[index] = 'I';
- index++;
- clientline[index] = 'S';
- index++;
- clientline[index] = '1';
- lcd.print("Saida 1 1:ON = 0:OFF ");
- break;
- case '8':
- clientline[index] = 'I';
- index++;
- clientline[index] = 'M';
- index++;
- clientline[index] = 'A';
- lcd.print("Auto 1:ON = 0:OFF ");
- Serial3.print("C\r");
- break;
- case '9':
- lcd.print("Nao programado ");
- break;
- case '#':
- ComandoCancelado();
- break;
- case '*':
- ComandoCancelado();
- break;
- }
- }
- }
- }
- void ComandoCancelado()
- {
- lcd.setCursor(0, 1);
- lcd.print("Comando cancelado ");
- lcd.setCursor(0, 2);
- lcd.print(" ");
- lcd.setCursor(0, 2);
- lcd.print(" ");
- inicioFuncaoTeclado = false;
- inicioComandoTeclado = false;
- }
- void ComandoExecutado()
- {
- lcd.setCursor(0, 1);
- lcd.print("Comando executado ");
- lcd.setCursor(0, 2);
- lcd.print(" ");
- lcd.setCursor(0, 2);
- lcd.print(" ");
- inicioFuncaoTeclado = false;
- inicioComandoTeclado = false;
- }
- void DisparaComando()
- {
- boolean iniciocomando = false;
- for (int i = 0; i<index ; i++)
- {
- if(clientline[i] == 'I')
- {
- iniciocomando = true;
- }
- else if(clientline[i] == 'F')
- {
- break;
- }
- else if(iniciocomando)
- {
- comando[tamanhocomando] = clientline[i];
- tamanhocomando++;
- }
- }
- comando[index] = 0;
- lcd.setCursor(0, 3);
- lcd.print(comando);
- Serial.print("Tipo Comando: ");
- Serial.println(comando[0]);
- if (comando[0] == 'L')
- {
- DisparaLuz();
- }
- else if (comando[0] == 'S')
- {
- DisparaSaida();
- }
- else if (comando[0] == 'M')
- {
- DisparaModo();
- }
- }
- void DisparaModo(){
- Serial.print("Aqui");
- Serial.print(comando);
- char modo = comando[2];
- Serial.print(modo);
- if (modo == '0'){
- modoAutomatico = false;
- }
- else{
- modoAutomatico = true;
- }
- }
- void DisparaLuz()
- {
- int nivel = 0;
- char nivelaux[3];
- nivelaux[0] = comando[2];
- nivelaux[1] = comando[3];
- nivelaux[2] = comando[4];
- nivel = atoi(nivelaux);
- char pin = comando[1];
- switch (pin) {
- case 'R':
- analogWrite(PIN_RED, nivel);
- break;
- case 'G':
- analogWrite(PIN_GREEN, nivel);
- break;
- case 'B':
- analogWrite(PIN_BLUE, nivel);
- break;
- }
- }
- void DisparaSaida()
- {
- int nivel = 0;
- if(comando[2] == '0')
- {
- nivel = 0;
- }
- else
- {
- nivel = 1;
- }
- char pin = comando[1];
- switch (pin) {
- case '4':
- digitalWrite(PIN_SAIDA_BOMBA, nivel);
- break;
- case '3':
- digitalWrite(PIN_SAIDA_TERMO, nivel);
- break;
- case '2':
- digitalWrite(PIN_SAIDA_LUZ, nivel);
- break;
- case '1':
- digitalWrite(PIN_SAIDA_AUX1, nivel);
- break;
- }
- }
- void BuzzerConfirma()
- {
- buzz(PIN_SAIDA_BUZZ, 3000, 50);
- buzz(PIN_SAIDA_BUZZ, 2500, 30);
- buzz(PIN_SAIDA_BUZZ, 3500, 250);
- }
- void BuzzerClica()
- {
- buzz(PIN_SAIDA_BUZZ, 3500, 100);
- }
- void BuzzerCancela()
- {
- buzz(PIN_SAIDA_BUZZ, 3500, 500);
- }
- void buzz(int targetPin, long frequency, long length) {
- long delayValue = 1000000/frequency/2;
- long numCycles = frequency * length/ 1000;
- for (long i=0; i < numCycles; i++){
- digitalWrite(targetPin,HIGH);
- delayMicroseconds(delayValue);
- digitalWrite(targetPin,LOW);
- delayMicroseconds(delayValue);
- }
- }
- void PrintData(){
- int rtc[7];
- ds1307get(rtc,true);
- lcd.setCursor(0, 3);
- if (rtc[HORAS] < 10){
- lcd.print("0");
- }
- lcd.print(rtc[HORAS],DEC);
- lcd.setCursor(2, 3);
- lcd.print(":");
- lcd.setCursor(3, 3);
- if (rtc[MINUTOS] < 10){
- lcd.print("0");
- }
- lcd.print(rtc[MINUTOS],DEC);
- lcd.setCursor(5, 3);
- lcd.print(":");
- lcd.setCursor(6, 3);
- if (rtc[SEGUNDOS] < 10){
- lcd.print("0");
- }
- lcd.print(rtc[SEGUNDOS],DEC);
- Segundo = rtc[SEGUNDOS];
- lcd.setCursor(8, 3);
- lcd.print(" ");
- lcd.setCursor(10, 3);
- if (rtc[DIAMES] < 10){
- lcd.print("0");
- }
- lcd.print(rtc[DIAMES],DEC);
- lcd.setCursor(12, 3);
- lcd.print("/");
- lcd.setCursor(13, 3);
- if (rtc[MES] < 10){
- lcd.print("0");
- }
- lcd.print(rtc[MES],DEC);
- lcd.setCursor(15, 3);
- lcd.print("/");
- lcd.setCursor(16, 3);
- lcd.print(rtc[ANO],DEC);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement