Advertisement
Guest User

Untitled

a guest
Mar 6th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.07 KB | None | 0 0
  1. #include <SPI.h>
  2. //
  3. #include <Ethernet.h>
  4. #include <SD.h>
  5.  
  6. //MAC Address da placa, configurável
  7. byte mac[] = {0xAA, 0xCD, 0xCC, 0xAF, 0xAE, 0xCD};
  8.  
  9. //Setando IP da shield
  10. IPAddress ip_placa(192, 168, 0, 180);
  11.  
  12. //IP do servidor AM
  13. IPAddress ip_server(192, 168,0 ,16);
  14.  
  15. //Client que trabalha com o servidor AM
  16. EthernetClient client;
  17.  
  18. //Porta local da central de alarme
  19. EthernetServer server(7776);
  20.  
  21. //Timers dos sensores
  22. long _tempoCentral = 0;
  23. long _tempoSensor1 = 0;
  24. long _tempoSensor2 = 0;
  25. long _tempoSensor3 = 0;
  26. long _tempoSensor4 = 0;
  27. long _tempoSensor5 = 0;
  28. long _tempoSensor6 = 0;
  29. long _tempoSensor7 = 0;
  30. long _tempoSensor8 = 0;
  31. long _tempoSensor9 = 0;
  32. long _tempoSensor10 = 0;
  33.  
  34. //Inputs
  35. #define _sensor1  22
  36. #define _sensor2  23
  37. #define _sensor3  24
  38. #define _sensor4  25
  39. #define _sensor5  26
  40. #define _sensor6  27
  41. #define _sensor7  28
  42. #define _sensor8  29
  43. #define _sensor9  30
  44. #define _sensor10  31
  45.  
  46. //OutPuts
  47. #define _saida1  32
  48. #define _saida2  33
  49. #define _saida3  34
  50. #define _saida4  35
  51. #define _saida5  36
  52. #define _saida6  37
  53. #define _saida7  38
  54. #define _saida8  39
  55. #define _saida9  40
  56. #define _saida10  41
  57. #define _saida11  42
  58. #define _saida12  43
  59. #define _saida13  44
  60. #define _saida14  45
  61. #define _saida15  46
  62. #define _saida16  47
  63. #define _saida17  48
  64. #define _saida18  49
  65. #define _tempoEspera 60000
  66.  
  67. //Verifica se o client ainda está conectado
  68. //boolean alreadyConnected = false;
  69.  
  70. void setup()
  71. {
  72.  
  73.   // put your setup code here, to run once:
  74.   Ethernet.begin(mac,ip_placa);
  75.   server.begin();
  76.  
  77.   if (!SD.begin(4))
  78.   {
  79.     Serial.println("Inicializacao do cartao falhou!");
  80.   }
  81.  
  82.   //Iniciar o monitor
  83.   Serial.begin(9600);
  84.   Serial.println("Iniciado");
  85.  
  86.   //Gravar o log de inicializaçao
  87.   GravaLog("Setup","Placa iniciada");
  88.  
  89.   //delay de 1 segundo
  90.   //delay(1000);
  91.  
  92.   //Inicia os pinos INs e os OUTs
  93.   IniciarPinos();
  94. }
  95.  
  96. void loop()
  97. {
  98.     VerificaInputs();
  99.     VerificaRequestAM();
  100. }
  101.  
  102. //Inicia os pinos INs e OUTs
  103. void IniciarPinos()
  104. {
  105.     pinMode(_sensor1,INPUT);
  106.     pinMode(_sensor2,INPUT);
  107.     pinMode(_sensor3,INPUT);
  108.     pinMode(_sensor4,INPUT);
  109.     pinMode(_sensor5,INPUT);
  110.     pinMode(_sensor6,INPUT);
  111.     pinMode(_sensor7,INPUT);
  112.     pinMode(_sensor8,INPUT);
  113.     pinMode(_sensor9,INPUT);
  114.     pinMode(_sensor10,INPUT);
  115.            
  116.     pinMode(_saida1,OUTPUT);
  117.     pinMode(_saida2,OUTPUT);
  118.     pinMode(_saida3,OUTPUT);
  119.     pinMode(_saida4,OUTPUT);
  120.     pinMode(_saida5,OUTPUT);
  121.     pinMode(_saida6,OUTPUT);
  122.     pinMode(_saida7,OUTPUT);
  123.     pinMode(_saida8,OUTPUT);
  124.     pinMode(_saida9,OUTPUT);
  125.     pinMode(_saida10,OUTPUT);
  126.     pinMode(_saida11,OUTPUT);
  127.     pinMode(_saida12,OUTPUT);
  128.     pinMode(_saida13,OUTPUT);
  129.     pinMode(_saida14,OUTPUT);
  130.     pinMode(_saida15,OUTPUT);
  131.     pinMode(_saida16,OUTPUT);
  132.     pinMode(_saida17,OUTPUT);
  133.     pinMode(_saida18,OUTPUT);  
  134.  
  135.     GravaLog("IniciarPinos","Pinos iniciados");
  136. }
  137.  
  138.  
  139. /*Caso algum desses pinos INs receba tensão, é disparado o alarme*/
  140. void VerificaInputs()
  141. {
  142.     if (digitalRead(_sensor1) == HIGH && (millis() - _tempoSensor1) > _tempoEspera)
  143.     {
  144.         EnviaAlarme(_sensor1);
  145.         _tempoSensor1 = millis();
  146.     }  
  147.  
  148.     if (digitalRead(_sensor2) == HIGH && (millis() - _tempoSensor2) > _tempoEspera)
  149.     {
  150.         EnviaAlarme(_sensor2);
  151.         _tempoSensor2 = millis();
  152.     }  
  153.  
  154.     if (digitalRead(_sensor3) == HIGH && (millis() - _tempoSensor3) > _tempoEspera)
  155.     {
  156.         EnviaAlarme(_sensor3);
  157.         _tempoSensor3 = millis();
  158.     }  
  159.     if (digitalRead(_sensor4) == HIGH && (millis() - _tempoSensor4) > _tempoEspera)
  160.     {
  161.         EnviaAlarme(_sensor4);
  162.         _tempoSensor4 = millis();
  163.     }  
  164.     if (digitalRead(_sensor5) == HIGH && (millis() - _tempoSensor5) > _tempoEspera)
  165.     {
  166.         EnviaAlarme(_sensor5);
  167.         _tempoSensor5 = millis();
  168.     }  
  169.     if (digitalRead(_sensor6) == HIGH && (millis() - _tempoSensor6) > _tempoEspera)
  170.     {
  171.         EnviaAlarme(_sensor6);
  172.         _tempoSensor6 = millis();
  173.     }  
  174.     if (digitalRead(_sensor7) == HIGH && (millis() - _tempoSensor7) > _tempoEspera)
  175.     {
  176.         EnviaAlarme(_sensor7);
  177.         _tempoSensor7 = millis();
  178.     }  
  179.     if (digitalRead(_sensor8) == HIGH && (millis() - _tempoSensor8) > _tempoEspera)
  180.     {
  181.         EnviaAlarme(_sensor8);
  182.         _tempoSensor8 = millis();
  183.     }  
  184.     if (digitalRead(_sensor9) == HIGH && (millis() - _tempoSensor9) > _tempoEspera)
  185.     {
  186.         EnviaAlarme(_sensor9);
  187.         _tempoSensor9 = millis();
  188.     }  
  189.     if (digitalRead(_sensor10) == HIGH && (millis() - _tempoSensor10) > _tempoEspera)
  190.     {
  191.         EnviaAlarme(_sensor10);
  192.         _tempoSensor10 = millis();
  193.     }  
  194. }
  195.  
  196. /*Quando o pino é disparado, é feita uma conexao com o servidor do AM pela porta 12345, e faz a comunicação
  197. Enviando o pino que aconteceu o disparo, isso é importante para definir a zona afetada, e o server tomará as atitudes
  198. No qual foi programado*/
  199.  
  200. void EnviaAlarme(int sResponsavel)
  201. {
  202.      
  203.       //Serial.println("ALARME " + String(sResponsavel) + "\n ----- \n");
  204.      
  205.       GravaLog("EnviaAlarme","ALARME " + String(" - ") + String(sResponsavel));
  206.  
  207.       client.connect(ip_server, 12345);  
  208.       client.println(String(sResponsavel));  
  209.       client.stop();  
  210.  
  211.       if(client.connected())
  212.       {
  213.          GravaLog("EnviaAlarme","--> Cliente conectado");
  214.       }
  215.       else
  216.       {
  217.          GravaLog("EnviaAlarme","<-- Cliente desconectado");
  218.       }
  219. }
  220.  
  221. /*Procura por requsições enviadas pelo server ou por outro client com o OUT e o seu status*/
  222. void VerificaRequestAM()
  223. {              
  224.     EthernetClient RequestAM = server.available();
  225.    
  226.     int _clientR = 0 ;
  227.     char _response[] = "";
  228.    
  229.     if (RequestAM)
  230.     {
  231.        Serial.println("Conectado");
  232.  
  233.        while (RequestAM.available() > 0)
  234.        {
  235.           _response[_clientR] = RequestAM.read();
  236.           _clientR++;
  237.        }
  238.  
  239.        //Set Ligar/Desligar
  240.        if(_response[0] == 's')
  241.        {
  242.           SetValorOutput(_response);
  243.        }
  244.        
  245.        //Get obter o status do pino
  246.        else if(_response[0] == 'g')
  247.        {
  248.           RequestAM.print(GetValorOutput(_response));
  249.        }
  250.    }
  251. }
  252.  
  253. //Obtem o valor do pino corrente
  254. char GetValorOutput(char request[])
  255. {
  256.    String _pinoRemoto = String(request[1]) + String(request[2]);
  257.  
  258.    if(digitalRead(_pinoRemoto.toInt()) == HIGH)
  259.    {
  260.       return '1';
  261.    }
  262.    else
  263.    {
  264.       return '0';
  265.    }
  266.  
  267.    ////
  268.    GravaLog("GetValorOutput",_pinoRemoto);
  269. }
  270.  
  271. //Seta o valor no pino informado
  272. void SetValorOutput(char r[])
  273. {    
  274.    String _pinoRemoto = String(r[1]) + String(r[2]);
  275.  
  276.    if(r[3] == '1')
  277.    {
  278.       digitalWrite(_pinoRemoto.toInt(),HIGH);
  279.    }
  280.    else
  281.    {
  282.       digitalWrite(_pinoRemoto.toInt(),LOW);
  283.    }
  284.  
  285.    ////
  286.    GravaLog("SetValorOutput",_pinoRemoto);
  287. }
  288.  
  289. // grava logs no SD Card
  290. void GravaLog(String pmsg,String pmetodo)
  291. {
  292.   File _arquivo = SD.open("log.txt", FILE_WRITE);
  293.  
  294.   if (_arquivo)
  295.   {
  296.      _arquivo.println(pmetodo + " - " + pmsg);
  297.      _arquivo.close();
  298.   }
  299. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement