teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Committer:
brunofgc
Date:
Tue Jul 11 11:55:56 2017 +0000
Revision:
7:ae9c47f62946
Parent:
6:d4ebbaaba295
Child:
9:cf406384efd9
Vers?o UCSal piloto 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brunofgc 0:1c0a769988ee 1 #include "mbed.h" //API mBed com diversos drivers para os periféricos LPC1768
brunofgc 0:1c0a769988ee 2 #include "stdio.h"
brunofgc 0:1c0a769988ee 3 #include "cmsis_os.h" //Nucleo do Real Time Operational System
brunofgc 0:1c0a769988ee 4 #include "main.h" //Inicializações de maquina e demais ajustes de hardware
brunofgc 0:1c0a769988ee 5 #include "funcoesSDCard.h" //Funções para manipulação do SDCard que incluem rotinas de inicialização, setar pastas e arquivos e demais usos
brunofgc 0:1c0a769988ee 6 #include "RTC.h" //API de uso das interrupções do Real Time Clock
brunofgc 0:1c0a769988ee 7 #include "serialPC.h" //Funções de comunicação entre RAD e PC via usb
brunofgc 0:1c0a769988ee 8 #include "modbusMaster1.h"
brunofgc 0:1c0a769988ee 9
brunofgc 7:ae9c47f62946 10 //Definições de Hardware acessíveis em qualquer modulo
brunofgc 7:ae9c47f62946 11 /*LEDs de informação visual*/
brunofgc 7:ae9c47f62946 12 DigitalOut ledLigado(P1_0);
brunofgc 7:ae9c47f62946 13 DigitalOut ledEmComunicacao(P1_1);
brunofgc 7:ae9c47f62946 14 DigitalOut ledConectadoInternet(P1_4);
brunofgc 7:ae9c47f62946 15 DigitalOut ledUsoGeral(P1_8);
brunofgc 7:ae9c47f62946 16 /*LEDs de informação visual*/
brunofgc 7:ae9c47f62946 17
brunofgc 7:ae9c47f62946 18 /*Pinos de controle do modulo WiFi*/
brunofgc 0:1c0a769988ee 19 DigitalOut ESP_CH_PD(P0_6);
brunofgc 0:1c0a769988ee 20 DigitalOut ESP_RESET(P0_0);
brunofgc 0:1c0a769988ee 21 DigitalOut ESP_ESPGPIO_2(P0_1);
brunofgc 7:ae9c47f62946 22 /*Pinos de controle do modulo WiFi*/
brunofgc 0:1c0a769988ee 23
brunofgc 7:ae9c47f62946 24 /*Interrupções externas para contagem de pulsos rapidos*/
brunofgc 6:d4ebbaaba295 25 InterruptIn eInt1(P2_11);
brunofgc 6:d4ebbaaba295 26 InterruptIn eInt2(P2_12);
brunofgc 6:d4ebbaaba295 27 InterruptIn eInt3(P2_13);
brunofgc 7:ae9c47f62946 28 /*Interrupções externas para contagem de pulsos rapidos*/
brunofgc 6:d4ebbaaba295 29
brunofgc 7:ae9c47f62946 30 //Função para reset do ARM
brunofgc 0:1c0a769988ee 31 extern "C" void mbed_reset();
brunofgc 0:1c0a769988ee 32
brunofgc 0:1c0a769988ee 33 //Devices
brunofgc 0:1c0a769988ee 34 device ** dispositivos = NULL;
brunofgc 0:1c0a769988ee 35 uint8_t devices=0;
brunofgc 0:1c0a769988ee 36 uint8_t alarmes=0;
brunofgc 2:55b7b466e742 37 uint8_t leituras=0;
brunofgc 0:1c0a769988ee 38 uint8_t qtdSchedules=0;
brunofgc 5:7801f913384e 39 uint8_t qtdScheduleExceptions=0;
brunofgc 0:1c0a769988ee 40 //Devices
brunofgc 0:1c0a769988ee 41
brunofgc 0:1c0a769988ee 42 //Variáveis para envio de arquivo em qualquer lugar do código
brunofgc 0:1c0a769988ee 43 extern arquivoSD *arquivoEnvioPointer = NULL;
brunofgc 0:1c0a769988ee 44
brunofgc 7:ae9c47f62946 45 uint32_t act;
brunofgc 7:ae9c47f62946 46 bool boolExecAct;
brunofgc 7:ae9c47f62946 47 bool inicializaModemBool;
brunofgc 7:ae9c47f62946 48
brunofgc 0:1c0a769988ee 49 bool hardwareReset = false;
brunofgc 0:1c0a769988ee 50
brunofgc 0:1c0a769988ee 51
brunofgc 0:1c0a769988ee 52 MediaMovel FiltroAI4(5);
brunofgc 0:1c0a769988ee 53 MediaMovel FiltroAI3(5);
brunofgc 0:1c0a769988ee 54 MediaMovel FiltroAI2(5);
brunofgc 0:1c0a769988ee 55 MediaMovel FiltroAI1(5);
brunofgc 0:1c0a769988ee 56
brunofgc 0:1c0a769988ee 57 uint16_t aiFiltrada[4];
brunofgc 0:1c0a769988ee 58 bool entradasDigitais[9];
brunofgc 0:1c0a769988ee 59
brunofgc 0:1c0a769988ee 60 CircularBuffer bufModem(maxBufInModem);
brunofgc 0:1c0a769988ee 61 CircularBuffer bufPC(128);
brunofgc 2:55b7b466e742 62 CircularBuffer sdCardBuf(1024);
brunofgc 0:1c0a769988ee 63
brunofgc 0:1c0a769988ee 64 uint8_t enviaDadosPorAlarme = 255;
brunofgc 2:55b7b466e742 65 //bool reportaMudancaAoServer;
brunofgc 0:1c0a769988ee 66 bool executaComandoServer;
brunofgc 7:ae9c47f62946 67
brunofgc 0:1c0a769988ee 68 //typeConfig flashConfig;
brunofgc 0:1c0a769988ee 69
brunofgc 7:ae9c47f62946 70 //Instancia das portas Seriais do ARM
brunofgc 0:1c0a769988ee 71 Serial pc(USBTX, USBRX); //Instancia de recurso Serial uart pc
brunofgc 7:ae9c47f62946 72 Serial modem(P0_10,P0_11); //Instancia de recurso Serial uart Modem
brunofgc 0:1c0a769988ee 73 DigitalOut max_de(P2_7); //Pino de habilitação max485 para porta Energy Metering ModBus
brunofgc 0:1c0a769988ee 74 Serial modBusMaster1Serial(P2_0,P2_1); //Recurso serial para porta Energy Metering ModBus
brunofgc 0:1c0a769988ee 75
brunofgc 0:1c0a769988ee 76 /*
brunofgc 0:1c0a769988ee 77 //Interrupções externas e botões
brunofgc 0:1c0a769988ee 78 InterruptIn int_wh(P2_11);
brunofgc 0:1c0a769988ee 79 InterruptIn int_varh(P2_12);
brunofgc 0:1c0a769988ee 80
brunofgc 0:1c0a769988ee 81 void whCount(void){
brunofgc 0:1c0a769988ee 82 whled=1;
brunofgc 0:1c0a769988ee 83 wait(0.2);
brunofgc 0:1c0a769988ee 84 whled=0;
brunofgc 0:1c0a769988ee 85 }
brunofgc 0:1c0a769988ee 86
brunofgc 0:1c0a769988ee 87 void varhCount(void){
brunofgc 0:1c0a769988ee 88 varhled=1;
brunofgc 0:1c0a769988ee 89 wait(0.2);
brunofgc 0:1c0a769988ee 90 varhled=0;
brunofgc 0:1c0a769988ee 91 }*/
brunofgc 0:1c0a769988ee 92 //Definições de Hardware acessíveis em qualquer modulo
brunofgc 0:1c0a769988ee 93
brunofgc 0:1c0a769988ee 94 /*
brunofgc 0:1c0a769988ee 95 void loadStandardConfig(){
brunofgc 0:1c0a769988ee 96 strcpy(flashConfig.apnList[0],"claro.com.br");
brunofgc 0:1c0a769988ee 97 strcpy(flashConfig.apnList[1],"zap.vivo.com.br");
brunofgc 0:1c0a769988ee 98 strcpy(flashConfig.apnList[2],"tim.br");
brunofgc 0:1c0a769988ee 99 strcpy(flashConfig.apnList[3],"generica.oi.com.br");
brunofgc 0:1c0a769988ee 100
brunofgc 0:1c0a769988ee 101 strcpy(flashConfig.login[0],"claro");
brunofgc 0:1c0a769988ee 102 strcpy(flashConfig.login[1],"vivo");
brunofgc 0:1c0a769988ee 103 strcpy(flashConfig.login[2],"tim");
brunofgc 0:1c0a769988ee 104 strcpy(flashConfig.login[3],"oi");
brunofgc 0:1c0a769988ee 105
brunofgc 0:1c0a769988ee 106 strcpy(flashConfig.senha[0],"claro");
brunofgc 0:1c0a769988ee 107 strcpy(flashConfig.senha[1],"vivo");
brunofgc 0:1c0a769988ee 108 strcpy(flashConfig.senha[2],"tim");
brunofgc 0:1c0a769988ee 109 strcpy(flashConfig.senha[3],"oi");
brunofgc 0:1c0a769988ee 110
brunofgc 2:55b7b466e742 111 strcpy(flashConfig.serverAddress,serverAddress);
brunofgc 0:1c0a769988ee 112
brunofgc 0:1c0a769988ee 113 strcpy(flashConfig.serverPort,"80");
brunofgc 0:1c0a769988ee 114
brunofgc 0:1c0a769988ee 115 flashConfig.periodoDeEnvioDeDadosMinutos=15; //Padrão 15 minutos
brunofgc 0:1c0a769988ee 116 flashConfig.ultimoEstadoLigadoDesligado=0; //Padrão de fábrica desligado
brunofgc 0:1c0a769988ee 117 }
brunofgc 0:1c0a769988ee 118 */
brunofgc 0:1c0a769988ee 119
brunofgc 0:1c0a769988ee 120 void leiturasDigitais(){
brunofgc 0:1c0a769988ee 121 entradasDigitais[0] = ED1;
brunofgc 0:1c0a769988ee 122 entradasDigitais[1] = ED2;
brunofgc 0:1c0a769988ee 123 entradasDigitais[2] = ED3;
brunofgc 0:1c0a769988ee 124 entradasDigitais[3] = ED4;
brunofgc 0:1c0a769988ee 125 entradasDigitais[4] = ED5;
brunofgc 0:1c0a769988ee 126 entradasDigitais[5] = ED6;
brunofgc 0:1c0a769988ee 127 entradasDigitais[6] = ED7;
brunofgc 0:1c0a769988ee 128 entradasDigitais[7] = ED8;
brunofgc 0:1c0a769988ee 129 entradasDigitais[8] = ED9;
brunofgc 0:1c0a769988ee 130 }
brunofgc 0:1c0a769988ee 131
brunofgc 0:1c0a769988ee 132
brunofgc 0:1c0a769988ee 133
brunofgc 0:1c0a769988ee 134 HighSpeedAnalogIn analogInObject(P1_31,P1_30,P0_26,P0_25);
brunofgc 0:1c0a769988ee 135
brunofgc 0:1c0a769988ee 136 void leiturasAnalogicas(){
brunofgc 0:1c0a769988ee 137 float ai1_filtrado=0.0;
brunofgc 0:1c0a769988ee 138 float ai2_filtrado=0.0;
brunofgc 0:1c0a769988ee 139 float ai3_filtrado=0.0;
brunofgc 0:1c0a769988ee 140 float ai4_filtrado=0.0;
brunofgc 0:1c0a769988ee 141
brunofgc 0:1c0a769988ee 142 uint8_t i;
brunofgc 0:1c0a769988ee 143
brunofgc 0:1c0a769988ee 144 //LPC_SC->PCONP |= (1 << 12); //Set the PDADC bit residing in the 12th bit of the PCONP register
brunofgc 0:1c0a769988ee 145
brunofgc 0:1c0a769988ee 146 for(i=0;i<5;i++){
brunofgc 0:1c0a769988ee 147 ai1_filtrado += analogInObject.read_u16(P0_25);
brunofgc 0:1c0a769988ee 148 ai2_filtrado += analogInObject.read_u16(P0_26);
brunofgc 0:1c0a769988ee 149 ai3_filtrado += analogInObject.read_u16(P1_30);
brunofgc 0:1c0a769988ee 150 ai4_filtrado += analogInObject.read_u16(P1_31);
brunofgc 0:1c0a769988ee 151 }
brunofgc 0:1c0a769988ee 152
brunofgc 0:1c0a769988ee 153 ai1_filtrado = ai1_filtrado/5;
brunofgc 0:1c0a769988ee 154 ai2_filtrado = ai2_filtrado/5;
brunofgc 0:1c0a769988ee 155 ai3_filtrado = ai3_filtrado/5;
brunofgc 0:1c0a769988ee 156 ai4_filtrado = ai4_filtrado/5;
brunofgc 0:1c0a769988ee 157
brunofgc 0:1c0a769988ee 158
brunofgc 0:1c0a769988ee 159 aiFiltrada[3] = ai4_filtrado;
brunofgc 0:1c0a769988ee 160 aiFiltrada[2] = ai3_filtrado;
brunofgc 0:1c0a769988ee 161 aiFiltrada[1] = ai2_filtrado;
brunofgc 0:1c0a769988ee 162 aiFiltrada[0] = ai1_filtrado;
brunofgc 0:1c0a769988ee 163
brunofgc 0:1c0a769988ee 164
brunofgc 0:1c0a769988ee 165 /*aiFiltrada[3] = FiltroAI4.get((uint16_t)floor(ai4_double));
brunofgc 0:1c0a769988ee 166 aiFiltrada[2] = FiltroAI3.get((uint16_t)floor(ai3_double));
brunofgc 0:1c0a769988ee 167 aiFiltrada[1] = FiltroAI2.get((uint16_t)floor(ai2_double));
brunofgc 0:1c0a769988ee 168 aiFiltrada[0] = FiltroAI1.get((uint16_t)floor(ai1_double));*/
brunofgc 0:1c0a769988ee 169
brunofgc 0:1c0a769988ee 170 }
brunofgc 0:1c0a769988ee 171
brunofgc 4:13ff9c81dc10 172
brunofgc 4:13ff9c81dc10 173
brunofgc 0:1c0a769988ee 174 //Thread timers é utilizada para dar start nos timers de dentro das ISRs de comunicação serial porque não é permitido inicializar osTimers de dentro de ISRs.
brunofgc 0:1c0a769988ee 175 osThreadId idThreadTimers;
brunofgc 0:1c0a769988ee 176 void threadTimers(void const *args){
brunofgc 0:1c0a769988ee 177 while(true){
brunofgc 0:1c0a769988ee 178 osSignalWait(0x1,1000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo
brunofgc 0:1c0a769988ee 179 if(serialPC::startTimer_pacote){
brunofgc 0:1c0a769988ee 180 serialPC::startTimer_pacote = false;
brunofgc 2:55b7b466e742 181 osTimerStart(serialPC::timer_pacote,2000);
brunofgc 0:1c0a769988ee 182 }
brunofgc 0:1c0a769988ee 183 if(serialModem::startTimer_pacote){
brunofgc 0:1c0a769988ee 184 serialModem::startTimer_pacote = false;
brunofgc 0:1c0a769988ee 185 osTimerStart(serialModem::timer_pacote,modemCom::timeOutModem);
brunofgc 0:1c0a769988ee 186 }
brunofgc 0:1c0a769988ee 187 if(modBusMaster1::startThreadModBusMaster){
brunofgc 0:1c0a769988ee 188 modBusMaster1::startThreadModBusMaster = false;
brunofgc 0:1c0a769988ee 189 osTimerStart(modBusMaster1::timer_pacote,4);
brunofgc 4:13ff9c81dc10 190 }
brunofgc 0:1c0a769988ee 191 }
brunofgc 0:1c0a769988ee 192 }
brunofgc 0:1c0a769988ee 193 osThreadDef(threadTimers, osPriorityNormal, DEFAULT_STACK_SIZE/10);
brunofgc 0:1c0a769988ee 194
brunofgc 0:1c0a769988ee 195 osThreadId idThreadProcessaPacote;
brunofgc 0:1c0a769988ee 196 void threadProcessaPacote(void const *args){
brunofgc 0:1c0a769988ee 197 while(true){
brunofgc 6:d4ebbaaba295 198 osSignalWait(0x1,1000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo
brunofgc 4:13ff9c81dc10 199 if(serialModem::processarPacote){
brunofgc 4:13ff9c81dc10 200 serialModem::processarPacote = false;
brunofgc 4:13ff9c81dc10 201 modemCom::processaPacote(NULL);
brunofgc 4:13ff9c81dc10 202 }
brunofgc 6:d4ebbaaba295 203 //diversos::processaPulsosEDs();
brunofgc 4:13ff9c81dc10 204 }
brunofgc 0:1c0a769988ee 205 }
brunofgc 0:1c0a769988ee 206 osThreadDef(threadProcessaPacote, osPriorityNormal, DEFAULT_STACK_SIZE);
brunofgc 0:1c0a769988ee 207
brunofgc 0:1c0a769988ee 208
brunofgc 7:ae9c47f62946 209
brunofgc 2:55b7b466e742 210 //Thread que gerencia as comunicacoes (DROME - SERVER)
brunofgc 0:1c0a769988ee 211 osThreadId idThreadComunicacoes;
brunofgc 0:1c0a769988ee 212 void threadComunicacoes(void const *args){
brunofgc 0:1c0a769988ee 213 //Esta thread faz todo o tratamento de comunicação.
brunofgc 0:1c0a769988ee 214
brunofgc 7:ae9c47f62946 215 //char aux[30];
brunofgc 7:ae9c47f62946 216 while(true){
brunofgc 7:ae9c47f62946 217 osSignalWait(0x1,5000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo
brunofgc 7:ae9c47f62946 218 //pc.printf("Thread: COM.\r\n");
brunofgc 0:1c0a769988ee 219 //if((modemCom::status.SRING)&&(!modemCom::status.serverConnected)){
brunofgc 6:d4ebbaaba295 220
brunofgc 0:1c0a769988ee 221 if(modemCom::status.SRINGsockEntrante){
brunofgc 0:1c0a769988ee 222 modemCom::status.SRINGsockEntrante=false;
brunofgc 0:1c0a769988ee 223 modemCom::atendeSRING(connID);
brunofgc 0:1c0a769988ee 224 }
brunofgc 0:1c0a769988ee 225
brunofgc 7:ae9c47f62946 226 if(inicializaModemBool){
brunofgc 7:ae9c47f62946 227 inicializaModemBool = false;
brunofgc 7:ae9c47f62946 228 modemCom::conectaWiFi();
brunofgc 7:ae9c47f62946 229 }
brunofgc 7:ae9c47f62946 230
brunofgc 7:ae9c47f62946 231 if(hardwareReset){
brunofgc 7:ae9c47f62946 232 //Resetando
brunofgc 7:ae9c47f62946 233 diversos::wdt.kick(0.1);
brunofgc 7:ae9c47f62946 234 while(true);
brunofgc 7:ae9c47f62946 235 /*hardwareReset = false;
brunofgc 7:ae9c47f62946 236 free(dispositivos);
brunofgc 7:ae9c47f62946 237 loadDevices();
brunofgc 7:ae9c47f62946 238 sdCard::excluiArquivo(&sdCard::devices);
brunofgc 7:ae9c47f62946 239 eventosRTC::rotina15Minutos = true;
brunofgc 7:ae9c47f62946 240 pc.printf("\r\n\r\nDrome reparametrizado.\r\n\r\n");*/
brunofgc 7:ae9c47f62946 241 }
brunofgc 6:d4ebbaaba295 242
brunofgc 1:0e0967c88590 243 if(eventosRTC::rotina15Minutos){
brunofgc 0:1c0a769988ee 244 //Faço aqui o que for devido.
brunofgc 0:1c0a769988ee 245 pc.printf("Enviando dados de hora completa ao server.\n");
brunofgc 0:1c0a769988ee 246 modemCom::status.emComunicacao = true;
brunofgc 7:ae9c47f62946 247 //diversos::wdt.kick(300.0);
brunofgc 7:ae9c47f62946 248 //Aproveitando ACT
brunofgc 7:ae9c47f62946 249 if(modemCom::verificaConexao()){
brunofgc 7:ae9c47f62946 250 //Estou conectado
brunofgc 7:ae9c47f62946 251 modemCom::enviaDados(dadosArmazenados);
brunofgc 7:ae9c47f62946 252 }
brunofgc 7:ae9c47f62946 253 //diversos::wdt.kick(90.0);
brunofgc 0:1c0a769988ee 254 modemCom::status.emComunicacao = false;
brunofgc 1:0e0967c88590 255 eventosRTC::rotina15Minutos = false;
brunofgc 0:1c0a769988ee 256 }
brunofgc 0:1c0a769988ee 257
brunofgc 0:1c0a769988ee 258 if(sdCard::deleteSentFiles){
brunofgc 0:1c0a769988ee 259 sdCard::deleteSentFiles = false;
brunofgc 0:1c0a769988ee 260 sdCard::finalizaEnvio();
brunofgc 0:1c0a769988ee 261 }
brunofgc 0:1c0a769988ee 262
brunofgc 0:1c0a769988ee 263 if(arquivoEnvioPointer!=NULL){
brunofgc 0:1c0a769988ee 264 pc.printf("Enviando o arquivo <%s> ao server.\n",arquivoEnvioPointer->nome);
brunofgc 2:55b7b466e742 265 if(modemCom::postFileCommandMode(serverAddress,"/drome/parser/index.php",arquivoEnvioPointer)){
brunofgc 0:1c0a769988ee 266 pc.printf("Enviado o arquivo <%s>.\n",arquivoEnvioPointer->nome);
brunofgc 0:1c0a769988ee 267 arquivoEnvioPointer = NULL;
brunofgc 0:1c0a769988ee 268 }else{
brunofgc 0:1c0a769988ee 269 pc.printf("Erro enviando o arquivo <%s>.\n",arquivoEnvioPointer->nome);
brunofgc 0:1c0a769988ee 270 }
brunofgc 7:ae9c47f62946 271 }
brunofgc 7:ae9c47f62946 272 modemCom::timeOutModem = 30;
brunofgc 0:1c0a769988ee 273 }
brunofgc 0:1c0a769988ee 274 }
brunofgc 0:1c0a769988ee 275 osThreadDef(threadComunicacoes, osPriorityNormal, (DEFAULT_STACK_SIZE * 2));
brunofgc 0:1c0a769988ee 276
brunofgc 0:1c0a769988ee 277 void RTC_POR_SEGUNDO(void){
brunofgc 0:1c0a769988ee 278 time_t seconds;
brunofgc 0:1c0a769988ee 279 seconds = time(NULL);
brunofgc 0:1c0a769988ee 280
brunofgc 0:1c0a769988ee 281 eventosRTC::rotina1segundo=true;
brunofgc 0:1c0a769988ee 282
brunofgc 7:ae9c47f62946 283 if(((seconds+5)%10)==0){
brunofgc 0:1c0a769988ee 284 eventosRTC::rotina10Segundos = true;
brunofgc 0:1c0a769988ee 285 osSignalSet(idThreadComunicacoes, 0x1);
brunofgc 0:1c0a769988ee 286 }
brunofgc 0:1c0a769988ee 287
brunofgc 0:1c0a769988ee 288 if((seconds%60)==0){
brunofgc 0:1c0a769988ee 289 eventosRTC::minutos = true;
brunofgc 0:1c0a769988ee 290 }
brunofgc 0:1c0a769988ee 291
brunofgc 0:1c0a769988ee 292 //if((seconds%900)==0){
brunofgc 7:ae9c47f62946 293 if((seconds%300)==0){
brunofgc 0:1c0a769988ee 294 eventosRTC::rotina15Minutos = true;
brunofgc 0:1c0a769988ee 295 }
brunofgc 0:1c0a769988ee 296
brunofgc 0:1c0a769988ee 297 if((seconds%3600)==0){ //Atuando a cada 3 minutos
brunofgc 0:1c0a769988ee 298 //Entro aqui a cada hora
brunofgc 0:1c0a769988ee 299 eventosRTC::rotina1hora = true;
brunofgc 0:1c0a769988ee 300 }
brunofgc 0:1c0a769988ee 301 }
brunofgc 0:1c0a769988ee 302
brunofgc 0:1c0a769988ee 303 //Timeout timeOutModem;
brunofgc 0:1c0a769988ee 304 void chamaProcessaPacotePeloTimeOut(){
brunofgc 0:1c0a769988ee 305 modemCom::processaPacote(NULL);
brunofgc 0:1c0a769988ee 306 }
brunofgc 0:1c0a769988ee 307
brunofgc 0:1c0a769988ee 308 void loadDevices(){
brunofgc 0:1c0a769988ee 309 if(sdCard::abreArquivo(&sdCard::devices,"r")){
brunofgc 0:1c0a769988ee 310 criaDevices(sdCard::devices.fp);
brunofgc 0:1c0a769988ee 311 if(devices){
brunofgc 0:1c0a769988ee 312 configuraDevices(sdCard::devices.fp);
brunofgc 2:55b7b466e742 313 printf("Dispositivos configurados.\n");
brunofgc 0:1c0a769988ee 314 }
brunofgc 0:1c0a769988ee 315 sdCard::fechaArquivo(&sdCard::devices);
brunofgc 2:55b7b466e742 316 if(devices){testaTudoDevices();}
brunofgc 0:1c0a769988ee 317 }
brunofgc 0:1c0a769988ee 318 }
brunofgc 0:1c0a769988ee 319
brunofgc 0:1c0a769988ee 320 void inicializaMaquina(){
brunofgc 0:1c0a769988ee 321 pwmPeriod = 100000;
brunofgc 0:1c0a769988ee 322 SD1.period_us(pwmPeriod);
brunofgc 0:1c0a769988ee 323 modemCom::atendendoWebServer = false;
brunofgc 0:1c0a769988ee 324 serialPC::serialPC_init();
brunofgc 7:ae9c47f62946 325 pc.printf("Versao 1/07/2017.\r\n");
brunofgc 0:1c0a769988ee 326 modemCom::timeOutModem = 30;
brunofgc 0:1c0a769988ee 327 serialModem::serial_init();
brunofgc 7:ae9c47f62946 328 numeroDeBytesPorEnvio = 768;
brunofgc 7:ae9c47f62946 329 modBusMaster1::modBusMaster(&modBusMaster1Serial,19200,&max_de);
brunofgc 7:ae9c47f62946 330 inicializaSensoresTemperatura();
brunofgc 0:1c0a769988ee 331
brunofgc 0:1c0a769988ee 332 if(sdCard::init()){
brunofgc 7:ae9c47f62946 333 pc.printf("SD Card inicializado com sucesso.\n");
brunofgc 0:1c0a769988ee 334 //Carregando a lista de dispositivos
brunofgc 0:1c0a769988ee 335 loadDevices();
brunofgc 0:1c0a769988ee 336 }else{
brunofgc 0:1c0a769988ee 337 pc.printf("Nao foi possivel inicializar o SD Card.\n");
brunofgc 7:ae9c47f62946 338 }
brunofgc 0:1c0a769988ee 339
brunofgc 7:ae9c47f62946 340 //Tick Timer por segundo
brunofgc 0:1c0a769988ee 341 RTC::attach(&RTC_POR_SEGUNDO, RTC::Second);
brunofgc 7:ae9c47f62946 342
brunofgc 7:ae9c47f62946 343 /*Chamada de threads*/
brunofgc 7:ae9c47f62946 344
brunofgc 7:ae9c47f62946 345 //Thread timers
brunofgc 0:1c0a769988ee 346 idThreadTimers = osThreadCreate(osThread(threadTimers), NULL);
brunofgc 7:ae9c47f62946 347 //Thread comunicacoes
brunofgc 0:1c0a769988ee 348 idThreadComunicacoes = osThreadCreate(osThread(threadComunicacoes), NULL);
brunofgc 7:ae9c47f62946 349 //Thread processaPacote
brunofgc 0:1c0a769988ee 350 idThreadProcessaPacote = osThreadCreate(osThread(threadProcessaPacote), NULL);
brunofgc 7:ae9c47f62946 351
brunofgc 7:ae9c47f62946 352 /*Chamada de threads*/
brunofgc 7:ae9c47f62946 353
brunofgc 0:1c0a769988ee 354 serialModem::configBaud();
brunofgc 0:1c0a769988ee 355 }
brunofgc 0:1c0a769988ee 356
brunofgc 0:1c0a769988ee 357 void verificaSaidasDigitais(){
brunofgc 0:1c0a769988ee 358 SD_OE_R = 1;
brunofgc 2:55b7b466e742 359 /*if(SD_FAULT){
brunofgc 2:55b7b466e742 360 pc.printf("Fault\r\n");
brunofgc 2:55b7b466e742 361 }else{
brunofgc 2:55b7b466e742 362 pc.printf("No Fault\r\n");
brunofgc 2:55b7b466e742 363 }*/
brunofgc 0:1c0a769988ee 364 }
brunofgc 0:1c0a769988ee 365
brunofgc 7:ae9c47f62946 366
brunofgc 0:1c0a769988ee 367 //Inicio do programa;
brunofgc 0:1c0a769988ee 368 int main() {
brunofgc 6:d4ebbaaba295 369
brunofgc 6:d4ebbaaba295 370 eInt1.rise(&diversos::processaPulsosEDs);
brunofgc 6:d4ebbaaba295 371 eInt2.rise(&diversos::processaPulsosEDs);
brunofgc 6:d4ebbaaba295 372 eInt3.rise(&diversos::processaPulsosEDs);
brunofgc 6:d4ebbaaba295 373
brunofgc 0:1c0a769988ee 374 diversos::wdt.kick(90.0);
brunofgc 0:1c0a769988ee 375
brunofgc 0:1c0a769988ee 376 modem.baud(76800);
brunofgc 0:1c0a769988ee 377 ESP_CH_PD = 1;
brunofgc 0:1c0a769988ee 378 ESP_ESPGPIO_2 = 1;
brunofgc 0:1c0a769988ee 379 ESP_RESET = 1;
brunofgc 0:1c0a769988ee 380
brunofgc 7:ae9c47f62946 381 wait(2);
brunofgc 0:1c0a769988ee 382 inicializaMaquina();
brunofgc 0:1c0a769988ee 383 modemCom::inicializaModem();
brunofgc 0:1c0a769988ee 384 modemCom::conectaWiFi();
brunofgc 7:ae9c47f62946 385 eventosRTC::rotina15Minutos=true;
brunofgc 0:1c0a769988ee 386
brunofgc 0:1c0a769988ee 387 while(true){
brunofgc 7:ae9c47f62946 388 osDelay(10);
brunofgc 7:ae9c47f62946 389 //pc.printf("Thread: MAIN.\r\n");
brunofgc 2:55b7b466e742 390 if(!modemCom::status.recebendoArquivoDoServer){
brunofgc 7:ae9c47f62946 391
brunofgc 7:ae9c47f62946 392 diversos::wdt.kick();
brunofgc 7:ae9c47f62946 393
brunofgc 2:55b7b466e742 394 if(eventosRTC::minutos){
brunofgc 2:55b7b466e742 395 //Executo abaixo a rotina de 1 minuto
brunofgc 2:55b7b466e742 396 writeReadingsToSD();
brunofgc 7:ae9c47f62946 397 if(!modemCom::status.emComunicacao){modemCom::verificaConexao();}
brunofgc 2:55b7b466e742 398 eventosRTC::minutos = false;
brunofgc 2:55b7b466e742 399 }
brunofgc 1:0e0967c88590 400
brunofgc 2:55b7b466e742 401 if(eventosRTC::rotina1segundo){
brunofgc 2:55b7b466e742 402 eventosRTC::rotina1segundo = false;
brunofgc 2:55b7b466e742 403
brunofgc 2:55b7b466e742 404 refreshSensoresTemperatura();
brunofgc 2:55b7b466e742 405
brunofgc 2:55b7b466e742 406 if(enviaDadosPorAlarme!=255){
brunofgc 2:55b7b466e742 407 enviaDadosPorAlarme--;
brunofgc 2:55b7b466e742 408 if(enviaDadosPorAlarme==0){
brunofgc 2:55b7b466e742 409 eventosRTC::rotina15Minutos=true;
brunofgc 2:55b7b466e742 410 enviaDadosPorAlarme=255;
brunofgc 2:55b7b466e742 411 }
brunofgc 2:55b7b466e742 412 }
brunofgc 2:55b7b466e742 413 leiturasAnalogicas();
brunofgc 2:55b7b466e742 414 leiturasDigitais();
brunofgc 2:55b7b466e742 415 verifyAlarms();
brunofgc 2:55b7b466e742 416 verificaSaidasDigitais();
brunofgc 7:ae9c47f62946 417 //pc.printf("\nMemoria RAM disponivel = %lu\n",diversos::memAvailable());
brunofgc 2:55b7b466e742 418 time_t seconds = time(NULL);
brunofgc 2:55b7b466e742 419 printf("%s\n", ctime(&seconds));
brunofgc 2:55b7b466e742 420 //pc.printf("\nEntrada 3 = %lu.\nEntrada 2 = %lu.\nEntrada 1 = %lu.\n\n",aiFiltrada[2],aiFiltrada[1],aiFiltrada[0]);
brunofgc 7:ae9c47f62946 421 //pc.printf("Pulsos <%lu><%lu><%lu>.\r\n",pulsosEDs[0],pulsosEDs[1],pulsosEDs[2]);
brunofgc 2:55b7b466e742 422 }
brunofgc 2:55b7b466e742 423
brunofgc 2:55b7b466e742 424 if(eventosRTC::rotina10Segundos){
brunofgc 2:55b7b466e742 425 //Executo abaixo a rotina de 10 segundos
brunofgc 2:55b7b466e742 426 eventosRTC::rotina10Segundos = false;
brunofgc 7:ae9c47f62946 427 verifySchedules();
brunofgc 7:ae9c47f62946 428 }
brunofgc 2:55b7b466e742 429 }
brunofgc 0:1c0a769988ee 430
brunofgc 0:1c0a769988ee 431 if(executaComandoServer){
brunofgc 0:1c0a769988ee 432 executaComandoServer = false;
brunofgc 0:1c0a769988ee 433 commands::exec(connID);
brunofgc 0:1c0a769988ee 434 }
brunofgc 0:1c0a769988ee 435
brunofgc 6:d4ebbaaba295 436
brunofgc 0:1c0a769988ee 437 if(modemCom::atendendoWebServer){
brunofgc 0:1c0a769988ee 438 modemCom::atendendoWebServer = false;
brunofgc 0:1c0a769988ee 439 pc.printf("Atendendo webServer.\r\n");
brunofgc 7:ae9c47f62946 440 modemCom::status.emComunicacao=true;
brunofgc 0:1c0a769988ee 441 modemCom::webServer();
brunofgc 7:ae9c47f62946 442 modemCom::status.emComunicacao=false;
brunofgc 7:ae9c47f62946 443 }
brunofgc 2:55b7b466e742 444
brunofgc 7:ae9c47f62946 445 if(boolExecAct){
brunofgc 7:ae9c47f62946 446 dispositivos[0]->execAct(act);
brunofgc 7:ae9c47f62946 447 boolExecAct = false;
brunofgc 7:ae9c47f62946 448 }
brunofgc 0:1c0a769988ee 449 }
brunofgc 0:1c0a769988ee 450 }