Advertisement
Guest User

Untitled

a guest
Oct 30th, 2016
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1.  
  2.  
  3.  
  4. /* Programa: Relogio Tempo Real com alarme.
  5. Hardware: Arduino Uno Shield RTC Grove.
  6. Preaparado para display 20X4 mas pode ser usado com display 16X2
  7. Criado por Eng. Carlos kwiek - Rio de Janeiro - RJ - Brasil
  8. 02 de Agosto de 2015 - e-mail carloskwiek1@hotmail.com
  9. O codigo é livre para uso e modificação, seguindo as diretivas de
  10. software open source.
  11. Use por sua conta e risco.
  12. */
  13.  
  14. #include "Wire.h"
  15. #include <LiquidCrystal.h>
  16.  
  17. #define DS1307_ADDRESS 0x68
  18.  
  19. // Inicializa o LCD
  20. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  21.  
  22. byte zero = 0x00;
  23. int buzzer = 13;
  24.  
  25. void setup()
  26. {
  27. pinMode (buzzer, OUTPUT);
  28. // Define o LCD com 16 colunas e 2 linhas
  29. lcd.begin(16, 2);
  30. Wire.begin();
  31. Serial.begin(9600);
  32. // A linha abaixo pode ser retirada apos setar a data e hora
  33. // SelecionaDataeHora();
  34. }
  35.  
  36. void loop()
  37. {
  38. Mostrarelogio();
  39. delay(1000);
  40. }
  41.  
  42. void SelecionaDataeHora() // Seta a data e a hora do DS1307
  43. {
  44. byte segundos = 01; // Valores de 0 a 59
  45. byte minutos = 27; // Valores de 0 a 59
  46. byte horas = 10; // Valores de 0 a 23
  47. byte diadasemana = 0; // Valores de 0 a 6 (0=Domingo, 1 = Segunda...)
  48. byte diadomes = 27; // Valores de 1 a 31
  49. byte mes = 3; // Valores de 1 a 12
  50. byte ano = 16; // Valores de 0 a 99
  51. Wire.beginTransmission(DS1307_ADDRESS);
  52. // Stop no CI para que o mesmo possa receber os dados
  53. Wire.write(zero);
  54.  
  55. // As linhas abaixo escrevem no CI os valores de
  56. // data e hora que foram colocados nas variaveis acima
  57. Wire.write(ConverteParaBCD(segundos));
  58. Wire.write(ConverteParaBCD(minutos));
  59. Wire.write(ConverteParaBCD(horas));
  60. Wire.write(ConverteParaBCD(diadasemana));
  61. Wire.write(ConverteParaBCD(diadomes));
  62. Wire.write(ConverteParaBCD(mes));
  63. Wire.write(ConverteParaBCD(ano));
  64. Wire.write(zero); //Start no CI
  65. Wire.endTransmission();
  66. }
  67.  
  68. byte ConverteParaBCD(byte val)
  69. {
  70. // Converte o número de decimal para BCD
  71. return ( (val/10*16) + (val%10) );
  72. }
  73.  
  74. byte ConverteparaDecimal(byte val)
  75. {
  76. // Converte de BCD para decimal
  77. return ( (val/16*10) + (val%16) );
  78. }
  79.  
  80. void Mostrarelogio()
  81. {
  82. Wire.beginTransmission(DS1307_ADDRESS);
  83. Wire.write(zero);
  84. Wire.endTransmission();
  85. Wire.requestFrom(DS1307_ADDRESS, 7);
  86. int segundos = ConverteparaDecimal(Wire.read());
  87. int minutos = ConverteparaDecimal(Wire.read());
  88. int horas = ConverteparaDecimal(Wire.read() & 0b111111);
  89. //int diadasemana = ConverteparaDecimal(Wire.read());
  90. int diadomes = ConverteparaDecimal(Wire.read());
  91. int mes = ConverteparaDecimal(Wire.read());
  92. int ano = ConverteparaDecimal(Wire.read());
  93. // Imprime mensagem na primeira linha do display
  94. lcd.setCursor(0,0);
  95. lcd.print(" DATA: ");
  96.  
  97. // Mostra a hora atual no display
  98. lcd.setCursor(6, 1);
  99. if (horas < 10)
  100. {
  101. lcd.print("0");
  102. }
  103. lcd.print(horas);
  104. lcd.print(":");
  105. if (minutos < 10)
  106. {
  107. lcd.print("0");
  108. }
  109. lcd.print(minutos);
  110. lcd.print(":");
  111. if (segundos < 10)
  112. {
  113. lcd.print("0");
  114. }
  115. lcd.print(segundos);
  116. // Mostra a HORA atual no display
  117. lcd.setCursor(0,1);
  118. lcd.print(" HORA: ");
  119. lcd.setCursor(0, 2);
  120. lcd.print(" ");
  121. lcd.setCursor(6,0);
  122. if (diadomes < 10)
  123. {
  124. lcd.print("0");
  125. }
  126. lcd.print(diadomes);
  127. lcd.print(".");
  128. if (mes < 10)
  129. {
  130. lcd.print("0");
  131. }
  132. lcd.print(mes);
  133. lcd.print(".");
  134. lcd.print(ano);
  135.  
  136. // Definicao do alarme.
  137.  
  138. if (horas == 03 && minutos == 41 && segundos == 0)//Define a hora de tocar o alarme por 1o segundos
  139. {
  140. digitalWrite (buzzer, HIGH);// Eleva tensao pino 13 para 5V
  141. delay (10000);// Atrasa 50ms
  142. }
  143. {
  144. digitalWrite (buzzer, LOW); //Abaixa tensao pino 13 para 0V
  145. }
  146.  
  147.  
  148. if (horas == 18 && minutos == 00 && segundos == 00)//Define a hora de tocar o alarme por 10 segundos
  149. {
  150. digitalWrite (buzzer, HIGH);// Eleva tensao pino 13 para 5V
  151. delay (10000);// Atrasa 50ms
  152.  
  153. }
  154. {
  155. digitalWrite (buzzer, LOW); //Abaixa tensao pino 13 para 0V
  156. }
  157.  
  158.  
  159.  
  160.  
  161.  
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement