Advertisement
jeanmng

Untitled

Feb 10th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.66 KB | None | 0 0
  1. \\bibliotecas
  2. #include <DS1307.h>
  3. #include <SPI.h>
  4. #include <LiquidCrystal.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <Keypad.h> //Biblioteca adicionada manualmente na pasta arduino-1.0.4\libraries
  8. #include <Wire.h>
  9. #include <avr/wdt.h>
  10. #include <OneWire.h>
  11.  
  12.  
  13. #define BUFSIZ 100
  14.  
  15. //Constantes de Entrada
  16. #define PIN_BLUE 7
  17. #define PIN_RED 8
  18. #define PIN_GREEN 9
  19.  
  20. #define PIN_SAIDA_TERMO 31
  21. #define PIN_SAIDA_BOMBA 33
  22. #define PIN_SAIDA_LUZ 35
  23. #define PIN_SAIDA_AUX1 37
  24.  
  25. #define PIN_SAIDA_BUZZ 41
  26.  
  27. #define PIN_ENTRADA_NIVEL_B 39
  28. #define PIN_ENTRADA_NIVEL_A 41
  29.  
  30. #define PIN_ENTRADA_TEMP 6
  31.  
  32.  
  33. //Constantes para configuração do RTC
  34. #define HORAS 2
  35. #define MINUTOS 1
  36. #define SEGUNDOS 0
  37. #define DIASEMANA 3
  38. #define DIAMES 4
  39. #define MES 5
  40. #define ANO 6
  41.  
  42. OneWire ds(PIN_ENTRADA_TEMP);
  43.  
  44. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  45.  
  46.  
  47. //KeyPad
  48. const byte ROWS = 4;
  49. const byte COLS = 3;
  50. char keys[ROWS][COLS] = {
  51. {'1','2','3'},
  52. {'4','5','6'},
  53. {'7','8','9'},
  54. {'#','0','*'}
  55. };
  56.  
  57. //123 colunas
  58. //4567 linhas
  59.  
  60.  
  61. byte colPins[COLS] = {30, 32, 34};
  62. byte rowPins[ROWS] = {22, 24, 26, 28};
  63.  
  64.  
  65. Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
  66.  
  67.  
  68.  
  69. char clientline[BUFSIZ];
  70. char comando[BUFSIZ];
  71. char comando_teclado[BUFSIZ];
  72. int index;
  73. int tamanhocomando;
  74.  
  75. boolean inicioComando1;
  76. boolean inicioComando2;
  77. boolean inicioFuncaoTeclado;
  78. boolean inicioComandoTeclado;
  79. boolean fimComando;
  80. boolean recebendoComandoWeb;
  81. int indiceentrada;
  82.  
  83. int HoraConfirmada;
  84. int QtdHoraConfirmada;
  85.  
  86. int Segundo;
  87.  
  88. boolean modoAutomatico;
  89.  
  90. void setup() {
  91.  
  92. Wire.begin(); // join i2c bus
  93. Serial.begin(9600); //
  94.  
  95. // ds1307setup();
  96.  
  97. wdt_enable(WDTO_8S);
  98.  
  99.  
  100. HoraConfirmada = 0;
  101. QtdHoraConfirmada = 0;
  102.  
  103. pinMode(PIN_ENTRADA_NIVEL_B, INPUT);
  104. pinMode(PIN_ENTRADA_NIVEL_A, INPUT);
  105. pinMode(PIN_SAIDA_BOMBA, OUTPUT);
  106. pinMode(PIN_SAIDA_TERMO, OUTPUT);
  107. pinMode(PIN_SAIDA_AUX1, OUTPUT);
  108. pinMode(PIN_SAIDA_LUZ, OUTPUT);
  109. pinMode(PIN_SAIDA_BUZZ, OUTPUT);
  110. digitalWrite(PIN_SAIDA_BOMBA, LOW);
  111. digitalWrite(PIN_SAIDA_TERMO, LOW);
  112. digitalWrite(PIN_SAIDA_AUX1, LOW);
  113. digitalWrite(PIN_SAIDA_LUZ, LOW);
  114. digitalWrite(PIN_SAIDA_BUZZ, LOW);
  115.  
  116. inicioComando1 = false;
  117. inicioFuncaoTeclado = false;
  118. inicioComandoTeclado = false;
  119. inicioComando2 = false;
  120. fimComando = false;
  121. recebendoComandoWeb = false;
  122. indiceentrada = 0;
  123.  
  124. modoAutomatico = true;
  125.  
  126. Segundo = 0;
  127.  
  128. delay(500);
  129. lcd.begin(20, 4);
  130. lcd.print("Aquadroid ");
  131. lcd.setCursor(0, 1);
  132. lcd.print("Iniciando Sistema ");
  133. lcd.setCursor(0, 2);
  134. lcd.print(" ");
  135. delay(2000);
  136. lcd.setCursor(0, 1);
  137. lcd.print(" ");
  138. lcd.setCursor(0, 2);
  139. lcd.print(" ");
  140. BuzzerConfirma();
  141. }
  142.  
  143.  
  144. void loop()
  145. {
  146. wdt_reset();
  147. AguardaComandosTeclado();
  148. ModoAutomatico();
  149. if(Segundo == 0 )
  150. {
  151. LeituraTemperatura();
  152. }
  153. PrintData();
  154. }
  155.  
  156.  
  157. void LeituraTemperatura(){
  158.  
  159. byte i;
  160. byte present = 0;
  161. byte data[12];
  162. byte addr[8];
  163. int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
  164. if ( !ds.search(addr)) {
  165. ds.reset_search();
  166. }
  167. ds.reset();
  168. ds.select(addr);
  169.  
  170. ds.write(0x44,1);
  171. delay(800);
  172. present = ds.reset();
  173. ds.select(addr);
  174. ds.write(0xBE);
  175. for ( i = 0; i < 9; i++) {
  176. data[i] = ds.read();
  177. }
  178.  
  179. LowByte = data[0];
  180. HighByte = data[1];
  181. TReading = (HighByte << 8) + LowByte;
  182. SignBit = TReading & 0x8000;
  183. if (SignBit)
  184. {
  185. TReading = (TReading ^ 0xffff) + 1;
  186. }
  187. Tc_100 = (6 * TReading) + TReading / 4;
  188.  
  189. Whole = Tc_100 / 100;
  190. Fract = Tc_100 % 100;
  191.  
  192. if (SignBit)
  193. {
  194. Serial.print("-");
  195. }
  196. Serial.print(Whole);
  197. Serial.print(".");
  198. if (Fract < 10)
  199. {
  200. Serial.print("0");
  201. }
  202. Serial.print(Fract);
  203.  
  204. Serial.print("\n");
  205.  
  206. lcd.setCursor(15, 0);
  207. lcd.print(Whole);
  208. lcd.print(".");
  209. lcd.print(Fract);
  210.  
  211.  
  212. }
  213.  
  214. int ConfirmaTrocaHora(int hora)
  215. {
  216.  
  217. if(HoraConfirmada == hora)
  218. {
  219. QtdHoraConfirmada = 0;
  220. return hora;
  221. }
  222. else
  223. {
  224. QtdHoraConfirmada++;
  225. }
  226.  
  227. if(QtdHoraConfirmada>=4)
  228. {
  229. HoraConfirmada = hora;
  230. }
  231.  
  232. return HoraConfirmada;
  233. }
  234.  
  235. void ModoAutomatico(){
  236.  
  237. lcd.setCursor(13, 0);
  238. if (modoAutomatico == true){
  239.  
  240. digitalWrite(PIN_SAIDA_BOMBA, HIGH);
  241. digitalWrite(PIN_SAIDA_TERMO, HIGH);
  242.  
  243. lcd.print("A");
  244. int rtc[7];
  245. #define ds1307get ;
  246. ds1307get(rtc,true);
  247.  
  248. int hora = ConfirmaTrocaHora(rtc[HORAS]);
  249.  
  250. if (hora >= 7 && hora < 19){
  251. digitalWrite(PIN_SAIDA_LUZ, HIGH);
  252. analogWrite(PIN_RED, 0);
  253. analogWrite(PIN_GREEN, 0);
  254. analogWrite(PIN_BLUE, 0);
  255. }
  256. else if (hora >= 19 && hora < 20){
  257. digitalWrite(PIN_SAIDA_LUZ, LOW);
  258. analogWrite(PIN_RED, 255);
  259. analogWrite(PIN_GREEN, 255);
  260. analogWrite(PIN_BLUE, 255);
  261. }
  262. else if (hora >= 20 && hora < 21){
  263. digitalWrite(PIN_SAIDA_LUZ, LOW);
  264. analogWrite(PIN_RED, 0);
  265. analogWrite(PIN_GREEN, 0);
  266. analogWrite(PIN_BLUE, 255);
  267. }
  268. else if (hora >= 21 && hora < 22){
  269. digitalWrite(PIN_SAIDA_LUZ, LOW);
  270. analogWrite(PIN_RED, 0);
  271. analogWrite(PIN_GREEN, 0);
  272. analogWrite(PIN_BLUE, 50);
  273. }
  274. else if (hora >= 22){
  275. digitalWrite(PIN_SAIDA_LUZ, LOW);
  276. analogWrite(PIN_RED, 0);
  277. analogWrite(PIN_GREEN, 0);
  278. analogWrite(PIN_BLUE, 0);
  279. }
  280. }
  281. else{
  282. lcd.print("M");
  283. }
  284. }
  285.  
  286. void AguardaComandosTeclado()
  287. {
  288. char key = keypad.getKey();
  289. if (key != NO_KEY){
  290. BuzzerClica();
  291. lcd.setCursor(0, 1);
  292. lcd.print("Selecione uma funcao");
  293. lcd.setCursor(0, 2);
  294.  
  295. Serial.print("KEY: ");
  296. Serial.println(key);
  297.  
  298. if( inicioComandoTeclado == true )
  299. {
  300. Serial.println("Executado comando");
  301.  
  302. if(key == '#')
  303. {
  304. BuzzerCancela();
  305. ComandoCancelado();
  306. Serial.println("Comando Cancelado");
  307. }
  308. else if (key == '*')
  309. {
  310. index++;
  311. clientline[index] = 'F';
  312. // clientline[index] = 0;
  313. Serial.println(clientline);
  314. DisparaComando();
  315. ComandoExecutado();
  316. Serial.println("Comando Executado");
  317. Serial.println(clientline);
  318. BuzzerConfirma();
  319. }
  320. else
  321. {
  322. index++;
  323. clientline[index] = key;
  324. Serial.print("Armazenando buffer: ");
  325. Serial.println(key);
  326. Serial.println(clientline);
  327.  
  328. }
  329.  
  330. }
  331. else
  332. {
  333. inicioComandoTeclado = true;
  334. index = 0;
  335. tamanhocomando = 0;
  336. memset( &clientline, 0, BUFSIZ ); //clear inString memory
  337.  
  338. Serial.println("Executado menu");
  339. inicioFuncaoTeclado = true;
  340. switch (key) {
  341. case '1':
  342. clientline[index] = 'I';
  343. index++;
  344. clientline[index] = 'L';
  345. index++;
  346. clientline[index] = 'R';
  347. lcd.print("Luz Vermelha 0..250 ");
  348. break;
  349. case '2':
  350. clientline[index] = 'I';
  351. index++;
  352. clientline[index] = 'L';
  353. index++;
  354. clientline[index] = 'G';
  355. lcd.print("Luz Verde 0..250 ");
  356. break;
  357. case '3':
  358. clientline[index] = 'I';
  359. index++;
  360. clientline[index] = 'L';
  361. index++;
  362. clientline[index] = 'B';
  363. lcd.print("Luz Azul 0..250 ");
  364. break;
  365. case '4':
  366. clientline[index] = 'I';
  367. index++;
  368. clientline[index] = 'S';
  369. index++;
  370. clientline[index] = '4';
  371. lcd.print("Bomba 1:ON = 0:OFF ");
  372. break;
  373. case '5':
  374. clientline[index] = 'I';
  375. index++;
  376. clientline[index] = 'S';
  377. index++;
  378. clientline[index] = '3';
  379. lcd.print("Termo 1:ON = 0:OFF ");
  380. break;
  381. case '6':
  382. clientline[index] = 'I';
  383. index++;
  384. clientline[index] = 'S';
  385. index++;
  386. clientline[index] = '2';
  387. lcd.print("LUZ 1:ON = 0:OFF ");
  388. break;
  389. case '7':
  390. clientline[index] = 'I';
  391. index++;
  392. clientline[index] = 'S';
  393. index++;
  394. clientline[index] = '1';
  395. lcd.print("Saida 1 1:ON = 0:OFF ");
  396. break;
  397. case '8':
  398. clientline[index] = 'I';
  399. index++;
  400. clientline[index] = 'M';
  401. index++;
  402. clientline[index] = 'A';
  403. lcd.print("Auto 1:ON = 0:OFF ");
  404. Serial3.print("C\r");
  405. break;
  406. case '9':
  407. lcd.print("Nao programado ");
  408. break;
  409. case '#':
  410. ComandoCancelado();
  411. break;
  412. case '*':
  413. ComandoCancelado();
  414. break;
  415. }
  416. }
  417. }
  418. }
  419.  
  420. void ComandoCancelado()
  421. {
  422. lcd.setCursor(0, 1);
  423. lcd.print("Comando cancelado ");
  424.  
  425. lcd.setCursor(0, 2);
  426. lcd.print(" ");
  427.  
  428. lcd.setCursor(0, 2);
  429. lcd.print(" ");
  430. inicioFuncaoTeclado = false;
  431. inicioComandoTeclado = false;
  432.  
  433. }
  434.  
  435.  
  436. void ComandoExecutado()
  437. {
  438. lcd.setCursor(0, 1);
  439. lcd.print("Comando executado ");
  440.  
  441. lcd.setCursor(0, 2);
  442. lcd.print(" ");
  443.  
  444. lcd.setCursor(0, 2);
  445. lcd.print(" ");
  446. inicioFuncaoTeclado = false;
  447. inicioComandoTeclado = false;
  448.  
  449. }
  450.  
  451. void DisparaComando()
  452. {
  453. boolean iniciocomando = false;
  454. for (int i = 0; i<index ; i++)
  455. {
  456. if(clientline[i] == 'I')
  457. {
  458. iniciocomando = true;
  459. }
  460. else if(clientline[i] == 'F')
  461. {
  462. break;
  463. }
  464. else if(iniciocomando)
  465. {
  466. comando[tamanhocomando] = clientline[i];
  467. tamanhocomando++;
  468. }
  469. }
  470.  
  471. comando[index] = 0;
  472.  
  473. lcd.setCursor(0, 3);
  474. lcd.print(comando);
  475.  
  476. Serial.print("Tipo Comando: ");
  477. Serial.println(comando[0]);
  478.  
  479. if (comando[0] == 'L')
  480. {
  481. DisparaLuz();
  482. }
  483. else if (comando[0] == 'S')
  484. {
  485. DisparaSaida();
  486. }
  487. else if (comando[0] == 'M')
  488. {
  489. DisparaModo();
  490. }
  491. }
  492. void DisparaModo(){
  493.  
  494. Serial.print("Aqui");
  495. Serial.print(comando);
  496.  
  497. char modo = comando[2];
  498. Serial.print(modo);
  499.  
  500. if (modo == '0'){
  501. modoAutomatico = false;
  502. }
  503. else{
  504. modoAutomatico = true;
  505. }
  506.  
  507. }
  508.  
  509. void DisparaLuz()
  510. {
  511. int nivel = 0;
  512.  
  513. char nivelaux[3];
  514. nivelaux[0] = comando[2];
  515. nivelaux[1] = comando[3];
  516. nivelaux[2] = comando[4];
  517. nivel = atoi(nivelaux);
  518.  
  519. char pin = comando[1];
  520. switch (pin) {
  521. case 'R':
  522. analogWrite(PIN_RED, nivel);
  523. break;
  524. case 'G':
  525. analogWrite(PIN_GREEN, nivel);
  526. break;
  527. case 'B':
  528. analogWrite(PIN_BLUE, nivel);
  529. break;
  530. }
  531. }
  532.  
  533.  
  534. void DisparaSaida()
  535. {
  536. int nivel = 0;
  537. if(comando[2] == '0')
  538. {
  539. nivel = 0;
  540. }
  541. else
  542. {
  543. nivel = 1;
  544. }
  545. char pin = comando[1];
  546.  
  547. switch (pin) {
  548.  
  549. case '4':
  550. digitalWrite(PIN_SAIDA_BOMBA, nivel);
  551. break;
  552. case '3':
  553. digitalWrite(PIN_SAIDA_TERMO, nivel);
  554. break;
  555. case '2':
  556. digitalWrite(PIN_SAIDA_LUZ, nivel);
  557. break;
  558. case '1':
  559. digitalWrite(PIN_SAIDA_AUX1, nivel);
  560. break;
  561. }
  562. }
  563.  
  564. void BuzzerConfirma()
  565. {
  566. buzz(PIN_SAIDA_BUZZ, 3000, 50);
  567. buzz(PIN_SAIDA_BUZZ, 2500, 30);
  568. buzz(PIN_SAIDA_BUZZ, 3500, 250);
  569. }
  570.  
  571. void BuzzerClica()
  572. {
  573. buzz(PIN_SAIDA_BUZZ, 3500, 100);
  574. }
  575.  
  576. void BuzzerCancela()
  577. {
  578. buzz(PIN_SAIDA_BUZZ, 3500, 500);
  579. }
  580.  
  581. void buzz(int targetPin, long frequency, long length) {
  582. long delayValue = 1000000/frequency/2;
  583. long numCycles = frequency * length/ 1000;
  584. for (long i=0; i < numCycles; i++){
  585. digitalWrite(targetPin,HIGH);
  586. delayMicroseconds(delayValue);
  587. digitalWrite(targetPin,LOW);
  588. delayMicroseconds(delayValue);
  589. }
  590. }
  591.  
  592. void PrintData(){
  593.  
  594. int rtc[7];
  595. ds1307get(rtc,true);
  596.  
  597. lcd.setCursor(0, 3);
  598. if (rtc[HORAS] < 10){
  599. lcd.print("0");
  600. }
  601. lcd.print(rtc[HORAS],DEC);
  602. lcd.setCursor(2, 3);
  603. lcd.print(":");
  604. lcd.setCursor(3, 3);
  605. if (rtc[MINUTOS] < 10){
  606. lcd.print("0");
  607. }
  608. lcd.print(rtc[MINUTOS],DEC);
  609. lcd.setCursor(5, 3);
  610. lcd.print(":");
  611. lcd.setCursor(6, 3);
  612. if (rtc[SEGUNDOS] < 10){
  613. lcd.print("0");
  614. }
  615. lcd.print(rtc[SEGUNDOS],DEC);
  616. Segundo = rtc[SEGUNDOS];
  617. lcd.setCursor(8, 3);
  618. lcd.print(" ");
  619. lcd.setCursor(10, 3);
  620. if (rtc[DIAMES] < 10){
  621. lcd.print("0");
  622. }
  623. lcd.print(rtc[DIAMES],DEC);
  624. lcd.setCursor(12, 3);
  625. lcd.print("/");
  626. lcd.setCursor(13, 3);
  627. if (rtc[MES] < 10){
  628. lcd.print("0");
  629. }
  630. lcd.print(rtc[MES],DEC);
  631. lcd.setCursor(15, 3);
  632. lcd.print("/");
  633. lcd.setCursor(16, 3);
  634. lcd.print(rtc[ANO],DEC);
  635.  
  636. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement