I have a lot of versions of this project, but the problem happened only when a split one of the libraries in two, I mean part of RAK4631 library was moved to the new library Interfaces.
Here is the part of the project:
main.cpp
#include <main.h>
void setup()
{
/* Inicia o ambiente */
xTaskCreate(IniciaInterfaces,"IniciaInterfaces",configMINIMAL_STACK_SIZE,NULL,1,&OperadorIniciaInterfaces);
xTaskCreate(IniciaRAK1906,"IniciaRAK1906",configMINIMAL_STACK_SIZE,NULL,1,&OperadorIniciaRAK1906); // Inicia RAK1906 BME680 sensor de variáveis ambientais
xTaskCreate(IniciaRAK4631,"IniciaRAK4631",configMINIMAL_STACK_SIZE,NULL,1,&OperadorIniciaRAK4631); // Inicia a porta USB no microcontrolador e o radio LoRa
xTaskCreate(IniciaRAK12500,"IniciaRAK12500",configMINIMAL_STACK_SIZE,NULL,1,&OperadorIniciaRAK12500); // Inicia RAK12500 sensor de posicionamento GNSS
xTaskCreate(IniciaRAK1904,"IniciaRAK1904",configMINIMAL_STACK_SIZE,NULL,1,&OperadorIniciaRAK1904); // Inicia RAK1904 sensor de movimento
xTaskCreate(IniciaRAK5801,"IniciaRAK5801",configMINIMAL_STACK_SIZE,NULL,1,&OperadorIniciaRAK5801); // Inicia RAK5801 Sensor de variação de corrente para transdutor de pressão
/* Faz as leituras e envia */
vTaskDelay(pdMS_TO_TICKS(10000));
xTaskCreate(LeRAK1904,"LeRAK1904",1024,NULL,1,&OperadorLeRAK1904); // Le quantidade de movimento nos eixos X, Y e Z
xTaskCreate(LeRAK1906,"LeRAK1906",1024,NULL,5,&OperadorLeRAK1906); // Le variáveis ambientais
xTaskCreate(LeRAK12500,"LeRAK12500",1024,NULL,4,&OperadorLeRAK12500); // Le o geo-posicionamento via GPS
xTaskCreate(LeRAK5801,"LeRAK5801",1024,NULL,3,&OperadorLeRAK5801); // Le do transdutor de pressão das linhas pneumáticas da composição
xTaskCreate(Empacota,"Empacota",1024,NULL,2,&OperadorEmpacota); // Empacota o payload para ser enviado via LoRa
xTaskCreate(EnviaLoRa,"EnviaLoRa",1024,NULL,1,&OperadorEnviaLoRa);
if (CFG_DEBUG >= D_INFORMA) {
vTaskList(ptrTaskList);
Serial.println("******************************************");
Serial.println("******* Final da Tarefa Setup ************");
Serial.println("******************************************");
Serial.println("Task State Prio Stack Num");
Serial.println("******************************************");
Serial.print(ptrTaskList);
Serial.println("******************************************");
vTaskDelay(pdMS_TO_TICKS(10000));
}
}
void loop()
{
Serial.printf("Apagando a tarefa loop \n");
vTaskDelay(pdMS_TO_TICKS(1000));
vTaskDelete(NULL);
}
main.h
/*
* Firmware MRS desenvolvido para monitorar vagões com as seguintes funções:
* 1) rastreador baseado em GPS: latitude, longitude e altura
* 2) um acelerĂ´metro: quantidade de movimento
* 3) medição de variáveis ambientais: temperatura e humidade
* 4) pressão duas linhas pneumáticas: através da leitura de um transdutor de pressão para variação de corrente 4-20 mA
*/
// classes das variáveis da CDL
#ifndef _ARDUINO_H
#define _ARDUINO_H
#include <Arduino.h>
#endif
#ifndef _STDINT_H
#define _STDINT_H
#include <stdint.h> // usa int sem sinal, por exemplo uint8_t, que ocupa apenas 1 byte
#endif
#ifndef _WIRE_H
#define _WIRE_H
#include <Wire.h>
#endif
// Bibliotecas personalizadas
/*
#include <PackPayload.h>
#include <RAK5801.h>
#include <RAK4631.h>
// #ifndef _RAK1904_H
// #define _RAK1904_H
#include <RAK1904.h>
// #endif
#include <RAK1906.h>
#include <RAK12500.h>
#include <RAK15007.h>
*/
uint8_t count1=0;
char ptrTaskList[500];
size_t uxBufferLength=250;
/* Variáveis para armazenamento do operador das tasks de inĂcio*/
TaskHandle_t OperadorIniciaInterfaces = NULL;
TaskHandle_t OperadorIniciaRAK4631 = NULL;
TaskHandle_t OperadorIniciaRAK12500 = NULL;
TaskHandle_t OperadorIniciaRAK1904 = NULL;
TaskHandle_t OperadorIniciaRAK1906 = NULL;
TaskHandle_t OperadorIniciaRAK5801 = NULL;
/* Variáveis para armazenamento do operador das tasks de leitura das variáveis dos sensores*/
TaskHandle_t OperadorLeRAK1904 = NULL;
TaskHandle_t OperadorLeRAK1906 = NULL;
TaskHandle_t OperadorLeRAK12500 = NULL;
TaskHandle_t OperadorLeRAK5801 = NULL;
/* Empacota no CayenneLPP e envia pelo LoRa */
TaskHandle_t OperadorEmpacota = NULL;
TaskHandle_t OperadorEnviaLoRa = NULL;
/*protĂtipos das Tasks*/
void IniciaInterfaces(void *pvParameters); // Incia porta Serial, Temporizador
void IniciaRAK4631(void *pvParameters); // Inicia Radio LoRa
void IniciaRAK12500(void *pvParameters); // Inicia RAK12500 sensor de geo-posicionamento
void IniciaRAK1904(void *pvParameters); // Inicia RAK1904 sensor acelerĂ´metro de 3 eixos
void IniciaRAK1906(void *pvParameters); // Inicia RAK1906 BME680 sensor de variáveis ambientais
void IniciaRAK5801(void *pvParameters); // Inicia RAK5801 sensor de variação de corrente 4-20mA
void LeRAK1904(void *pvParameters); // Le quantidade de movimento nos eixos X, Y e Z
void LeRAK1906(void *pvParameters); // Le variáveis ambientais
void LeRAK12500(void *pvParameters); // Le o geo-posicionamento via GPS
void LeRAK5801(void *pvParameters); // Le do transdutor de pressão das linhas pneumáticas da composição
void Empacota(void *pvParameters); // Empacota o payload para ser enviado via LoRa
void EnviaLoRa(void *pvParameters); // Envia os payload empacotados pelo LoRa
Interfaces.cpp
/**
* @file Interfaces.cpp
*
* Rotina de operações de inĂcio das interfaces de comunicação em geral para a solução RAK4631, que Ă© composta de um microcontrolador Nordic nRF52840 + Radio LoRa SX126x +
* um Radio Bluetooth Low Energy.
* Essa
*/
#include <Interfaces.h>
void IniciaInterfaces(void *pvParameters)
{
if (CFG_DEBUG >= D_INFORMA) {
Serial.begin(115200);
while (!Serial)
{
vTaskDelay(pdMS_TO_TICKS(100));
}
vTaskDelay(pdMS_TO_TICKS(1000));
Serial.println("INICIOU A PORTA SERIAL");
vTaskDelay(pdMS_TO_TICKS(1000));
}
// Inicia a I2C para todos os sensores RAK1906, RAK1904, RAK12500, RAK15007, RAK15004
Wire.begin();
vTaskDelay(pdMS_TO_TICKS(1000));
}
Intefaces.h
/**
* @file Interfaces.h
*
* Rotina de leitura do inicio das interfaces
*/
#ifndef __INTERFACES_H
#define __INTERFACES_H
#ifndef _ARDUINO_H
#define _ARDUINO_H
#include <Arduino.h>
#endif
#ifndef _STDINT_H
#define _STDINT_H
#include <stdint.h> // usa int sem sinal, por exemplo uint8_t, que ocupa apenas 1 byte
#endif
#ifndef _WIRE_H
#define _WIRE_H
#include <Wire.h>
#endif
void IniciaInterfaces(void *pvParameters);
#endif