Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

overflow problem when decreasing the void loop delay #79

Open
RafaelFerrari95 opened this issue Mar 30, 2024 · 0 comments
Open

overflow problem when decreasing the void loop delay #79

RafaelFerrari95 opened this issue Mar 30, 2024 · 0 comments

Comments

@RafaelFerrari95
Copy link

First, i'm great fun about your work
i watch your youtube channel too

my problem is: i have a struct with many variables for reading my sensors which is mpu6050, bmp280 and gps neo-6m. i send this struct to my receptor with a delay 750ms, but i want at last 200ms or 250ms. And when i decreasing 750ms to 700ms the lora receptor show weird numbers and "ovf" which i think it is overflow.

i google a lot but not sucefull, i hope you can help me, please.

here is my transmisson code:
"//Incluindo bibliotecas
#include <Adafruit_Sensor.h> // Incluindo biblioteca dos sensores
#include <Adafruit_MPU6050.h> // Biblioteca do acelerômetro (MPU6050)
#include <Adafruit_BMP280.h> // Biblioteca do barômetro (BMP280)
#include <Wire.h> // Biblioteca do I2C
#include "EBYTE.h" // Biblioteca do LoRa Ebyte
#include <TinyGPSPlus.h> // Biblioteca do gps
#include <HardwareSerial.h> // Biblioteca para serial

//Definição de variáveis constantes
#define SEALEVELPRESSURE_HPA 1015.50 // Define um nivel de pressão atmosferica conhecida. SEMPRE PRECISA DE AJUSTE

//Definição de pinagem
//LoRa Ebyte
#define RX_LORA 3
#define TX_LORA 1
#define PIN_M0 4
#define PIN_M1 0
#define PIN_AX 2
//GPS
#define RX_GPS 16
#define TX_GPS 17

//Variaveis Globais
unsigned char Chan; // Seleciona a frequência de transmissão
struct DATA { // Struct contendo todas as informações que serão enviadas pela telemetria
float temperatura; // É média da temperatura do mpu com o bmp
float MPU[6]; // Guarda os dados de Accel(x,y,z) e Gyro(x,y,z) nessa ordem
float BMP[2]; // Guarda os dados de pressão e de altura nessa ordem
float GPS[3]; // Guarda os dados de latitudi, longitudi e velocidade no plano xy
uint8_t Inicializacao[5]; // Guarda o status de inicialização dos sensores CE_ER, MPU, BMP, GPS, Ebyte ; nesta ordem respectivamente
};DATA MyData;

//Cria a serial e o objeto transceptor, passando o serial e os pinos
HardwareSerial SerialGPS(2);
HardwareSerial SerialLORA(0);
EBYTE Transceiver(&SerialLORA, PIN_M0, PIN_M1, PIN_AX);

//Criação de classes e objetos
Adafruit_MPU6050 mpu;
Adafruit_BMP280 bmp;
TinyGPSPlus gps;

//Protótipo de função
void Iniciar_Sensores(); // Inicializa os sensores
void Config_Sensores(); // Configura os parâmetros de funcionamento dos sensores
void Catch_Values(); // Captura apenas os valores dos sensores

void setup() {
SerialGPS.begin(9600, SERIAL_8N1, RX_GPS, TX_GPS);
SerialLORA.begin(9600);
delay(100);

Iniciar_Sensores();
Config_Sensores();

delay(100);
}

void loop() {
Catch_Values();
Transceiver.SendStruct(&MyData, sizeof(MyData));
delay(750);
}

void Iniciar_Sensores() {
MyData.Inicializacao[0] = 1; // Se o circuito foi energizado e o ESP funciona recebe o valor de 1

if(mpu.begin(0x68)) MyData.Inicializacao[1] = 1; // Se o mpu não inicializar corretamente recebe 0
else MyData.Inicializacao[1] = 0; // Se o mpu inicializar corretamente recebe 1

if(bmp.begin(0x76)) MyData.Inicializacao[2] = 1; // Se o bmp não inicializar corretamente recebe 0
else MyData.Inicializacao[2] = 0; // Se o bmp inicializar corretamente recebe 1

if(bmp.begin(0x76)) MyData.Inicializacao[3] = 1; // Se o gps não inicializar corretamente recebe 0
else MyData.Inicializacao[3] = 0; // Se o gps inicializar corretamente recebe 1

Transceiver.init(); // Inicializa o LoRa Ebyte
}

void Config_Sensores() {
//Configura os parâmetros do MPU6050
mpu.setAccelerometerRange(MPU6050_RANGE_16_G);
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_44_HZ);

//Configura os parâmetros do BMP280
/*
//Configura os parâmetros do LoRa Ebyte
Chan = 0;
Transceiver.SetChannel(Chan);
Transceiver.SaveParameters(PERMANENT);
Transceiver.PrintParameters();
*/
}

void Catch_Values() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);

MyData.temperatura = (temp.temperature + bmp.readTemperature())/2.00;
MyData.MPU[0] = a.acceleration.x;
MyData.MPU[1] = a.acceleration.y;
MyData.MPU[2] = a.acceleration.z;
MyData.MPU[3] = g.gyro.x;
MyData.MPU[4] = g.gyro.y;
MyData.MPU[5] = g.gyro.z;

MyData.BMP[0] = bmp.readPressure();
MyData.BMP[1] = bmp.readAltitude(SEALEVELPRESSURE_HPA);

while(SerialGPS.available() > 0) gps.encode(SerialGPS.read());

if(gps.location.isValid()) {
MyData.GPS[0] = gps.location.lat();
MyData.GPS[1] = gps.location.lng();
}
if(gps.speed.isValid()) MyData.GPS[2] = gps.speed.mps();
}"

i'm from Brazil, so yeah the comemnts is in portuguese kk

here is my reception code:
"// Biblioteca
#include "EBYTE.h"

// Definição de constantes
#define PIN_RX 16
#define PIN_TX 17
#define PIN_M0 4
#define PIN_M1 0
#define PIN_AX 2

// Variáveis Globais
unsigned char Chan; // Seleciona a frequência de transmissão
unsigned char flag1 = 0; // Flag 1 de identificação para exibir o status de inicialização
unsigned short count = 0; // Contagem do tempo
struct DATA { // Struct contendo todas as informações que serão enviadas pela telemetria
float temperatura; // É média da temperatura do mpu com o bmp
float MPU[6]; // Guarda os dados de Accel(x,y,z) e Gyro(x,y,z) nessa ordem
float BMP[2]; // Guarda os dados de pressão e de altura nessa ordem
float GPS[3]; // Guarda os dados de latitudi, longitudi e velocidade no plano xy
uint8_t Inicializacao[5]; // Guarda o status de inicialização dos sensores CE_ER, MPU, BMP, GPS, Ebyte ; nesta ordem respectivamente
}; DATA MyData;

//Cria o objeto transceptor, passando o serial e os pinos
EBYTE Transceiver(&Serial2, PIN_M0, PIN_M1, PIN_AX);

void setup() {
Serial.begin(9600);
Serial2.begin(9600);
delay(100);
/*
//Configura os parâmetros do LoRa Ebyte
Chan = 0;
Transceiver.SetChannel(Chan);
Transceiver.SaveParameters(PERMANENT);
Transceiver.PrintParameters();
*/
Transceiver.init();
delay(100);
}

void loop() {
if (Serial2.available()) {
Transceiver.GetStruct(&MyData, sizeof(MyData));

if (flag1 == 0) {
  Serial.print("Status CE_EF: ");
  Serial.println(MyData.Inicializacao[0]);
  Serial.print("Status MPU: ");
  Serial.println(MyData.Inicializacao[1]);
  Serial.print("Status BMP: ");
  Serial.println(MyData.Inicializacao[2]);
  Serial.print("Status GPS: ");
  Serial.println(MyData.Inicializacao[3]);
  Serial.print("Status LoRa: ");
  Serial.println(MyData.Inicializacao[4] = 1);
  flag1 = 1;
}
// Formato de mensagem: "count temperatura Acell_x Acell_y Acell_z Gyro_x Gyro_y Gyro_z pressão altura lat longt vel_xy\n"
Serial.print("!");
Serial.print(count);
Serial.print(" ");
Serial.print(MyData.temperatura);
Serial.print(" ");
Serial.print(MyData.MPU[0]);
Serial.print(" ");
Serial.print(MyData.MPU[1]);
Serial.print(" ");
Serial.print(MyData.MPU[2]);
Serial.print(" ");
Serial.print(MyData.MPU[3]);
Serial.print(" ");
Serial.print(MyData.MPU[4]);
Serial.print(" ");
Serial.print(MyData.MPU[5]);
Serial.print(" ");
Serial.print(MyData.BMP[0]);
Serial.print(" ");
Serial.print(MyData.BMP[1]);
Serial.print(" ");
Serial.print(MyData.GPS[0],6);
Serial.print(" ");
Serial.print(MyData.GPS[1],6);
Serial.print(" ");
Serial.println(MyData.GPS[2]);

} else {
Serial.println("Searching: ");
}

count++;
delay(750);
}"

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant