Advertisement
Guest User

Untitled

a guest
Apr 19th, 2015
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.31 KB | None | 0 0
  1. #include <relogio.h>
  2. #include <avr/pgmspace.h>
  3. #include <LiquidCrystal.h>
  4.  
  5. const int pino_vcc =39;
  6. const int pino_gnd =37;
  7. const int pino_serial_clock=35;
  8. const int pino_data =33;
  9. const int pino_rst =31;
  10.  
  11. int pinosRele[4] = {26,28,30,32};
  12.  
  13. // Ordem de regar
  14. typedef struct OrdemRega{
  15. bool diasDeRega[7];
  16. int hora;
  17. int minuto;
  18. int segundo;
  19. int bombeadas;
  20. int rele;
  21. };
  22. OrdemRega regaPlanta;
  23. void resetaRega(){
  24. regaPlanta.hora=19;
  25. regaPlanta.minuto=30;
  26. regaPlanta.segundo=00;
  27. regaPlanta.diasDeRega[0]=true;
  28. regaPlanta.diasDeRega[1]=true;
  29. regaPlanta.diasDeRega[2]=true;
  30. regaPlanta.diasDeRega[3]=true;
  31. regaPlanta.diasDeRega[4]=true;
  32. regaPlanta.diasDeRega[5]=true;
  33. regaPlanta.diasDeRega[6]=true;
  34. regaPlanta.bombeadas=0;
  35. regaPlanta.rele=1;
  36. };
  37.  
  38. char lcdMensagem[80];
  39. int lcdTempo=0;
  40. void showMessage(char* mensagem){
  41. strncpy(lcdMensagem,mensagem,70);
  42. lcdTempo=1000;
  43. };
  44. LiquidCrystal lcd(8,9,4,5,6,7);
  45.  
  46. const int MODO_NORMAL=0;
  47. const int MODO_VERIFICA=1;
  48. const int MODO_CONFIGURA=2;
  49. const int MODO_AUTOTESTE=3;
  50. int modoAtual;
  51.  
  52. void setup(){
  53. resetaRega();
  54. Serial.begin(9600);
  55. pinMode(pino_vcc, OUTPUT);
  56. pinMode(pino_gnd, OUTPUT);
  57. digitalWrite(pino_vcc,HIGH);
  58. digitalWrite(pino_gnd,LOW);
  59.  
  60. Relogio::setup(pino_serial_clock, pino_data, pino_rst);
  61. //Relogio::setDateAndTime(16,04,15,23,50,00);
  62.  
  63. modoAtual = MODO_NORMAL;
  64.  
  65. lcd.begin(16,2);
  66. lcd.setCursor(0,0);
  67. lcd.print("Inicializado.");
  68.  
  69. lcd.clear();
  70. };
  71.  
  72. const int K_SELECT =1;
  73. const int K_LEFT =2;
  74. const int K_RIGHT =3;
  75. const int K_UP =4;
  76. const int K_DOWN =5;
  77. int leTeclado(){
  78. int comando = analogRead(0);
  79. if ((comando >= 0 )&&(comando <= 10))
  80. return K_RIGHT;
  81. if ((comando >= 250)&&(comando <= 260))
  82. return K_DOWN;
  83. if ((comando >= 400)&&(comando <= 420))
  84. return K_LEFT;
  85. if ((comando >= 90)&&(comando <= 110))
  86. return K_UP;
  87. if ((comando >= 630)&&(comando <= 650))
  88. return K_SELECT;
  89. return 0;
  90. };
  91. PROGMEM const char str0[]= "1)Nada" ;
  92. PROGMEM const char str1[]= "2)Verificar" ;
  93. PROGMEM const char str2[]= "3)Configurar" ;
  94. PROGMEM const char str3[]= "4)Auto-teste";
  95.  
  96. PROGMEM const char* const COMANDOS_MENU[] ={str0,str1,str2,str3};
  97.  
  98. PROGMEM const char str4[] = "1)Horario/Voltar";
  99. PROGMEM const char str5[] = "2)Dias da Semana";
  100. PROGMEM const char str6[] = "3)Acionamentos e Rele";
  101. PROGMEM const char str7[] = "4)Nao tem 4";
  102.  
  103. PROGMEM const char* const PAGINAS_VERIFICA[] = {str4,str5,str6,str7};
  104.  
  105. void autoTeste(){
  106. int i;
  107. for(i=0;i<3;i++){
  108. pinMode(pinosRele[i],OUTPUT);
  109. digitalWrite(pinosRele[i],HIGH);
  110. delay(1000);
  111. digitalWrite(pinosRele[i],LOW);
  112. };
  113. };
  114.  
  115. void loop(){
  116. static int comandoAntigo=0;
  117. static int comandoAgora =0;
  118. static int comandoMenu=0;
  119.  
  120. static int verificaPagina=0;
  121.  
  122. Relogio::pisca();
  123. int hora;
  124. int minuto;
  125. int segundo;
  126. Relogio::getTime(&hora,&minuto,&segundo);
  127.  
  128. char buf[30];
  129.  
  130.  
  131. // Controle pelo tecladinho
  132. comandoAntigo = comandoAgora;
  133. comandoAgora = leTeclado();
  134.  
  135. switch(modoAtual){
  136. /*-------------------------------------
  137. Modo Normal
  138. -------------------------------------*/
  139. case MODO_NORMAL:
  140.  
  141. // Mensagem no display
  142. if(lcdTempo>0){
  143. lcd.clear();
  144. lcd.setCursor(0,0);
  145. lcd.print(lcdMensagem);
  146. delay(1000);
  147. lcdTempo=0;
  148. }else{
  149. lcd.setCursor(0,0);
  150. sprintf(buf,"%02d:%02d:%02d",hora,minuto,segundo);
  151. lcd.print(buf);
  152. // Controle
  153. if((comandoAgora!=comandoAntigo)&&(comandoAgora!=0)){
  154. lcd.clear();
  155. if((comandoMenu<0) || (comandoMenu>3)){
  156. comandoMenu=0;
  157. };
  158. switch(comandoAgora){
  159. case K_LEFT: if(comandoMenu>0) comandoMenu-- ; break; // Volta opção
  160. case K_RIGHT: if(comandoMenu<3) comandoMenu++ ; break; // Avança opção
  161. case K_SELECT: // Aciona opção
  162.  
  163. switch(comandoMenu){
  164. case 0: comandoMenu=-1; break; // NADA
  165. case 1: modoAtual = MODO_VERIFICA; break;
  166. case 2: modoAtual = MODO_CONFIGURA; break;
  167. case 3: modoAtual = MODO_AUTOTESTE; break;
  168. };
  169. break;
  170. };
  171. };
  172. if(comandoMenu!=-1){
  173. strcpy_P(buf, (char*)pgm_read_word(&(COMANDOS_MENU[comandoMenu])));
  174. lcd.setCursor(0,1);
  175. lcd.print(buf);
  176. };
  177. return;
  178. };
  179. break;
  180. case MODO_VERIFICA:
  181.  
  182. // Controle
  183. if((comandoAgora!=comandoAntigo)&&(comandoAgora!=0)){
  184. lcd.clear();
  185. switch(comandoAgora){
  186. case K_LEFT : if(verificaPagina>0) verificaPagina-- ;break;
  187. case K_RIGHT: if(verificaPagina<2) verificaPagina++ ;break;
  188. case K_SELECT:
  189. if(verificaPagina==0){
  190. modoAtual=MODO_NORMAL;
  191. return;
  192. };
  193. break;
  194. };
  195.  
  196. };
  197. lcd.setCursor(0,0);
  198. switch(verificaPagina){
  199. case 0:
  200. sprintf(buf,"%02d:%02d:%02d",regaPlanta.hora,regaPlanta.minuto,regaPlanta.segundo); break;
  201. case 1:
  202. sprintf(buf,"S%dT%dQ%dQ%dS%dS%dD%d",
  203. regaPlanta.diasDeRega[0],
  204. regaPlanta.diasDeRega[1],
  205. regaPlanta.diasDeRega[2],
  206. regaPlanta.diasDeRega[3],
  207. regaPlanta.diasDeRega[4],
  208. regaPlanta.diasDeRega[5],
  209. regaPlanta.diasDeRega[6]);break;
  210.  
  211. case 2:
  212. sprintf(buf,"%d x Rele %d",regaPlanta.bombeadas,regaPlanta.rele);
  213. break;
  214. };
  215. lcd.print(buf);
  216. strcpy_P(buf,(char*)pgm_read_word(&(PAGINAS_VERIFICA[verificaPagina])));
  217. lcd.setCursor(0,1);
  218. lcd.print(buf);
  219.  
  220. break;
  221. case MODO_CONFIGURA:
  222. // Controle
  223. if((comandoAgora!=comandoAntigo)&&(comandoAgora!=0)){
  224.  
  225. };
  226. break;
  227. case MODO_AUTOTESTE:
  228. autoTeste();
  229. modoAtual=MODO_NORMAL;
  230. break;
  231. };
  232.  
  233. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement