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