Sei sulla pagina 1di 7

#include <dht11.

h>
dht11 DHT11;
//Definio das variaveis globais
char buffer[10]={0};
double valorLidoTemp = 0;
float valorLidoUmid = 0;
double latitude;
double longitude;
int luminosidade = 0;
int chk = 0;
String mensagem;
int posInicial;
int posFinal;
int tentativas = 0;
int conectado = 0;
//Configurao dos pinos dos sensores e dispositivos
int pinoSensorTemp = 0;
int pinoSensorLDR = 1;
int DHT11PIN = 8;
int pinoDispositivo1 = 2;
int pinoDispositivo2 = 3;
#define INICIALIZAR_MODULO 0
#define RECEBER_COMANDO 1
#define LER_UMIDADE 2
#define LER_LONGITUDE 3
#define LER_LATITUDE 4
#define LER_LUMINOSIDADE 5
#define LER_TEMPERATURA 6
#define LER_VELOCIDADE_VENTO 7
#define LER_DIRECAO_VENTO 8
#define LER_HISTORICO 9
//Parametros da comunicao serial
char bytes;
String bufferSerial = String(128);
String bufferSerial1 = String(128);
int estado;
void setup(){
//Inicializao dos pinos de controle dos dispositivos
pinMode(pinoDispositivo1,OUTPUT);
pinMode(pinoDispositivo2,OUTPUT);
pinMode(pinoSensorLDR,OUTPUT); //Define o PIN como sada
pinMode(pinoSensorTemp,INPUT);
digitalWrite(pinoDispositivo1,LOW);
digitalWrite(pinoDispositivo2,LOW);

//Inicializao da porta serial do Arduino
Serial.begin(9600);
Serial.println("Inicializou serial...");
//Inicializao da porta serial de controle do dispositivo externo
Serial1.begin(115200);
Serial2.begin(9600);
delay(100);
//Inicializao das variveis globais
bufferSerial = "";
bufferSerial1 = "";
estado = INICIALIZAR_MODULO;
}
void loop(){
switch(estado){
case INICIALIZAR_MODULO:

//Inicializao da configurao do mdulo GPRS
Serial.println("Inicializando o modulo...");
//Seleo do modo transparente de envio e recebimento de informaes
Serial1.println("AT+CIPMUX=0");
delay(1000);
Serial.println(LerBufferSerial());
//Configurao do APN da conexo GPRS
Serial1.println("AT+CIPMODE=1");
delay(1000);
Serial.println(LerBufferSerial());
//Ativa a conexo GPRS
Serial1.println("AT+CGATT?");
delay(2000);
Serial.println(LerBufferSerial());
Serial1.println("AT+CSTT=\"tim.br\",\"tim\",\"tim\"");
delay(1000);
Serial.println(LerBufferSerial());
Serial1.println("AT+CIICR");
delay(5000);
Serial.println(LerBufferSerial());
Serial1.println("AT+CIFSR");
delay(5000);
Serial.println(LerBufferSerial());

Serial1.println("AT+CIPSTART=\"tcp\",\"200.193.93.7\",\"6000\"");
delay(5000);
Serial.println(LerBufferSerial());
delay(200);
//Verificao do comando de conexo com o servidor
if(true){
Serial.println("Recebendo pacote...");
//Limpa o conteudo do buffer serial
Serial1.flush();
//Limpa o conteudo da string do comando
bufferSerial1 = "";
delay(2000);
//Realiza a leitura dos bytes existentes na porta serial
while(Serial1.available() > 0){
//L os bytes na porta serial e os retira do buffer
bytes = Serial1.read();
//Agrupa os caracteres lidos em uma string formando o comand
o
bufferSerial1 = bufferSerial1 + bytes;
//Delay para sincronismo da comunicao serial
delay(200);
}
estado = RECEBER_COMANDO;

}


break;
case RECEBER_COMANDO:
//Verificao do comando de conexo com o servidor.

//A cada comando valido recebido a contagem para resetar a conexo reinici
ada
tentativas = 0;
Serial.println("Recebendo comando...");
//Limpa o contedo do buffer serial
Serial1.flush();
//Limpa o contedo da string de comando
bufferSerial1 = "";
//Realiza a leitura dos bytes existentes na porta serial.
while(Serial1.available() > 0){
//L os bytes na porta serial e os retira do buffer
bytes = Serial1.read();
//Agrupa os caracteres lidos em uma string formando o comando
bufferSerial1 = bufferSerial1 + bytes;
//Delay para sincronismo da comunicao serial
delay(2);
}
//Limpa o conteudo do buffer serial
Serial1.flush();
//Tratamento e interpretao do pacote de dados para controle dos dispositiv
os

if(bufferSerial1 == "UMIDA"){
Serial.println("Ler a umidade");
//estado = LER_UMIDADE;
Serial1.println(":#UM4.5000");
}
if(bufferSerial1 == "GPSLO"){
Serial.println("Ler a longitude");
Serial1.println(":#LO-051.511719");
//estado = LER_LONGITUDE;
}
if(bufferSerial1 == "GPSLA"){
Serial.println("Ler a latitude");
Serial1.println(":#LA-27.192732");
//estado = LER_LATITUDE;
}
if(bufferSerial1 == "LUMIN"){
Serial.println("Ler a luminosidade");
Serial1.println(":#LU80.300");
//estado = LER_LUMINOSIDADE;
}
if(bufferSerial1 == "TEMPE"){
Serial.println("Ler a temperatura");
Serial1.println(":#TP27.500");

//estado = LER_TEMPERATURA;
}
if(bufferSerial1 == "VELVE"){
Serial.println("Ler a velocidade do vento");
estado = LER_VELOCIDADE_VENTO;
}
if(bufferSerial1 == "DIRVE"){
Serial.println("Ler a direcao do vento");
estado = LER_DIRECAO_VENTO;
}
if(bufferSerial1 == "HISTO"){
Serial.println("Ler o historico");

// estado = LER_HISTORICO;
}

break;

case LER_UMIDADE:
Serial.println("Lendo Umidade...");
chk = DHT11.read(DHT11PIN);

Serial.print("Ler sensor: ");
switch (chk){
case 0: Serial.println("OK"); break;
case -1: Serial.println("Checksum error"); break;
case -2: Serial.println("Time out error"); break;
default: Serial.println("Unknown error"); break;
}

Serial.print("Umidade (%): ");
valorLidoUmid = (float)DHT11.humidity;
Serial.println(valorLidoUmid);
////////EEPROMMMMMM
Serial1.print(":#UM4.5000");
//Enviar do pacote de dados pela porta serial
//Serial1.println(o que gravou na eepromEEPROM2);
estado = RECEBER_COMANDO;
break;

case LER_TEMPERATURA:
Serial.println("Lendo Temperatura...");
valorLidoTemp = (analogRead(pinoSensorTemp) * 0.00488)*100;
Serial.print("Temperatura: ");
Serial.println(valorLidoTemp);
////////EEPROMMMMMM
Serial1.print(":#TP27.500");
//Enviar do pacote de dados pela porta serial
//Serial1.println(o que gravou na eepromEEPROM2);
estado = RECEBER_COMANDO;
break;

case LER_LONGITUDE:
Serial.println("Lendo Longitude...");
//obterDadosGPS();
Serial.print("Longitude: ");
Serial.println(longitude);
////////EEPROMMMMMM
Serial1.print(":#LO-051.511719");
//Enviar do pacote de dados pela porta serial
//Serial1.println(o que gravou na eepromEEPROM2);
estado = RECEBER_COMANDO;
break;

case LER_LATITUDE:
Serial.println("Lendo Latitude...");
obterDadosGPS();
Serial.print("Latitude: ");
Serial.println(latitude);
////////EEPROMMMMMM
Serial1.print(":#LA-27.192732");
//Enviar do pacote de dados pela porta serial
//Serial1.println(o que gravou na eepromEEPROM2);
estado = RECEBER_COMANDO;
break;

case LER_LUMINOSIDADE:
Serial.println("Lendo Luminosidade...");
int cont, i;
luminosidade=0;
for(i=0;i<=10;i++) //Faz 10 vezes a leitura do sensor
{
cont=analogRead(pinoSensorLDR); //L o valor do sensor (LDR ligado ao
PIN) e guarda na varivel LUMINOSIDADE
luminosidade = luminosidade+cont; //Armazenamento na varavel LUMINOSI
DADE o valor lido + o valor anterior
delay(10); //Delay se 10 milissegundos
}
luminosidade=luminosidade/10; //Divide o valor armazenado por 10

Serial.print("Luminosidade: ");
Serial.println(luminosidade);
////////EEPROMMMMMM
Serial1.print(":#LU80.300");
//Enviar do pacote de dados pela porta serial
//Serial1.println(o que gravou na eepromEEPROM2);
estado = RECEBER_COMANDO;
break;
}
}
void serialEvent(){
if(Serial.available()){
//Limpa o contedo da string de comando
bufferSerial = "";
//Realiza a leitura dos bytes existentes na porta serial.
while(Serial.available() > 0){
//L os bytes da porta serial e os retira do buffer
bytes = Serial.read();
//Agrupa os caracteres lidos em uma String formando o comando
bufferSerial = bufferSerial + bytes;
//Delay para sincronismo da comunicao serial
delay(5);
}
}
}
String LerBufferSerial(){
//Limpa o contedo do buffer serial
Serial1.flush();
//Limpa o contedo da String de comando
String string;
if(Serial1.available()){
//Realiza a leitura dos bytes existentes na porta serial
while(Serial1.available() > 0){
//L os bytes na porta serial e os retira do buffer
bytes = Serial1.read();
//Agrupa os caracteres lidos em uma string formando o comando
string = string + bytes;
//Delay para sincronismo da comunicao serial
delay(2);
}
}
return(string);
Serial.println(bufferSerial1);
}
char *subString(String mensagem, int posInicial, int posFinal){
int tamanho = posFinal - posInicial + 1;
char temp[tamanho];
int posicao = 0;
for(int i = posInicial; i < posFinal; i++){
temp[posicao] = mensagem[i];
posicao++;
}
temp[posicao] = '\0';
return temp;
}
void obterDadosGPS(){
char entrada = 0;
String resposta = "";
while((entrada = Serial2.read()) != 10) {
if(entrada > 0)
resposta += entrada;
}
if(!resposta.equals("")){
//Verifica se a linha lida da linha GPGGA
String teste = resposta.substring(3, 6);
if(teste == "GGA"){
//LATITUDE
//Recebe o valor da latitude
char *latitudeStr = subString(resposta, 19, 27);
//Converte a latitudeStr para double
latitude = atof(latitudeStr);
//Recebe o valor do ajuste
char *ajusteLat = subString(resposta, 17, 19);
//Converve o ajusteLat para inteiro
int ajusteLatInt = atoi(ajusteLat);
//Ajusta o valor da latitude
latitude = ((latitude/60) + ajusteLatInt);
//Verifica o hemisfrio
int cardealLat;
if(resposta[28] == 'N')
cardealLat = 1;
else
cardealLat = -1;
//Ajusta a latitude conforme o hemisfrio
latitude *= cardealLat;
//LONGITUDE
//Recebe o valor da longitude
char *longitudeStr = subString(resposta, 33, 41);
//Conteve a longitudeStr para double
longitude = atof(longitudeStr);
//Recebe o valor de ajuste
char *ajusteLon = subString(resposta, 30, 33);
//Converte o ajusteLon para inteiro
int ajusteLonInt = atoi(ajusteLon);
//Ajuste o valor da longitude
longitude = ((longitude/60) + ajusteLonInt);
//Verifica o hemisfrio
int cardealLon;
if(resposta[42] == 'E')
cardealLon = 1;
else
cardealLon = -1;
//Ajusta a longitude conforme hemisfrio
longitude *= cardealLon;
}
}
}
char *subString(){
int tamanho = posFinal - posInicial + 1;
char temp[tamanho];
int posicao = 0;
for(int i = posInicial; i < posFinal; i++){
temp[posicao] = mensagem[i];
posicao++;
}
temp[posicao] = '\0';
return temp;
}

Potrebbero piacerti anche