Advertisement
Guest User

Untitled

a guest
Aug 17th, 2015
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.75 KB | None | 0 0
  1. #define DS1307_ADDRESS 0x68
  2.  
  3. // Inicializa o LCD
  4. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  5.  
  6. byte zero = 0x00;
  7. int led = 13;
  8.  
  9. void setup()
  10. {
  11. pinMode (led, OUTPUT);
  12. // Define o LCD com 16 colunas e 2 linhas
  13. lcd.begin(16, 2);
  14. Wire.begin();
  15. Serial.begin(9600);
  16. // A linha abaixo pode ser retirada apos setar a data e hora
  17. // SelecionaDataeHora();
  18. }
  19.  
  20. void loop()
  21. {
  22. Mostrarelogio();
  23. delay(1000);
  24. }
  25.  
  26. void SelecionaDataeHora() // Seta a data e a hora do DS1307
  27. {
  28. byte segundos = 01; // Valores de 0 a 59
  29. byte minutos = 59; // Valores de 0 a 59
  30. byte horas = 23; // Valores de 0 a 23
  31. byte diadasemana = 4; // Valores de 0 a 6 (0=Domingo, 1 = Segunda...)
  32. byte diadomes = 23; // Valores de 1 a 31
  33. byte mes = 4; // Valores de 1 a 12
  34. byte ano = 15; // Valores de 0 a 99
  35. Wire.beginTransmission(DS1307_ADDRESS);
  36. // Stop no CI para que o mesmo possa receber os dados
  37. Wire.write(zero);
  38.  
  39. // As linhas abaixo escrevem no CI os valores de
  40. // data e hora que foram colocados nas variaveis acima
  41. Wire.write(ConverteParaBCD(segundos));
  42. Wire.write(ConverteParaBCD(minutos));
  43. Wire.write(ConverteParaBCD(horas));
  44. Wire.write(ConverteParaBCD(diadasemana));
  45. Wire.write(ConverteParaBCD(diadomes));
  46. Wire.write(ConverteParaBCD(mes));
  47. Wire.write(ConverteParaBCD(ano));
  48. Wire.write(zero); //Start no CI
  49. Wire.endTransmission();
  50. }
  51.  
  52. byte ConverteParaBCD(byte val)
  53. {
  54. // Converte o número de decimal para BCD
  55. return ( (val/10*16) + (val%10) );
  56. }
  57.  
  58. byte ConverteparaDecimal(byte val)
  59. {
  60. // Converte de BCD para decimal
  61. return ( (val/16*10) + (val%16) );
  62. }
  63.  
  64. void Mostrarelogio()
  65. {
  66. Wire.beginTransmission(DS1307_ADDRESS);
  67. Wire.write(zero);
  68. Wire.endTransmission();
  69. Wire.requestFrom(DS1307_ADDRESS, 7);
  70. int segundos = ConverteparaDecimal(Wire.read());
  71. int minutos = ConverteparaDecimal(Wire.read());
  72. int horas = ConverteparaDecimal(Wire.read() & 0b111111);
  73. int diadasemana = ConverteparaDecimal(Wire.read());
  74. int diadomes = ConverteparaDecimal(Wire.read());
  75. int mes = ConverteparaDecimal(Wire.read());
  76. int ano = ConverteparaDecimal(Wire.read());
  77. // Imprime mensagem na primeira linha do display
  78. lcd.setCursor(0,0);
  79. lcd.print("DATA: ");
  80.  
  81. // Mostra a hora atual no display
  82. lcd.setCursor(6, 1);
  83. if (horas < 10)
  84. {lcd.print("0");}
  85. lcd.print(horas);
  86. lcd.print(":");
  87. if (minutos < 10)
  88. {lcd.print("0");}
  89. lcd.print(minutos);
  90. lcd.print(":");
  91. if (segundos < 10)
  92. {lcd.print("0");}
  93. lcd.print(segundos);
  94.  
  95. lcd.setCursor(4,1);
  96. lcd.print("H ");
  97. // Mostra a HORA atual no display
  98. lcd.setCursor(0, 3);
  99. lcd.print("Data : ");
  100. lcd.setCursor(6,0);
  101. if (diadomes < 10)
  102. {lcd.print("0");}
  103. lcd.print(diadomes);
  104. lcd.print(".");
  105. if (mes < 10)
  106. {lcd.print("0");}
  107. lcd.print(mes);
  108. lcd.print(".");
  109. lcd.print(ano);
  110.  
  111. if (horas == 18 && minutos == 00 && segundos < 15)
  112. {
  113. digitalWrite (led, HIGH);
  114. delay (50);
  115. }
  116. {
  117. digitalWrite (led, LOW);
  118. }
  119. delay (50);
  120.  
  121. if (horas == 00 && minutos == 00 && segundos < 15)
  122. {
  123. digitalWrite (led, HIGH);
  124. delay (50);
  125. }
  126. {
  127. digitalWrite (led, LOW);
  128. }
  129. delay (50);
  130.  
  131. if (horas == 12 && minutos == 00 && segundos < 15)
  132. {
  133. digitalWrite (led, HIGH);
  134. delay (50);
  135. }
  136. {
  137. digitalWrite (led, LOW);
  138. }
  139. delay (50);
  140.  
  141. if (horas == 06 && minutos == 00 && segundos < 15)
  142. {
  143. digitalWrite (led, HIGH);
  144. delay (50);
  145. }
  146. {
  147. digitalWrite (led, LOW);
  148. }
  149. delay (50);
  150.  
  151.  
  152. //Mostra o dia da semana no display
  153. lcd.setCursor(0, 1);
  154. switch(diadasemana)
  155. {
  156. case 0:lcd.print("Dom");
  157. break;
  158. case 1:lcd.print("Seg");
  159. break;
  160. case 2:lcd.print("Ter");
  161. break;
  162. case 3:lcd.print("Qua");
  163. break;
  164. case 4:lcd.print("Qui");
  165. break;
  166. case 5:lcd.print("Sex");
  167. break;
  168. case 6:lcd.print("Sab");
  169.  
  170. }
  171.  
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement