teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Committer:
brunofgc
Date:
Fri Jun 02 13:31:56 2017 +0000
Revision:
4:13ff9c81dc10
Parent:
2:55b7b466e742
Child:
5:7801f913384e
Vers?o Est?vel instalada no AP201 antes de incluir as scheduleExceptions.

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