Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- //
- #include <Ethernet.h>
- #include <SD.h>
- //MAC Address da placa, configurável
- byte mac[] = {0xAA, 0xCD, 0xCC, 0xAF, 0xAE, 0xCD};
- //Setando IP da shield
- IPAddress ip_placa(192, 168, 0, 180);
- //IP do servidor AM
- IPAddress ip_server(192, 168,0 ,16);
- //Client que trabalha com o servidor AM
- EthernetClient client;
- //Porta local da central de alarme
- EthernetServer server(7776);
- //Timers dos sensores
- long _tempoCentral = 0;
- long _tempoSensor1 = 0;
- long _tempoSensor2 = 0;
- long _tempoSensor3 = 0;
- long _tempoSensor4 = 0;
- long _tempoSensor5 = 0;
- long _tempoSensor6 = 0;
- long _tempoSensor7 = 0;
- long _tempoSensor8 = 0;
- long _tempoSensor9 = 0;
- long _tempoSensor10 = 0;
- //Inputs
- #define _sensor1 22
- #define _sensor2 23
- #define _sensor3 24
- #define _sensor4 25
- #define _sensor5 26
- #define _sensor6 27
- #define _sensor7 28
- #define _sensor8 29
- #define _sensor9 30
- #define _sensor10 31
- //OutPuts
- #define _saida1 32
- #define _saida2 33
- #define _saida3 34
- #define _saida4 35
- #define _saida5 36
- #define _saida6 37
- #define _saida7 38
- #define _saida8 39
- #define _saida9 40
- #define _saida10 41
- #define _saida11 42
- #define _saida12 43
- #define _saida13 44
- #define _saida14 45
- #define _saida15 46
- #define _saida16 47
- #define _saida17 48
- #define _saida18 49
- #define _tempoEspera 60000
- //Verifica se o client ainda está conectado
- //boolean alreadyConnected = false;
- void setup()
- {
- // put your setup code here, to run once:
- Ethernet.begin(mac,ip_placa);
- server.begin();
- if (!SD.begin(4))
- {
- Serial.println("Inicializacao do cartao falhou!");
- }
- //Iniciar o monitor
- Serial.begin(9600);
- Serial.println("Iniciado");
- //Gravar o log de inicializaçao
- GravaLog("Setup","Placa iniciada");
- //delay de 1 segundo
- //delay(1000);
- //Inicia os pinos INs e os OUTs
- IniciarPinos();
- }
- void loop()
- {
- VerificaInputs();
- VerificaRequestAM();
- }
- //Inicia os pinos INs e OUTs
- void IniciarPinos()
- {
- pinMode(_sensor1,INPUT);
- pinMode(_sensor2,INPUT);
- pinMode(_sensor3,INPUT);
- pinMode(_sensor4,INPUT);
- pinMode(_sensor5,INPUT);
- pinMode(_sensor6,INPUT);
- pinMode(_sensor7,INPUT);
- pinMode(_sensor8,INPUT);
- pinMode(_sensor9,INPUT);
- pinMode(_sensor10,INPUT);
- pinMode(_saida1,OUTPUT);
- pinMode(_saida2,OUTPUT);
- pinMode(_saida3,OUTPUT);
- pinMode(_saida4,OUTPUT);
- pinMode(_saida5,OUTPUT);
- pinMode(_saida6,OUTPUT);
- pinMode(_saida7,OUTPUT);
- pinMode(_saida8,OUTPUT);
- pinMode(_saida9,OUTPUT);
- pinMode(_saida10,OUTPUT);
- pinMode(_saida11,OUTPUT);
- pinMode(_saida12,OUTPUT);
- pinMode(_saida13,OUTPUT);
- pinMode(_saida14,OUTPUT);
- pinMode(_saida15,OUTPUT);
- pinMode(_saida16,OUTPUT);
- pinMode(_saida17,OUTPUT);
- pinMode(_saida18,OUTPUT);
- GravaLog("IniciarPinos","Pinos iniciados");
- }
- /*Caso algum desses pinos INs receba tensão, é disparado o alarme*/
- void VerificaInputs()
- {
- if (digitalRead(_sensor1) == HIGH && (millis() - _tempoSensor1) > _tempoEspera)
- {
- EnviaAlarme(_sensor1);
- _tempoSensor1 = millis();
- }
- if (digitalRead(_sensor2) == HIGH && (millis() - _tempoSensor2) > _tempoEspera)
- {
- EnviaAlarme(_sensor2);
- _tempoSensor2 = millis();
- }
- if (digitalRead(_sensor3) == HIGH && (millis() - _tempoSensor3) > _tempoEspera)
- {
- EnviaAlarme(_sensor3);
- _tempoSensor3 = millis();
- }
- if (digitalRead(_sensor4) == HIGH && (millis() - _tempoSensor4) > _tempoEspera)
- {
- EnviaAlarme(_sensor4);
- _tempoSensor4 = millis();
- }
- if (digitalRead(_sensor5) == HIGH && (millis() - _tempoSensor5) > _tempoEspera)
- {
- EnviaAlarme(_sensor5);
- _tempoSensor5 = millis();
- }
- if (digitalRead(_sensor6) == HIGH && (millis() - _tempoSensor6) > _tempoEspera)
- {
- EnviaAlarme(_sensor6);
- _tempoSensor6 = millis();
- }
- if (digitalRead(_sensor7) == HIGH && (millis() - _tempoSensor7) > _tempoEspera)
- {
- EnviaAlarme(_sensor7);
- _tempoSensor7 = millis();
- }
- if (digitalRead(_sensor8) == HIGH && (millis() - _tempoSensor8) > _tempoEspera)
- {
- EnviaAlarme(_sensor8);
- _tempoSensor8 = millis();
- }
- if (digitalRead(_sensor9) == HIGH && (millis() - _tempoSensor9) > _tempoEspera)
- {
- EnviaAlarme(_sensor9);
- _tempoSensor9 = millis();
- }
- if (digitalRead(_sensor10) == HIGH && (millis() - _tempoSensor10) > _tempoEspera)
- {
- EnviaAlarme(_sensor10);
- _tempoSensor10 = millis();
- }
- }
- /*Quando o pino é disparado, é feita uma conexao com o servidor do AM pela porta 12345, e faz a comunicação
- Enviando o pino que aconteceu o disparo, isso é importante para definir a zona afetada, e o server tomará as atitudes
- No qual foi programado*/
- void EnviaAlarme(int sResponsavel)
- {
- //Serial.println("ALARME " + String(sResponsavel) + "\n ----- \n");
- GravaLog("EnviaAlarme","ALARME " + String(" - ") + String(sResponsavel));
- client.connect(ip_server, 12345);
- client.println(String(sResponsavel));
- client.stop();
- if(client.connected())
- {
- GravaLog("EnviaAlarme","--> Cliente conectado");
- }
- else
- {
- GravaLog("EnviaAlarme","<-- Cliente desconectado");
- }
- }
- /*Procura por requsições enviadas pelo server ou por outro client com o OUT e o seu status*/
- void VerificaRequestAM()
- {
- EthernetClient RequestAM = server.available();
- int _clientR = 0 ;
- char _response[] = "";
- if (RequestAM)
- {
- Serial.println("Conectado");
- while (RequestAM.available() > 0)
- {
- _response[_clientR] = RequestAM.read();
- _clientR++;
- }
- //Set Ligar/Desligar
- if(_response[0] == 's')
- {
- SetValorOutput(_response);
- }
- //Get obter o status do pino
- else if(_response[0] == 'g')
- {
- RequestAM.print(GetValorOutput(_response));
- }
- }
- }
- //Obtem o valor do pino corrente
- char GetValorOutput(char request[])
- {
- String _pinoRemoto = String(request[1]) + String(request[2]);
- if(digitalRead(_pinoRemoto.toInt()) == HIGH)
- {
- return '1';
- }
- else
- {
- return '0';
- }
- ////
- GravaLog("GetValorOutput",_pinoRemoto);
- }
- //Seta o valor no pino informado
- void SetValorOutput(char r[])
- {
- String _pinoRemoto = String(r[1]) + String(r[2]);
- if(r[3] == '1')
- {
- digitalWrite(_pinoRemoto.toInt(),HIGH);
- }
- else
- {
- digitalWrite(_pinoRemoto.toInt(),LOW);
- }
- ////
- GravaLog("SetValorOutput",_pinoRemoto);
- }
- // grava logs no SD Card
- void GravaLog(String pmsg,String pmetodo)
- {
- File _arquivo = SD.open("log.txt", FILE_WRITE);
- if (_arquivo)
- {
- _arquivo.println(pmetodo + " - " + pmsg);
- _arquivo.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement