Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Wire.h"
- #include <LiquidCrystal.h>
- unsigned long millisTarefa1 = millis();
- unsigned long millisTarefa2 = millis();
- unsigned long millisTarefa3 = millis();
- unsigned long millisTarefa4 = millis();
- #define DS1307_ADDRESS 0x68
- byte zero = 0x00;
- String horas,minutos,segundos,horasa;
- // LCD
- #define RS PM_0
- #define RW PM_1
- #define E PM_2
- #define D0 PK_0
- #define D1 PK_1
- #define D2 PK_2
- #define D3 PK_3
- #define D4 PK_4
- #define D5 PK_5
- #define D6 PK_6
- #define D7 PK_7
- #define SW1 PJ_0
- // LEDS;7SEG
- # define a PQ_0
- # define b PQ_1
- # define c PQ_2
- # define d PQ_3
- # define e PA_4
- # define f PA_5
- # define g PA_6
- # define ponto PA_7
- # define Ts1 PB_4
- # define Ts2 PB_5
- # define LEDPAT PP_5
- #define PH0 PH_0
- #define PH1 PH_1
- #define PH2 PH_2
- #define PH3 PH_3
- bool estadoLED = false;
- #define buzz PL_4
- LiquidCrystal lcd(RS,RW,E,D0,D1,D2,D3,D4,D5,D6,D7);
- byte linhas[4] = {PL_0, PL_1, PL_2, PL_3};
- byte colunas[4] = {PM_4, PM_5, PM_6, PM_7};
- const int n = 6;
- int i,j,k=0;
- int portasdisplay[8]={a,b,c,d,e,f,g,ponto};
- int setesegmentos[11][8]={{1,1,1,1,1,1,0,0},
- {0,1,1,0,0,0,0,0},
- {1,1,0,1,1,0,1,0},
- {1,1,1,1,0,0,1,0},
- {0,1,1,0,0,1,1,0},
- {1,0,1,1,0,1,1,0},
- {1,0,1,1,1,1,1,0},
- {1,1,1,0,0,0,0,0},
- {1,1,1,1,1,1,1,0},
- {1,1,1,1,0,1,1,0},
- {0,0,0,0,0,0,1,0}};
- void setup() {
- Serial.begin(9600);
- for(i=0;i<8;i++)
- {
- pinMode(portasdisplay[i],OUTPUT);
- }
- pinMode(Ts1,OUTPUT);
- pinMode(Ts2,OUTPUT);
- pinMode(LEDPAT,OUTPUT);
- pinMode(buzz, OUTPUT);
- lcd.begin(16, 2);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Defina os");
- lcd.clear();
- Wire.begin();
- //setDateTime(); // caso queira ajustar a hora
- }
- byte decToBcd(byte val){
- return ( (val/10*16) + (val%10) );
- }
- byte bcdToDec(byte val) {
- return ( (val/16*10) + (val%16) );
- }
- void setDateTime(){
- byte segundo = 30;
- byte minuto = 7;
- byte hora = 14;
- byte diasemana = 3;
- byte dia = 06;
- byte mes = 06;
- byte ano = 23;
- Wire.beginTransmission(DS1307_ADDRESS);
- Wire.write(zero);
- Wire.write(decToBcd(segundo));
- Wire.write(decToBcd(minuto));
- Wire.write(decToBcd(hora));
- Wire.write(zero);
- Wire.endTransmission();
- }
- bool PMbr;
- bool PMal;
- int printahora(bool modo){
- Wire.beginTransmission(DS1307_ADDRESS);
- Wire.write(zero);
- Wire.endTransmission();
- Wire.requestFrom(DS1307_ADDRESS, 7);
- int segundo = bcdToDec(Wire.read());
- int minuto = bcdToDec(Wire.read());
- int hora = bcdToDec(Wire.read() & 0b111111); //Formato 24 horas
- if (hora <= 12) {
- PMbr = false;
- }
- if (hora > 12) {
- PMbr = true;
- }
- int diasemana = bcdToDec(Wire.read()); //0-6 -> Domingo - Sábado
- int dia = bcdToDec(Wire.read());
- int mes = bcdToDec(Wire.read());
- int ano = bcdToDec(Wire.read());
- int horaa = hora+4;
- if (horaa <= 12) {
- PMal = false;
- }
- if (horaa > 12) {
- PMal = true;
- }
- int resto = 0;
- int converte=0;
- if(horaa>23){
- resto = horaa - 24;
- horaa = resto;}
- // Serial.print(segundo);
- //Serial.print(minuto);
- //Serial.print(hora);
- //Exibe a data e hora. Ex.: 3/12/13 19:00:00
- if(modo==1 && PMbr==1){
- hora=hora-12;
- }
- if(modo==1 && PMal==1){
- horaa=horaa-12;
- }
- if(hora<10)
- horas="0"+String(hora);
- else
- horas=String(hora);
- if(horaa<10)
- horasa="0"+String(horaa);
- else
- horasa=String(horaa);
- if(minuto<10)
- minutos="0"+String(minuto);
- else
- minutos=String(minuto);
- if(segundo<10)
- segundos="0"+String(segundo);
- else
- segundos=String(segundo);
- lcd.setCursor(0,0);
- lcd.print(horas);
- lcd.print(":");
- lcd.print(minutos);
- lcd.print(":");
- lcd.println(segundos);
- lcd.setCursor(8,0);
- if(modo==1 && PMbr==1){
- lcd.print(" PM BRA ");
- }
- if(modo==1 && PMbr==0){
- lcd.print(" AM BRA ");
- }
- if(modo ==0){
- lcd.print(" BRA ");
- }
- lcd.setCursor(0,1);
- lcd.print(horasa);
- lcd.print(":");
- lcd.print(minutos);
- lcd.print(":");
- lcd.print(segundos);
- lcd.setCursor(8,1);
- if(modo==1 && PMal==1){
- lcd.print(" PM BER ");
- }
- if(modo==1 && PMal==0){
- lcd.print(" AM BER ");
- }
- if(modo ==0){
- lcd.print(" BER ");
- }
- return minuto;
- }
- void acendetodos(){
- digitalWrite(a,HIGH);
- digitalWrite(b,HIGH);
- digitalWrite(c,HIGH);
- digitalWrite(d,HIGH);
- digitalWrite(e,HIGH);
- digitalWrite(f,HIGH);
- digitalWrite(g,HIGH);
- digitalWrite(ponto,HIGH);
- }
- void apagatodos(){
- digitalWrite(a,LOW);
- digitalWrite(b,LOW);
- digitalWrite(c,LOW);
- digitalWrite(d,LOW);
- digitalWrite(e,LOW);
- digitalWrite(f,LOW);
- digitalWrite(g,LOW);
- digitalWrite(ponto,LOW);
- }
- int alarme(){
- int i=0;
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("!!!alarme!!!");
- while(i<5){
- if((millis() - millisTarefa4) < 500){
- digitalWrite(LEDPAT, HIGH);
- acendetodos();
- tone(buzz,3000);}
- else{
- digitalWrite(LEDPAT, LOW);
- apagatodos();
- noTone (buzz);
- }
- if((millis() - millisTarefa4) > 1000){
- millisTarefa4 = millis();
- i=i+1;
- }
- }
- digitalWrite(LEDPAT, LOW);
- apagatodos();
- lcd.clear();
- return 0;
- }
- int trocaturno(bool modo){
- int i = 0;
- int x = 11;
- int k=0;
- while(x>0){
- printahora(modo);
- if((millis()-millisTarefa3)<1000){
- if((millis() - millisTarefa2) < 10){
- j= x / 10;
- for(k=0;k<8;k++){
- digitalWrite(portasdisplay[k],setesegmentos[j][k]);
- }
- digitalWrite(Ts1,HIGH);
- digitalWrite(Ts2,LOW);
- }
- else{
- j = x % 10;
- for(k=0;k<8;k++){
- digitalWrite(portasdisplay[k],setesegmentos[j][k]);
- }
- digitalWrite(Ts2,HIGH);
- digitalWrite(Ts1,LOW);
- }
- if(millis()-millisTarefa2>20){
- millisTarefa2 = millis();
- }
- if((millis() - millisTarefa1) < 500){
- tone(buzz,6000);}
- else{
- noTone (buzz);
- }
- if((millis() - millisTarefa1) > 1000){
- millisTarefa1 = millis();
- }
- }
- else{
- millisTarefa3=millis();
- x=x-1;
- }
- }
- digitalWrite(Ts1,LOW);
- digitalWrite(Ts2,LOW);
- return 1;
- }
- int on=1; //sistema ligado
- int minuto;
- bool modo=0;
- bool emergencia=false;
- void loop() {
- lcd.setCursor(0, 0);
- char tcld = Serial.read();
- lcd.clear();
- switch(tcld){
- case 'A':case 'a':
- on= 0;
- lcd.clear();
- lcd.clear();
- break;
- case 'B':case 'b':
- lcd.clear();
- on= 1;
- break;
- case 'C':case 'c':
- break;
- }
- while(on==1){
- tcld = Serial.read();
- switch(tcld){
- case 'A':case 'a':
- lcd.clear();
- lcd.clear();
- on= 0;
- break;
- case 'B':case 'b':
- on= 1;
- break;
- case 'C':case 'c':
- modo=!modo;
- break;
- }
- minuto=printahora(modo);
- if(((minuto % 2) == 0) && segundos == "00"){
- trocaturno(modo);
- }
- if(emergencia==true){
- on=alarme();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement