KrisKasprzak / EBYTE

Libraries to program and use UART-based EBYTE wireless data transceivers
239 stars 75 forks source link

overflow problem when decreasing the void loop delay #79

Open RafaelFerrari95 opened 4 months ago

RafaelFerrari95 commented 4 months ago

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 // Incluindo biblioteca dos sensores

include // Biblioteca do acelerômetro (MPU6050)

include // Biblioteca do barômetro (BMP280)

include // Biblioteca do I2C

include "EBYTE.h" // Biblioteca do LoRa Ebyte

include // Biblioteca do gps

include // 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); }"