Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DS1820 HighSpeedAnalogIn devices mbed
Diff: main.cpp
- Revision:
- 30:8a06a85d8807
- Parent:
- 29:823a9da3696b
- Child:
- 32:7cf1fb8a8bf3
diff -r 823a9da3696b -r 8a06a85d8807 main.cpp
--- a/main.cpp Thu May 24 00:42:23 2018 +0000
+++ b/main.cpp Fri May 25 23:46:10 2018 +0000
@@ -39,13 +39,12 @@
//Função para reset do ARM
extern "C" void mbed_reset();
-//Devices
- device ** dispositivos = NULL;
+//Devices
uint8_t devices=0;
- uint8_t alarmes=0;
- uint8_t leituras=0;
- uint8_t qtdSchedules=0;
- uint8_t qtdScheduleExceptions=0;
+ uint16_t alarmes=0;
+ uint16_t leituras=0;
+ uint16_t qtdSchedules=0;
+ uint16_t qtdScheduleExceptions=0;
//Devices
//Variáveis para envio de arquivo em qualquer lugar do código
@@ -55,7 +54,10 @@
bool boolExecAct;
bool inicializaModemBool;
char debug = false;
+char xeretaModem = false;
bool hardwareReset = false;
+char firmVersion[20];
+char resetCause[5];
MediaMovel FiltroAI4(5);
@@ -66,7 +68,7 @@
uint16_t aiFiltrada[4];
bool entradasDigitais[9];
-CircularBuffer bufModem(maxBufInModem) __attribute__ ((section("AHBSRAM0")));
+CircularBuffer bufModem(maxBufInModem);// __attribute__ ((section("AHBSRAM0")));
CircularBuffer bufPC(128);
CircularBuffer sdCardBuf(1024);
@@ -163,9 +165,9 @@
void verificaSaidasDigitais(){
SD_OE_R = 1;
/*if(SD_FAULT){
- pc.printf("Fault\r\n");
+ if(debug)pc.printf("Fault\r\n");
}else{
- pc.printf("No Fault\r\n");
+ if(debug)pc.printf("No Fault\r\n");
}*/
}
@@ -173,15 +175,17 @@
osThreadId idThreadTimers;
void threadTimers(void const *args){
while(true){
- osSignalWait(0x1,1000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo
- if(serialPC::startTimer_pacote){
- serialPC::startTimer_pacote = false;
- osTimerStart(serialPC::timer_pacote,2000);
- }
- if(serialModem::startTimer_pacote){
- serialModem::startTimer_pacote = false;
- osTimerStart(serialModem::timer_pacote,modemCom::timeOutModem);
- }
+ osSignalWait(0x1,1000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo
+ //if(enviaDadosPorAlarme==255){//debug
+ if(serialPC::startTimer_pacote){
+ serialPC::startTimer_pacote = false;
+ osTimerStart(serialPC::timer_pacote,100);
+ }
+ if(serialModem::startTimer_pacote){
+ serialModem::startTimer_pacote = false;
+ osTimerStart(serialModem::timer_pacote,modemCom::timeOutModem);
+ }
+ //}
if(modBusMaster1::startThreadModBusMaster){
modBusMaster1::startThreadModBusMaster = false;
osTimerStart(modBusMaster1::timer_pacote,4);
@@ -223,12 +227,10 @@
while(true);
}
if(eventosRTC::rotinaEnvioDeDados){
- //Faço aqui o que for devido.
- pc.printf("Enviando dados de hora completa ao server.\n");
- modemCom::status.emComunicacao = true;
- //diversos::wdt.kick(90.0);
- //Aproveitando ACT
- if(!modemCom::status.recebendoArquivoDoServer){
+ //Faço aqui o que for devido.
+ if((!modemCom::status.recebendoArquivoDoServer)&&(enviaDadosPorAlarme==255)){
+ if(debug){pc.printf("Enviando dados de hora completa ao server.\n");}
+ modemCom::status.emComunicacao = true;
eventosRTC::rotinaEnvioDeDados--;
modemCom::status.periodo = 900;
if(modemCom::verificaConexao()){
@@ -238,19 +240,19 @@
modemCom::status.periodo = modemCom::status.periodoConfiguracao; //Restaurando o período configurado no sistema
}
}
- //diversos::wdt.kick(90.0);
+ modemCom::status.emComunicacao = false;
}
- modemCom::status.emComunicacao = false;
+
}
if(arquivoEnvioPointer!=NULL){
- pc.printf("Enviando o arquivo <%s> ao server.\n",arquivoEnvioPointer->nome);
+ if(debug){pc.printf("Enviando o arquivo <%s> ao server.\n",arquivoEnvioPointer->nome);}
if(modemCom::postFileCommandMode(modemCom::status.serverIP,modemCom::status.host,"/drome/parser/index.php",arquivoEnvioPointer)){
//if(modemCom::postFileCommandMode(modemCom::status.serverIP,modemCom::status.host,"/sistema/Parser/index.php",arquivoEnvioPointer)){
- pc.printf("Enviado o arquivo <%s>.\n",arquivoEnvioPointer->nome);
+ if(debug){pc.printf("Enviado o arquivo <%s>.\n",arquivoEnvioPointer->nome);}
arquivoEnvioPointer = NULL;
}else{
- pc.printf("Erro enviando o arquivo <%s>.\n",arquivoEnvioPointer->nome);
+ if(debug){pc.printf("Erro enviando o arquivo <%s>.\n",arquivoEnvioPointer->nome);}
}
}
@@ -285,11 +287,6 @@
}
}
-//Timeout timeOutModem;
-void chamaProcessaPacotePeloTimeOut(){
- modemCom::processaPacote(NULL);
-}
-
void loadDevices(){
if(sdCard::abreArquivo(&sdCard::devices,"r")){
criaDevices(sdCard::devices.fp);
@@ -307,7 +304,8 @@
SD1.period_us(pwmPeriod);
modemCom::atendendoWebServer = false;
serialPC::serialPC_init();
- pc.printf("Versao 23/05/2018.\r\n");
+ printf("Versao: %s.\r\n",firmVersion);
+ printf("Reset Cause: %s.\r\n",resetCause);
modemCom::timeOutModem = 30;
serialModem::serial_init();
numeroDeBytesPorEnvio = 768;
@@ -315,11 +313,11 @@
inicializaSensoresTemperatura();
if(sdCard::init()){
- pc.printf("SD Card inicializado com sucesso.\n");
+ printf("SD Card inicializado com sucesso.\n");
//Carregando a lista de dispositivos
loadDevices();
}else{
- pc.printf("Nao foi possivel inicializar o SD Card.\n");
+ printf("Nao foi possivel inicializar o SD Card.\n");
}
@@ -341,6 +339,9 @@
//Inicio do programa;
int main() {
+ sprintf(firmVersion,"Ver23/05/18_1.0A");
+ sprintf(resetCause,"POR");
+
debug = false;
eInt1.rise(&diversos::processaPulsosEDs);
eInt2.rise(&diversos::processaPulsosEDs);
@@ -366,7 +367,7 @@
while(true){
osDelay(100);
if(callBootLoader){
- diversos::wdt.kick(15.0);
+ diversos::wdt.kick(90.0);
SysTick->CTRL &= ~0x00000002; // disable SysTick interrupt
NVIC_DeInit();
//__disable_irq();
@@ -376,51 +377,46 @@
bootLoader();
}
- //pc.printf("Thread: MAIN.\r\n");
+ //if(debug)pc.printf("Thread: MAIN.\r\n");
if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){
diversos::wdt.kick();
}else{
if(modemCom::status.recebendoArquivoDoServer){
modemCom::status.recebendoArquivoDoServer--;
- //Esta thread já roda a cada 100mS
- //printf("modemCom::status.recebendoArquivoDoServer = %lu.\r\n",modemCom::status.recebendoArquivoDoServer);
+ //Esta thread já roda a cada 100mS
if(modemCom::status.recebendoArquivoDoServer==0){
modemCom::closeConnection(modemCom::status.connIDServerCommand);
}
}
}
- if(!modemCom::status.recebendoArquivoDoServer){
- if(eventosRTC::minutos){
- //Executo abaixo a rotina de 1 minuto
- eventosRTC::minutos = false;
- refreshSensoresTemperatura();
- writeReadingsToSD();
- }
-
+
+ if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){
if(eventosRTC::rotina1segundo){
eventosRTC::rotina1segundo = false;
if(enviaDadosPorAlarme!=255){
enviaDadosPorAlarme--;
if(enviaDadosPorAlarme==0){
eventosRTC::rotinaEnvioDeDados=maxTentativasEnvioDados;
- enviaDadosPorAlarme=255;
+ enviaDadosPorAlarme=255;
}
}
leiturasAnalogicas();
verificaSaidasDigitais();
leiturasDigitais();
+
if(debug){
pc.printf("\nMemoria RAM disponivel = %lu\n",diversos::memAvailable());
pc.printf("\nEntrada 4 = %lu.\nEntrada 3 = %lu.\nEntrada 2 = %lu.\nEntrada 1 = %lu.\r\n",aiFiltrada[3],aiFiltrada[2],aiFiltrada[1],aiFiltrada[0]);
pc.printf("Pulsos <%lu><%lu><%lu>.\r\n",pulsosEDs[0],pulsosEDs[1],pulsosEDs[2]);
+
for(debug=0;debug<9;debug++){
- pc.printf("EntradaDigital[%u]=%u.\r\n",debug,(entradasDigitais[debug]>1));
+ printf("EntradaDigital[%u]=%u.\r\n",debug,(entradasDigitais[debug]>1));
}
-
}
+
time_t seconds = time(NULL);
- printf("%s\n", ctime(&seconds));
+ printf("Drome %s, Hora-> %s\n",firmVersion,ctime(&seconds));
}
if(eventosRTC::rotina10Segundos){
@@ -431,7 +427,7 @@
}
if(sdCard::deleteSentFiles){
- pc.printf("Recebido comando para deletar arquivos enviados.\n");
+ printf("Recebido comando para deletar arquivos enviados.\n");
sdCard::deleteBanks(sdCard::currentBankSending);
if(sdCard::modificaCurrentBank(sdCard::currentBank,!sdCard::currentBankSending)){
sdCard::deleteSentFiles=false;
@@ -439,26 +435,33 @@
}
}
+ if((eventosRTC::minutos)&&(!modemCom::status.recebendoArquivoDoServer)){
+ //Executo abaixo a rotina de 1 minuto
+ eventosRTC::minutos = false;
+ refreshSensoresTemperatura();
+ writeReadingsToSD();
+ }
+
if(executaComandoServer){
executaComandoServer = false;
commands::exec(modemCom::status.connIDServerCommand);
if(!modemCom::status.recebendoArquivoDoServer){
- pc.printf("Fechando socket chave 4.\r\n");
+ if(debug){pc.printf("Fechando socket chave 4.\r\n");}
modemCom::closeConnection(modemCom::status.connIDServerCommand);
}
}
if(modemCom::atendendoWebServer){
modemCom::atendendoWebServer = false;
- pc.printf("Atendendo webServer na conexao %u.\r\n",modemCom::status.connIDWebServer);
+ if(debug){pc.printf("Atendendo webServer na conexao %u.\r\n",modemCom::status.connIDWebServer);}
modemCom::status.emComunicacao=true;
modemCom::webServer(modemCom::status.connIDWebServer);
modemCom::status.emComunicacao=false;
}
if(boolExecAct){
- dispositivos[0]->execAct(act);
+ execAct(act);
boolExecAct = false;
}
}