teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Committer:
brunofgc
Date:
Thu Nov 09 12:53:41 2017 +0000
Revision:
14:c0162ab2a951
Parent:
13:b9183b4bc049
Child:
15:0f78bf9c13ec
vers?o com bootloader

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