teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Committer:
brunofgc
Date:
Mon Aug 14 13:59:27 2017 +0000
Revision:
10:263c093f8977
Parent:
9:cf406384efd9
Child:
11:631bea162800
Ultima vers?o instalada na UCSal dia 10/08/2017

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 9:cf406384efd9 193 osThreadDef(threadTimers, osPriorityNormal, 128);
brunofgc 9:cf406384efd9 194 //osThreadDef(threadTimers, osPriorityNormal, DEFAULT_STACK_SIZE/10);
brunofgc 0:1c0a769988ee 195
brunofgc 0:1c0a769988ee 196 osThreadId idThreadProcessaPacote;
brunofgc 0:1c0a769988ee 197 void threadProcessaPacote(void const *args){
brunofgc 0:1c0a769988ee 198 while(true){
brunofgc 6:d4ebbaaba295 199 osSignalWait(0x1,1000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo
brunofgc 4:13ff9c81dc10 200 if(serialModem::processarPacote){
brunofgc 4:13ff9c81dc10 201 serialModem::processarPacote = false;
brunofgc 4:13ff9c81dc10 202 modemCom::processaPacote(NULL);
brunofgc 4:13ff9c81dc10 203 }
brunofgc 6:d4ebbaaba295 204 //diversos::processaPulsosEDs();
brunofgc 4:13ff9c81dc10 205 }
brunofgc 0:1c0a769988ee 206 }
brunofgc 0:1c0a769988ee 207 osThreadDef(threadProcessaPacote, osPriorityNormal, DEFAULT_STACK_SIZE);
brunofgc 0:1c0a769988ee 208
brunofgc 0:1c0a769988ee 209
brunofgc 7:ae9c47f62946 210
brunofgc 2:55b7b466e742 211 //Thread que gerencia as comunicacoes (DROME - SERVER)
brunofgc 0:1c0a769988ee 212 osThreadId idThreadComunicacoes;
brunofgc 0:1c0a769988ee 213 void threadComunicacoes(void const *args){
brunofgc 0:1c0a769988ee 214 //Esta thread faz todo o tratamento de comunicação.
brunofgc 0:1c0a769988ee 215
brunofgc 7:ae9c47f62946 216 //char aux[30];
brunofgc 7:ae9c47f62946 217 while(true){
brunofgc 9:cf406384efd9 218 osSignalWait(0x1,500); //Executo compulsoriamente mesmo que não haja sinal num periodo de meio segundo
brunofgc 7:ae9c47f62946 219 //pc.printf("Thread: COM.\r\n");
brunofgc 0:1c0a769988ee 220 //if((modemCom::status.SRING)&&(!modemCom::status.serverConnected)){
brunofgc 6:d4ebbaaba295 221
brunofgc 0:1c0a769988ee 222 if(modemCom::status.SRINGsockEntrante){
brunofgc 0:1c0a769988ee 223 modemCom::status.SRINGsockEntrante=false;
brunofgc 9:cf406384efd9 224 modemCom::atendeSRING(modemCom::status.connIDServerCommand);
brunofgc 0:1c0a769988ee 225 }
brunofgc 0:1c0a769988ee 226
brunofgc 7:ae9c47f62946 227 if(inicializaModemBool){
brunofgc 7:ae9c47f62946 228 inicializaModemBool = false;
brunofgc 7:ae9c47f62946 229 modemCom::conectaWiFi();
brunofgc 7:ae9c47f62946 230 }
brunofgc 7:ae9c47f62946 231
brunofgc 7:ae9c47f62946 232 if(hardwareReset){
brunofgc 7:ae9c47f62946 233 //Resetando
brunofgc 7:ae9c47f62946 234 diversos::wdt.kick(0.1);
brunofgc 7:ae9c47f62946 235 while(true);
brunofgc 7:ae9c47f62946 236 /*hardwareReset = false;
brunofgc 7:ae9c47f62946 237 free(dispositivos);
brunofgc 7:ae9c47f62946 238 loadDevices();
brunofgc 7:ae9c47f62946 239 sdCard::excluiArquivo(&sdCard::devices);
brunofgc 7:ae9c47f62946 240 eventosRTC::rotina15Minutos = true;
brunofgc 7:ae9c47f62946 241 pc.printf("\r\n\r\nDrome reparametrizado.\r\n\r\n");*/
brunofgc 7:ae9c47f62946 242 }
brunofgc 6:d4ebbaaba295 243
brunofgc 9:cf406384efd9 244 if(eventosRTC::rotina15Minutos){
brunofgc 9:cf406384efd9 245 eventosRTC::rotina15Minutos = false;
brunofgc 0:1c0a769988ee 246 //Faço aqui o que for devido.
brunofgc 0:1c0a769988ee 247 pc.printf("Enviando dados de hora completa ao server.\n");
brunofgc 0:1c0a769988ee 248 modemCom::status.emComunicacao = true;
brunofgc 7:ae9c47f62946 249 //diversos::wdt.kick(300.0);
brunofgc 7:ae9c47f62946 250 //Aproveitando ACT
brunofgc 7:ae9c47f62946 251 if(modemCom::verificaConexao()){
brunofgc 7:ae9c47f62946 252 //Estou conectado
brunofgc 10:263c093f8977 253 modemCom::enviaDados();
brunofgc 7:ae9c47f62946 254 }
brunofgc 7:ae9c47f62946 255 //diversos::wdt.kick(90.0);
brunofgc 9:cf406384efd9 256 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 257 }
brunofgc 0:1c0a769988ee 258
brunofgc 0:1c0a769988ee 259 if(arquivoEnvioPointer!=NULL){
brunofgc 0:1c0a769988ee 260 pc.printf("Enviando o arquivo <%s> ao server.\n",arquivoEnvioPointer->nome);
brunofgc 9:cf406384efd9 261 if(modemCom::postFileCommandMode(modemCom::status.host,"/drome/parser/index.php",arquivoEnvioPointer)){
brunofgc 0:1c0a769988ee 262 pc.printf("Enviado o arquivo <%s>.\n",arquivoEnvioPointer->nome);
brunofgc 0:1c0a769988ee 263 arquivoEnvioPointer = NULL;
brunofgc 0:1c0a769988ee 264 }else{
brunofgc 0:1c0a769988ee 265 pc.printf("Erro enviando o arquivo <%s>.\n",arquivoEnvioPointer->nome);
brunofgc 0:1c0a769988ee 266 }
brunofgc 7:ae9c47f62946 267 }
brunofgc 7:ae9c47f62946 268 modemCom::timeOutModem = 30;
brunofgc 0:1c0a769988ee 269 }
brunofgc 0:1c0a769988ee 270 }
brunofgc 9:cf406384efd9 271 osThreadDef(threadComunicacoes, osPriorityNormal, 3072);
brunofgc 9:cf406384efd9 272 //osThreadDef(threadComunicacoes, osPriorityNormal, (DEFAULT_STACK_SIZE*2));
brunofgc 0:1c0a769988ee 273
brunofgc 0:1c0a769988ee 274 void RTC_POR_SEGUNDO(void){
brunofgc 0:1c0a769988ee 275 time_t seconds;
brunofgc 0:1c0a769988ee 276 seconds = time(NULL);
brunofgc 0:1c0a769988ee 277
brunofgc 0:1c0a769988ee 278 eventosRTC::rotina1segundo=true;
brunofgc 0:1c0a769988ee 279
brunofgc 7:ae9c47f62946 280 if(((seconds+5)%10)==0){
brunofgc 0:1c0a769988ee 281 eventosRTC::rotina10Segundos = true;
brunofgc 0:1c0a769988ee 282 osSignalSet(idThreadComunicacoes, 0x1);
brunofgc 0:1c0a769988ee 283 }
brunofgc 0:1c0a769988ee 284
brunofgc 0:1c0a769988ee 285 if((seconds%60)==0){
brunofgc 0:1c0a769988ee 286 eventosRTC::minutos = true;
brunofgc 0:1c0a769988ee 287 }
brunofgc 0:1c0a769988ee 288
brunofgc 9:cf406384efd9 289 if((seconds%modemCom::status.periodo)==0){
brunofgc 9:cf406384efd9 290 //if((seconds%300)==0){
brunofgc 0:1c0a769988ee 291 eventosRTC::rotina15Minutos = true;
brunofgc 0:1c0a769988ee 292 }
brunofgc 0:1c0a769988ee 293
brunofgc 0:1c0a769988ee 294 if((seconds%3600)==0){ //Atuando a cada 3 minutos
brunofgc 0:1c0a769988ee 295 //Entro aqui a cada hora
brunofgc 0:1c0a769988ee 296 eventosRTC::rotina1hora = true;
brunofgc 0:1c0a769988ee 297 }
brunofgc 0:1c0a769988ee 298 }
brunofgc 0:1c0a769988ee 299
brunofgc 0:1c0a769988ee 300 //Timeout timeOutModem;
brunofgc 0:1c0a769988ee 301 void chamaProcessaPacotePeloTimeOut(){
brunofgc 0:1c0a769988ee 302 modemCom::processaPacote(NULL);
brunofgc 0:1c0a769988ee 303 }
brunofgc 0:1c0a769988ee 304
brunofgc 0:1c0a769988ee 305 void loadDevices(){
brunofgc 0:1c0a769988ee 306 if(sdCard::abreArquivo(&sdCard::devices,"r")){
brunofgc 0:1c0a769988ee 307 criaDevices(sdCard::devices.fp);
brunofgc 0:1c0a769988ee 308 if(devices){
brunofgc 0:1c0a769988ee 309 configuraDevices(sdCard::devices.fp);
brunofgc 2:55b7b466e742 310 printf("Dispositivos configurados.\n");
brunofgc 0:1c0a769988ee 311 }
brunofgc 0:1c0a769988ee 312 sdCard::fechaArquivo(&sdCard::devices);
brunofgc 2:55b7b466e742 313 if(devices){testaTudoDevices();}
brunofgc 0:1c0a769988ee 314 }
brunofgc 0:1c0a769988ee 315 }
brunofgc 0:1c0a769988ee 316
brunofgc 0:1c0a769988ee 317 void inicializaMaquina(){
brunofgc 0:1c0a769988ee 318 pwmPeriod = 100000;
brunofgc 0:1c0a769988ee 319 SD1.period_us(pwmPeriod);
brunofgc 0:1c0a769988ee 320 modemCom::atendendoWebServer = false;
brunofgc 0:1c0a769988ee 321 serialPC::serialPC_init();
brunofgc 7:ae9c47f62946 322 pc.printf("Versao 1/07/2017.\r\n");
brunofgc 0:1c0a769988ee 323 modemCom::timeOutModem = 30;
brunofgc 0:1c0a769988ee 324 serialModem::serial_init();
brunofgc 7:ae9c47f62946 325 numeroDeBytesPorEnvio = 768;
brunofgc 7:ae9c47f62946 326 modBusMaster1::modBusMaster(&modBusMaster1Serial,19200,&max_de);
brunofgc 7:ae9c47f62946 327 inicializaSensoresTemperatura();
brunofgc 0:1c0a769988ee 328
brunofgc 0:1c0a769988ee 329 if(sdCard::init()){
brunofgc 7:ae9c47f62946 330 pc.printf("SD Card inicializado com sucesso.\n");
brunofgc 0:1c0a769988ee 331 //Carregando a lista de dispositivos
brunofgc 0:1c0a769988ee 332 loadDevices();
brunofgc 0:1c0a769988ee 333 }else{
brunofgc 0:1c0a769988ee 334 pc.printf("Nao foi possivel inicializar o SD Card.\n");
brunofgc 7:ae9c47f62946 335 }
brunofgc 0:1c0a769988ee 336
brunofgc 7:ae9c47f62946 337 //Tick Timer por segundo
brunofgc 0:1c0a769988ee 338 RTC::attach(&RTC_POR_SEGUNDO, RTC::Second);
brunofgc 7:ae9c47f62946 339
brunofgc 7:ae9c47f62946 340 /*Chamada de threads*/
brunofgc 7:ae9c47f62946 341
brunofgc 7:ae9c47f62946 342 //Thread timers
brunofgc 0:1c0a769988ee 343 idThreadTimers = osThreadCreate(osThread(threadTimers), NULL);
brunofgc 7:ae9c47f62946 344 //Thread comunicacoes
brunofgc 0:1c0a769988ee 345 idThreadComunicacoes = osThreadCreate(osThread(threadComunicacoes), NULL);
brunofgc 7:ae9c47f62946 346 //Thread processaPacote
brunofgc 0:1c0a769988ee 347 idThreadProcessaPacote = osThreadCreate(osThread(threadProcessaPacote), NULL);
brunofgc 7:ae9c47f62946 348
brunofgc 7:ae9c47f62946 349 /*Chamada de threads*/
brunofgc 7:ae9c47f62946 350
brunofgc 0:1c0a769988ee 351 serialModem::configBaud();
brunofgc 0:1c0a769988ee 352 }
brunofgc 0:1c0a769988ee 353
brunofgc 0:1c0a769988ee 354 void verificaSaidasDigitais(){
brunofgc 0:1c0a769988ee 355 SD_OE_R = 1;
brunofgc 2:55b7b466e742 356 /*if(SD_FAULT){
brunofgc 2:55b7b466e742 357 pc.printf("Fault\r\n");
brunofgc 2:55b7b466e742 358 }else{
brunofgc 2:55b7b466e742 359 pc.printf("No Fault\r\n");
brunofgc 2:55b7b466e742 360 }*/
brunofgc 0:1c0a769988ee 361 }
brunofgc 0:1c0a769988ee 362
brunofgc 7:ae9c47f62946 363
brunofgc 0:1c0a769988ee 364 //Inicio do programa;
brunofgc 0:1c0a769988ee 365 int main() {
brunofgc 6:d4ebbaaba295 366
brunofgc 6:d4ebbaaba295 367 eInt1.rise(&diversos::processaPulsosEDs);
brunofgc 6:d4ebbaaba295 368 eInt2.rise(&diversos::processaPulsosEDs);
brunofgc 6:d4ebbaaba295 369 eInt3.rise(&diversos::processaPulsosEDs);
brunofgc 6:d4ebbaaba295 370
brunofgc 0:1c0a769988ee 371 diversos::wdt.kick(90.0);
brunofgc 0:1c0a769988ee 372
brunofgc 0:1c0a769988ee 373 modem.baud(76800);
brunofgc 0:1c0a769988ee 374 ESP_CH_PD = 1;
brunofgc 0:1c0a769988ee 375 ESP_ESPGPIO_2 = 1;
brunofgc 0:1c0a769988ee 376 ESP_RESET = 1;
brunofgc 0:1c0a769988ee 377
brunofgc 7:ae9c47f62946 378 wait(2);
brunofgc 0:1c0a769988ee 379 inicializaMaquina();
brunofgc 0:1c0a769988ee 380 modemCom::inicializaModem();
brunofgc 0:1c0a769988ee 381 modemCom::conectaWiFi();
brunofgc 7:ae9c47f62946 382 eventosRTC::rotina15Minutos=true;
brunofgc 0:1c0a769988ee 383
brunofgc 0:1c0a769988ee 384 while(true){
brunofgc 7:ae9c47f62946 385 osDelay(10);
brunofgc 7:ae9c47f62946 386 //pc.printf("Thread: MAIN.\r\n");
brunofgc 9:cf406384efd9 387 if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){
brunofgc 7:ae9c47f62946 388
brunofgc 7:ae9c47f62946 389 diversos::wdt.kick();
brunofgc 7:ae9c47f62946 390
brunofgc 2:55b7b466e742 391 if(eventosRTC::minutos){
brunofgc 2:55b7b466e742 392 //Executo abaixo a rotina de 1 minuto
brunofgc 2:55b7b466e742 393 writeReadingsToSD();
brunofgc 7:ae9c47f62946 394 if(!modemCom::status.emComunicacao){modemCom::verificaConexao();}
brunofgc 2:55b7b466e742 395 eventosRTC::minutos = false;
brunofgc 2:55b7b466e742 396 }
brunofgc 1:0e0967c88590 397
brunofgc 2:55b7b466e742 398 if(eventosRTC::rotina1segundo){
brunofgc 2:55b7b466e742 399 eventosRTC::rotina1segundo = false;
brunofgc 2:55b7b466e742 400
brunofgc 2:55b7b466e742 401 refreshSensoresTemperatura();
brunofgc 2:55b7b466e742 402
brunofgc 2:55b7b466e742 403 if(enviaDadosPorAlarme!=255){
brunofgc 2:55b7b466e742 404 enviaDadosPorAlarme--;
brunofgc 2:55b7b466e742 405 if(enviaDadosPorAlarme==0){
brunofgc 2:55b7b466e742 406 eventosRTC::rotina15Minutos=true;
brunofgc 2:55b7b466e742 407 enviaDadosPorAlarme=255;
brunofgc 2:55b7b466e742 408 }
brunofgc 2:55b7b466e742 409 }
brunofgc 2:55b7b466e742 410 leiturasAnalogicas();
brunofgc 2:55b7b466e742 411 leiturasDigitais();
brunofgc 2:55b7b466e742 412 verifyAlarms();
brunofgc 2:55b7b466e742 413 verificaSaidasDigitais();
brunofgc 9:cf406384efd9 414 pc.printf("\nMemoria RAM disponivel = %lu\n",diversos::memAvailable());
brunofgc 2:55b7b466e742 415 time_t seconds = time(NULL);
brunofgc 2:55b7b466e742 416 printf("%s\n", ctime(&seconds));
brunofgc 2:55b7b466e742 417 //pc.printf("\nEntrada 3 = %lu.\nEntrada 2 = %lu.\nEntrada 1 = %lu.\n\n",aiFiltrada[2],aiFiltrada[1],aiFiltrada[0]);
brunofgc 7:ae9c47f62946 418 //pc.printf("Pulsos <%lu><%lu><%lu>.\r\n",pulsosEDs[0],pulsosEDs[1],pulsosEDs[2]);
brunofgc 2:55b7b466e742 419 }
brunofgc 2:55b7b466e742 420
brunofgc 2:55b7b466e742 421 if(eventosRTC::rotina10Segundos){
brunofgc 2:55b7b466e742 422 //Executo abaixo a rotina de 10 segundos
brunofgc 2:55b7b466e742 423 eventosRTC::rotina10Segundos = false;
brunofgc 7:ae9c47f62946 424 verifySchedules();
brunofgc 7:ae9c47f62946 425 }
brunofgc 2:55b7b466e742 426 }
brunofgc 0:1c0a769988ee 427
brunofgc 0:1c0a769988ee 428 if(executaComandoServer){
brunofgc 0:1c0a769988ee 429 executaComandoServer = false;
brunofgc 9:cf406384efd9 430 commands::exec(modemCom::status.connIDServerCommand);
brunofgc 0:1c0a769988ee 431 }
brunofgc 0:1c0a769988ee 432
brunofgc 6:d4ebbaaba295 433
brunofgc 0:1c0a769988ee 434 if(modemCom::atendendoWebServer){
brunofgc 0:1c0a769988ee 435 modemCom::atendendoWebServer = false;
brunofgc 0:1c0a769988ee 436 pc.printf("Atendendo webServer.\r\n");
brunofgc 7:ae9c47f62946 437 modemCom::status.emComunicacao=true;
brunofgc 0:1c0a769988ee 438 modemCom::webServer();
brunofgc 7:ae9c47f62946 439 modemCom::status.emComunicacao=false;
brunofgc 7:ae9c47f62946 440 }
brunofgc 2:55b7b466e742 441
brunofgc 7:ae9c47f62946 442 if(boolExecAct){
brunofgc 7:ae9c47f62946 443 dispositivos[0]->execAct(act);
brunofgc 7:ae9c47f62946 444 boolExecAct = false;
brunofgc 7:ae9c47f62946 445 }
brunofgc 0:1c0a769988ee 446 }
brunofgc 0:1c0a769988ee 447 }