Advertisement
Guest User

Untitled

a guest
Nov 6th, 2017
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.31 KB | None | 0 0
  1. #include <Keypad.h>//biblioteca para controle do teclado de membrana.
  2. #include <DallasTemperature.h>//biblioteca para controle da temperatura que o sensor está medindo.
  3. #include <Wire.h>//biblioteca para controle da temperatura que o sensor está medindo.
  4. #include <LiquidCrystal_I2C.h>//biblioteca para utilização do display 16x2 com o modulo I2C.
  5.  
  6. int menortemp=999;//controle de temperatura.
  7. int menortemp2=999;//controle de temperatura.
  8. int tempatual=0;//controle de temperatura.
  9. int tempatual2=0;//controle de temperatura.
  10. int controleTempo=0;//controle de tempo de banho.
  11. int total;
  12. int resistencia=13;//porta digital que contola as ações referentes a resistencia.
  13. int valvulaQuente=10;//porta digital que contola as ações referentes a valvula de agua quente.
  14. int valvulaFria=11;//porta digital que contola as ações referentes a valvula de agua fria.
  15. int buzzer=12;//porta digital que contola as ações referentes ao buzzer.
  16.  
  17. int minB=35;//variavel de controle dos minutos de banho.
  18. int tempoPadrao=0;//tempo padrão do banho.
  19. int banho=10;//variavel de exibição de tempo.
  20. int termino=0,termino2=0;//controle de ações.
  21. int imprimeTemp=1;
  22. int controle=0,controle2=0,controle3=0;
  23. int o=1;
  24. float temp1 = 0;
  25. float temp2 = 0;
  26.  
  27. long previousMillis = 0; // Variável de controle do tempo
  28. long redLedInterval = 5000; // Tempo em ms do intervalo a ser executado
  29.  
  30. #define bMenu 5 // Os pinos analógicos podem ser
  31. #define bChange 6 // usados como digitais, bastando
  32. #define bUp 13 // referenciá-los por A0, A1..
  33. #define bDown A5
  34.  
  35. #define bMenu0 90 // Valor de referência que a
  36. #define bChange0 91 // função CheckButton() passa
  37. #define bUp0 92 // indicando que um botão foi
  38. #define bDown0 93 // solto
  39.  
  40. boolean aMenu, aChange, aUp, aDown; // Grava o ultimo valor lidos nos botões.
  41. int variavel; // variavel a ser alterada pelo menu
  42. char state = 1; // variável que guarda posição atual do menu
  43.  
  44. OneWire oneWire(14);
  45.  
  46. DallasTemperature sensors(&oneWire);//endereço de memoria que auxiliará o sensor a medir as temperaturas.
  47.  
  48. DeviceAddress address1 = {0x28, 0xFF, 0x2C, 0xA0, 0x94, 0x16, 0x5, 0xF7};//dirección del sensor 1
  49. DeviceAddress address2 = {0x28, 0xFF, 0xED, 0x93, 0x94, 0x16, 0x5, 0xD8};//dirección del sensor 2
  50.  
  51. const byte LINHAS = 4;
  52. const byte COLUNAS = 4;
  53.  
  54. //Matriz de caracteres
  55. char matriz_teclas[LINHAS][COLUNAS] =
  56. {
  57. {'1','2','3','A'},
  58. {'4','5','6','B'},
  59. {'7','8','9','C'},
  60. {'*','0','#','D'},
  61. };
  62.  
  63. //Definicao dos pinos das linhas
  64. byte PinosLinhas[LINHAS] = {4, 5, 6, 7};
  65. //Definicao dos pinos das colunas
  66. byte PinosColunas[COLUNAS] = {8, 9, 10,11};
  67.  
  68. unsigned long numeroSelecionado = 35;//variavel de conversão do teclado de caracter para inteiro.
  69. unsigned long tempoSelecionado = 0;//variavel de conversão do teclado de caracter para inteiro.
  70.  
  71. Keypad teclado = Keypad( makeKeymap(matriz_teclas), PinosLinhas,
  72. PinosColunas, LINHAS, COLUNAS);
  73.  
  74. LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);//caminho trilhado para ativação do display.
  75.  
  76.  
  77. void setup() {
  78.  
  79. lcd.begin(16,2);
  80. Serial.begin(9600);
  81. //splash
  82. lcd.setCursor(0,0);
  83. lcd.print("CHUVEIRO AUTOMAT");
  84. lcd.setCursor(0,1);
  85. lcd.print("TCC 2 - WEMERSON");
  86. delay(2000);
  87. lcd.clear();
  88. // Configura o status das portas digitais
  89. pinMode(resistencia,OUTPUT);
  90. pinMode(valvulaQuente,OUTPUT);
  91. pinMode(valvulaFria,OUTPUT);
  92. pinMode(buzzer,OUTPUT);
  93. digitalWrite(resistencia,HIGH);
  94. digitalWrite(valvulaQuente,HIGH);
  95. digitalWrite(valvulaFria,HIGH);
  96. digitalWrite(buzzer,LOW);
  97.  
  98. tempoPadrao=(10*60);//definindo o tempo padrão do banho convertendo 10 minutos para 600 segundos.
  99. }
  100.  
  101. void loop() {
  102.  
  103. sensors.requestTemperatures(); //envía el comando para obtener las temperaturas
  104. temp1= sensors.getTempC(address1);//Se obtiene la temperatura en °C del sensor 1
  105. temp2= sensors.getTempC(address2);//Se obtiene la temperatura en °C del sensor 2
  106.  
  107. switch (state) {
  108. case 1: //DIGITE A TEMPERATURA
  109. switch (CheckButton()) {
  110. case bMenu:
  111. tone(PinoBuzzer, 1500, 50);
  112. digitalWrite(A0, HIGH);
  113. Set_state(2);
  114. break;
  115. case bDown:
  116. lcd.clear();
  117. tone(PinoBuzzer, 1500, 50);
  118. Set_state(6);
  119. break;
  120. default:
  121. Set_state(1);
  122. }
  123. break;
  124.  
  125. case 2: //DIGITE TEMPO DE BANHO
  126. switch (CheckButton()) {
  127. case bMenu:
  128. lcd.clear();
  129. tone(PinoBuzzer, 1500, 50);
  130. digitalWrite(A0, LOW);
  131. startTime = millis(); // guarde o tempo de partida
  132. Set_state(3);
  133. break;
  134. case bChange:
  135. lcd.clear();
  136. tone(PinoBuzzer, 1500, 50);
  137. digitalWrite(A0, LOW);
  138. Set_state(1);
  139. break;
  140. default:
  141. Set_state(2);
  142. }
  143. break;
  144.  
  145. case 3: //MONITOR DE BANHO
  146. switch (CheckButton()) {
  147. case bMenu:
  148. lcd.clear();
  149. tone(PinoBuzzer, 1500, 50);
  150. Set_state(4);
  151. break;
  152. case bChange:
  153. lcd.clear();
  154. digitalWrite(A0, HIGH);
  155. tone(PinoBuzzer, 1500, 50);
  156. Set_state(2);
  157. break;
  158. default:
  159. Set_state(3);
  160. }
  161. break;
  162.  
  163. case 4: //FIM DE BANHO
  164. switch (CheckButton()) {
  165. case bMenu:
  166. lcd.clear();
  167. tone(PinoBuzzer, 1500, 50);
  168. Set_state(1);
  169. break;
  170. case bChange:
  171. lcd.clear();
  172. tone(PinoBuzzer, 1500, 50);
  173. // Set_state(3);
  174. break;
  175. default:
  176. Set_state(4);
  177. }
  178. break;
  179.  
  180. default: ;
  181. }
  182. }
  183.  
  184. char CheckButton() {
  185. if (aMenu != digitalRead(bMenu)) {
  186. aMenu = !aMenu;
  187. if (aMenu) return bMenu0; else return bMenu;
  188. } else if (aChange != digitalRead(bChange)) {
  189. aChange = !aChange;
  190. if (aChange) return bChange0; else return bChange;
  191. } else if (aUp != digitalRead(bUp)) {
  192. aUp = !aUp;
  193. if (aUp) return bUp0; else return bUp;
  194. } else if (aDown != digitalRead(bDown)) {
  195. aDown = !aDown;
  196. delay(2000);
  197. if (aDown) return bDown0; else return bDown;
  198. } else
  199. return 0;
  200. }
  201.  
  202. void Set_state(char index) {
  203. state = index; // Atualiza a variável state para a nova tela
  204. switch (state) { // verifica qual a tela atual e exibe o conteúdo correspondente
  205. case 1: //==================== state 1
  206. lcd.setCursor(0,0);
  207. lcd.print("DIGITE TEMP. OU ");
  208. lcd.setCursor(0,1);
  209. lcd.print("CONFIRME:");
  210. lcd.print(numeroSelecionado);
  211. lcd.write(223);
  212. lcd.print(" > A");
  213. break;
  214. case 2: //==================== state 2
  215. break;
  216.  
  217. case 3: //==================== state 3
  218. break;
  219.  
  220. case 4: //==================== state 4
  221. break;
  222. default: ;
  223. }
  224. }
  225.  
  226. char teclaPressionada = teclado.getKey();//leitura da temperatura que o usuario deseja tomar o banho. 'A'
  227. if (teclaPressionada != 'A'){
  228. if(
  229. teclaPressionada == '0' ||
  230. teclaPressionada == '1' ||
  231. teclaPressionada == '2' || //verificação de qual tecla foi pressionada.
  232. teclaPressionada == '3' ||
  233. teclaPressionada == '4' ||
  234. teclaPressionada == '5' ||
  235. teclaPressionada == '6' ||
  236. teclaPressionada == '7' ||
  237. teclaPressionada == '8' ||
  238. teclaPressionada == '9'
  239. ){
  240. numeroSelecionado = numeroSelecionado * 10 + (teclaPressionada - 0x30);
  241. lcd.setCursor(11,1);
  242. lcd.print(numeroSelecionado);
  243. }
  244. // A funciona como enter: Continua o programa
  245. if(teclaPressionada == 'A'){
  246. if(numeroSelecionado<temp2 || numeroSelecionado>50) {
  247. lcd.clear();
  248. lcd.print("TEMP INVALIDA ");
  249. delay(3000);
  250. }
  251. }
  252. }
  253. else
  254. {
  255. lcd.setCursor(0,0);
  256. lcd.print("DIGITE TEMPO OU ");
  257. lcd.setCursor(0,1);
  258. lcd.print("CONFIRME:");
  259. lcd.print(numeroSelecionado);
  260. lcd.write(223);
  261. lcd.print(" > A");
  262. char teclaPressionada2 = teclado.getKey();//leitura do tempi que o usuario deseja tomar o banho caso não queira o tempo padrão.
  263. if(
  264. teclaPressionada2 == '0' ||
  265. teclaPressionada2 == '1' ||
  266. teclaPressionada2 == '2' ||
  267. teclaPressionada2 == '3' ||
  268. teclaPressionada2 == '4' ||
  269. teclaPressionada2 == '5' ||
  270. teclaPressionada2 == '6' ||
  271. teclaPressionada2 == '7' ||
  272. teclaPressionada2 == '8' ||
  273. teclaPressionada2 == '9'
  274. ){
  275. tempoSelecionado = tempoSelecionado * 10 + (teclaPressionada2 - 0x30);
  276. lcd.print("TEMPO ESCOLHIDO: ");
  277. lcd.print(tempoSelecionado);
  278. delay(1000);
  279. }
  280. if(tempoSelecionado>1200) {//caso o tempo seja maior q 20 minutos o sistema volta para o inicio para q ele digite novamente um tempo valido.
  281. lcd.clear();
  282. lcd.print("TEMPO INVALIDO");
  283. delay(3000);
  284. }
  285. }
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement