Advertisement
rogerin

Untitled

Sep 24th, 2015
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.94 KB | None | 0 0
  1. #include <DS1307.h>
  2. #include "Thread.h"
  3. #include "ThreadController.h"
  4. ThreadController cpu;
  5.  
  6. #define BUFFER_SIZuE 20
  7.  
  8. int memoria[20]    = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
  9. int dia_semana[8] = {0,0,0,0,0,0,0,0};
  10. int intervalo[8]  = {0,0,0,0,0,0,0,0};
  11.  
  12. int recebe;
  13. int valor;
  14. int resposta;
  15. int PIN_ALARME = 9;
  16. int regra;
  17.  
  18. boolean acionado = false;
  19. boolean primeiraVez = true;
  20.  
  21. int configuracao = 0;
  22. // mega
  23. //DS1307  rtc(20, 21);
  24.  
  25. // acionamento
  26. int ultimoAcionamento = 0;
  27. int intervalorTempo = 0;
  28.  
  29. // uno
  30. DS1307  rtc(A4, A5);
  31.  
  32. Time t;
  33.  
  34. Thread acionamento;
  35. void verificaAcionamento() {
  36.  
  37.   t = rtc.getTime();
  38.   int resposta = (int) rtc.peek(memoria[t.dow - 1]);
  39.  
  40.   if (resposta == 49) {
  41.     Serial.println("Hoje aciona!");
  42.     regra = rtc.peek(memoria[7]);
  43.     /*  
  44.       REGRA
  45.       48    0
  46.       49    1
  47.       50    2
  48.       51    3
  49.       52    4
  50.       53    5
  51.       54    6
  52.       55    7
  53.       56    8
  54.       57    9
  55.    
  56.     */
  57.     if(ultimoAcionamento ==0) {
  58.       primeiraVez = true;
  59.     }
  60.    
  61.     intervalorTempo = (int)(((t.hour*100) + t.min) - ultimoAcionamento);
  62.    
  63.     // 15mim
  64.     if((intervalorTempo == 15 && regra == 48 && intervalorTempo > 2) || (primeiraVez && regra == 48)) {
  65.       Serial.println("PASSOU 15 MIM");
  66.       acionado = true;
  67.       primeiraVez = false;
  68.     }
  69.    
  70.     // 20min
  71.     if((intervalorTempo == 20 && regra == 49 && intervalorTempo > 2) || (primeiraVez && regra == 49)) {
  72.       Serial.println("PASSOU 20 MIM");
  73.       acionado = true;
  74.       primeiraVez = false;
  75.     }
  76.    
  77.  
  78.     // 25min
  79.     if((intervalorTempo == 25 && regra == 50 && intervalorTempo > 2 ) || (primeiraVez && regra == 50)) {
  80.       Serial.println("PASSOU 25 MIM");
  81.       acionado = true;
  82.       primeiraVez = false;
  83.     }
  84.    
  85.     // 30min
  86.     if((intervalorTempo == 30 && regra == 51 && intervalorTempo > 2) || (primeiraVez && regra == 51)) {
  87.       Serial.println("PASSOU 30 MIM");
  88.       acionado = true;
  89.       primeiraVez = false;
  90.     }
  91.    
  92.     // 35min
  93.     if((intervalorTempo == 35 && regra == 52 && intervalorTempo > 2) || (primeiraVez && regra == 52)) {
  94.       Serial.println("PASSOU 35 MIM");
  95.       acionado = true;
  96.       primeiraVez = false;
  97.     }
  98.    
  99.     // 40min
  100.     if((intervalorTempo == 40 && regra == 53 && intervalorTempo > 2 ) || (primeiraVez && regra == 53)) {
  101.       Serial.println("PASSOU 40 MIM");
  102.       acionado = true;
  103.       primeiraVez = false;
  104.     }
  105.    
  106.     // 45min
  107.     if((intervalorTempo == 45 && regra == 54 && intervalorTempo > 2) || (primeiraVez && regra == 54)) {
  108.       Serial.println("PASSOU 45 MIM");
  109.       acionado = true;
  110.       primeiraVez = false;
  111.     }
  112.    
  113.     // 50min
  114.     if((intervalorTempo == 50 && regra == 55 && intervalorTempo > 2) || (primeiraVez && regra == 55)) {
  115.       Serial.println("PASSOU 50 MIM");
  116.       acionado = true;
  117.       primeiraVez = false;
  118.     }
  119.    
  120.     // 55min
  121.     if((intervalorTempo == 55 && regra == 56 && intervalorTempo > 2) || (primeiraVez && regra == 56)) {
  122.       Serial.println("PASSOU 55 MIM");
  123.       acionado = true;
  124.       primeiraVez = false;
  125.     }
  126.    
  127.     // 60min
  128.     if((intervalorTempo == 60 && regra == 57 && intervalorTempo > 2) || (primeiraVez && regra == 57)) {
  129.       Serial.println("PASSOU 60 MIM");
  130.       acionado = true;
  131.       primeiraVez = false;
  132.     }
  133.    
  134.    
  135.    
  136.    
  137.     if(acionado) {
  138.       ultimoAcionamento = (t.hour*100) + t.min;
  139.       acionaAlarme();
  140.       primeiraVez = false;
  141.       acionado = false;
  142.     }
  143.    
  144.    
  145.     Serial.println();
  146.     Serial.print("Passou min: ");
  147.     Serial.print(intervalorTempo, DEC);
  148.     Serial.println();
  149.        
  150.     Serial.println();
  151.     Serial.print("REGRA: ");
  152.     Serial.print(regra, DEC);
  153.     Serial.println();
  154.    
  155.    
  156.      
  157.    
  158.   }
  159.   else {
  160.     Serial.println("Hoje NAO aciona!");
  161.   }
  162.  
  163.  
  164. }
  165.  
  166. Thread thread1;
  167. void mostraDataHora(){
  168.   //thread1.enabled = false;
  169.   t = rtc.getTime();
  170.  
  171.   // Send date over serial connection
  172.   Serial.print("Dia ");
  173.   Serial.print(t.date);
  174.   Serial.print(". Mes ");
  175.   Serial.print(rtc.getMonthStr());
  176.   Serial.print(" ano ");
  177.   Serial.print(t.year);
  178.   //Serial.println(".");
  179.  
  180.   // Send Day-of-Week and time
  181.   Serial.print(" dia ");
  182.   Serial.print(t.dow);
  183.   Serial.print(". ");
  184.   Serial.print(t.hour);
  185.   Serial.print(" : ");
  186.   Serial.print(t.min);
  187.   Serial.write(" : ");
  188.   Serial.print(t.sec);
  189.   Serial.print("");
  190. }
  191.  
  192.  
  193.  
  194.  
  195. Thread Memoria;
  196. void StatusDaMemoria(){
  197.  
  198.  t = rtc.getTime();
  199.  
  200.  
  201.   Serial.print("{ \"dias\":[");
  202.   for (int a = 0; a < 9; a++) {
  203.     int teste = rtc.peek(memoria[a]);
  204.  
  205.     Serial.print("{ \"dia\":\"");
  206.     Serial.print(a,DEC);
  207.     Serial.print("\",\"valor\":\"");  
  208.     Serial.print(teste,DEC);
  209.     if(a != 8) {
  210.       Serial.print("\"},");
  211.     }
  212.     else {
  213.       Serial.print("\"}");
  214.     }
  215.     delay(1);
  216.   }
  217.   //Serial.print("]}");
  218.  
  219.   Serial.print("], \"intervalo\":\"");
  220.   Serial.print(rtc.peek(memoria[7]),DEC);
  221.   Serial.print("\",\"dia\":\"");
  222.   Serial.print(t.date);
  223.   Serial.print("\",\"mes\":\"");
  224.   Serial.print(rtc.getMonthStr());
  225.   Serial.print("\",\"ano\":\"");
  226.   Serial.print(t.year);
  227.   Serial.print("\",\"hora\":\"");
  228.   Serial.print(t.hour);
  229.   Serial.print("\",\"minuto\":\"");
  230.   Serial.print(t.min);
  231.   Serial.print("\",\"segundo\":\"");
  232.   Serial.print(t.sec);
  233.   Serial.print("\"}");
  234.  
  235.   Serial.println();
  236.  
  237. }
  238.  
  239. void setup(){
  240.   Serial.begin(9600);
  241.   pinMode(PIN_ALARME, OUTPUT);
  242.   digitalWrite(PIN_ALARME, LOW);
  243.  
  244.   //thread1.setInterval(5000);
  245.   //thread1.onRun(mostraDataHora);
  246.  
  247.  
  248.  
  249.   acionamento.setInterval(2000);
  250.   acionamento.onRun(verificaAcionamento);
  251.  
  252.   Memoria.setInterval(2000);
  253.   Memoria.onRun(StatusDaMemoria);
  254.  
  255.  
  256.   //cpu.add(&thread1);
  257.   //cpu.add(&threadMemoria);
  258.   cpu.add(&acionamento);
  259.   cpu.add(&Memoria);
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.   rtc.halt(false);
  267.  
  268.    
  269.     t = rtc.getTime();
  270.  
  271.     rtc.setDOW(4);        // Set Day-of-Week to SUNDAY
  272.     rtc.setTime(15, 18, 0);     // Set the time to 12:00:00 (24hr format)
  273.     rtc.setDate(7, 8, 2015);   // Set the date to October 3th, 201
  274.  
  275. }
  276.  
  277. int buf[BUFFER_SIZE];
  278. unsigned int len = 0;
  279.  
  280.  
  281. void loop()
  282. {
  283.   cpu.run();
  284.  
  285.   //Serial.write( msg, 7 );
  286.  
  287.   //Serial.write('rogerio');
  288.  
  289.  
  290.   while (Serial.available()) {
  291.     unsigned int c = Serial.read();
  292.     if (c == 0xA || c == 0xD) { // \n or \r
  293.       sendData();
  294.     }
  295.     else {
  296.       bufferData(c);
  297.     }
  298.   }
  299. }
  300.  
  301.  
  302.  
  303.  
  304. void bufferData(int c) {
  305.   if (len < 21) {
  306.     buf[len++] = (int) c;
  307.     //rtc.poke(memoria[c], buf[c]);
  308.   } // TODO warn, or send data
  309. }
  310.  
  311. void sendData() {
  312.   //Serial.write("Us: ");
  313.  
  314.    for (int i = 0; i < len; i++) {
  315.     Serial.write(buf[i]);
  316.     rtc.poke(memoria[i], buf[i]);
  317.    }
  318.  
  319.   /*for (int i = 0; i < len; i++) {
  320.       rtc.poke(memoria[i], buf[i]);
  321.   }*/
  322.  
  323.   Serial.write(0xA); // TODO test on windows
  324.   len = 0;  
  325. }
  326.  
  327.  
  328. void acionaAlarme() {
  329.     Serial.println("ligou,desliga");
  330.     digitalWrite(PIN_ALARME, HIGH);
  331.     delay(300);
  332.     digitalWrite(PIN_ALARME, LOW);
  333. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement