Map widget in arduino cloud is not real-time

I'm using the following code for getting real-time location using GPS module on arduino cloud but the location is not realtime. The ESP32 has to be reset to get the location.

I'm using some other sensors too, So I've tried multitasking approach as shown in code

// TridentTD_EasyFreeRTOS32 - Version: Latest 


// FreeRTOS - Version: Latest 

/* 
  Sketch generated by the Arduino IoT Cloud Thing "Untitled"
  https://create.arduino.cc/cloud/things/adce9b5f-8b55-4f05-8c9b-a92bc44c94d2 

  Arduino IoT Cloud Variables description

  The following variables are automatically generated and updated when changes are made to the Thing

  String dig;
  int rftar;
  CloudLocation loc;
  bool btn;

  Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
*/
#include "thingProperties.h"
#include <Wire.h>
#include <TinyGPSPlus.h>
#define DUTY 50

float LAT;
float LONG;
int spd;
int bzr = 2;

const byte pushbtn = 5; 
long  previousTime = 0;
bool  buttonState = 0, 
      lastButtonState = 1,
      pressed = 0;
//bool btn;  

TinyGPSPlus gps;




//unsigned int move_index;         // moving index, to be used later
unsigned int move_index = 1;       // fixed location for now

 const int MPU_addr = 0x68; // I2C address of the MPU-6050
 int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;
 float ax = 0, ay = 0, az = 0, gx = 0, gy = 0, gz = 0;
 boolean fall = false; //stores if a fall has occurred
 boolean trigger1 = false; //stores if first trigger (lower threshold) has occurred
 boolean trigger2 = false; //stores if second trigger (upper threshold) has occurred
 boolean trigger3 = false; //stores if third trigger (orientation change) has occurred
 byte trigger1count = 0; //stores the counts past since trigger 1 was set true
 byte trigger2count = 0; //stores the counts past since trigger 2 was set true
 byte trigger3count = 0; //stores the counts past since trigger 3 was set true
 int angleChange = 0;
 

// Uncomment your board, or configure a custom board in Settings.h
//#define USE_WROVER_BOARD
//#define USE_TTGO_T7


void setup() {
  // Initialize serial and wait for port to open:
  
   Serial.begin(9600);
   Serial2.begin(9600);
   pinMode(bzr, OUTPUT);
pinMode(pushbtn, INPUT_PULLUP);

  Serial.println();

  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
 
  
   Wire.begin();
   Wire.beginTransmission(MPU_addr);
   Wire.write(0x6B);  // PWR_MGMT_1 register
   Wire.write(0);     // set to zero (wakes up the MPU-6050)
   Wire.endTransmission(true);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  
  xTaskCreate(
  FELL,
  "pehla task",
  10000,
  NULL,
  1,
  NULL
  );
  
  xTaskCreate(
  WEAR,
  "2ra task",
  10000,
  NULL,
  1,
  NULL
  );
  
  xTaskCreate(
  LOCAT,
  "3ra task",
  100000,
  NULL,
  1,
  NULL
  );
  
 

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
 
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}

void loop() {
  ArduinoCloud.update();
  // Your code here 

}

void mpu_read() {
   Wire.beginTransmission(MPU_addr);
   Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
   Wire.endTransmission(false);
   Wire.requestFrom(MPU_addr, 14, true); // request a total of 14 registers
   AcX = Wire.read() << 8 | Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
   AcY = Wire.read() << 8 | Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
   AcZ = Wire.read() << 8 | Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
   Tmp = Wire.read() << 8 | Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
   GyX = Wire.read() << 8 | Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
   GyY = Wire.read() << 8 | Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
   GyZ = Wire.read() << 8 | Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
 }



void onDigChange()  {
  // Add your code here to act upon Dig change
  
    //code for function 1
    mpu_read();
   ax = (AcX - 2050) / 16384.00;
   ay = (AcY - 77) / 16384.00;
   az = (AcZ - 1947) / 16384.00;
   gx = (GyX + 270) / 131.07;
   gy = (GyY - 351) / 131.07;
   gz = (GyZ + 136) / 131.07;
   // calculating Amplitute vactor for 3 axis
   float Raw_Amp = pow(pow(ax, 2) + pow(ay, 2) + pow(az, 2), 0.5);
   int Amp = Raw_Amp * 10;  // Mulitiplied by 10 bcz values are between 0 to 1
   Serial.println(Amp);
   
   
if (Amp <= 2 && trigger2 == false) { //if AM breaks lower threshold (0.4g)     
trigger1 = true;     
Serial.println("TRIGGER 1 ACTIVATED");   
}   
if (trigger1 == true) {     
trigger1count++;     
if (Amp >= 12) { //if AM breaks upper threshold (3g)
       trigger2 = true;
       Serial.println("TRIGGER 2 ACTIVATED");
      
       trigger1 = false; trigger1count = 0;
     }
   }
   if (trigger2 == true) {
     trigger2count++;
     angleChange = pow(pow(gx, 2) + pow(gy, 2) + pow(gz, 2), 0.5); Serial.println(angleChange);
     if (angleChange >= 30 && angleChange <= 400) { //if orientation changes by between 80-100 degrees       
trigger3 = true; trigger2 = false; trigger2count = 0;       
Serial.println(angleChange);  

Serial.println("TRIGGER 3 ACTIVATED");   
   
}   
}   
if (trigger3 == true) {     
trigger3count++;     
if (trigger3count >= 10) {
       angleChange = pow(pow(gx, 2) + pow(gy, 2) + pow(gz, 2), 0.5);
       //delay(10);
       Serial.println(angleChange);
       
       if ((angleChange >= 0) && (angleChange <= 10)) { //if orientation changes remains between 0-10 degrees         
fall = true; trigger3 = false; trigger3count = 0;         
Serial.println(angleChange);  

}       
else { //user regained normal orientation         
trigger3 = false; trigger3count = 0;         
Serial.println("TRIGGER 3 DEACTIVATED");   
     
}     
} 

}
   
if (fall == true) { //in event of a fall detection     
Serial.println("FALL DETECTED"); 
digitalWrite(bzr,HIGH); 
dig = "Rider fell";                                      //STRING
delay (1000);
fall = false;
digitalWrite(bzr,LOW);
}   
if (trigger2count >= 6) { //allow 0.5s for orientation change
     trigger2 = false; trigger2count = 0;
     Serial.println("TRIGGER 2 DECACTIVATED");
     
   }
   if (trigger1count >= 6) { //allow 0.5s for AM to break upper threshold
     trigger1 = false; trigger1count = 0;
     Serial.println("TRIGGER 1 DECACTIVATED");
     
   }
    
}


void onBtnChange()  {
  // Add your code here to act upon Btn change
 
    //code for function 2
    if(millis() - previousTime >= DUTY){
        buttonState = digitalRead(pushbtn);
        if(buttonState != lastButtonState){
            if(buttonState == 0){
                Serial.println("HELMET ON\n");
                
                 btn = true; 
            }else{
                Serial.println("HELMET OFF\n");
              
                 btn = false;
            }
            pressed = 0;
        }
        lastButtonState = buttonState;
        previousTime = millis();
    }  
}


void onRftarChange()  {

    //updateSerial();
    while (Serial2.available() > 0)
      if (gps.encode(Serial2.read()))
        displayInfo();
    if (millis() > 5000 && gps.charsProcessed() < 10)
    {
      Serial.println(F("No GPS detected: check wiring."));
      while (true);
    }
    rftar = spd;
     loc = {LAT,LONG};
    Serial.println( );
  }
  
void displayInfo()
{
  if (gps.location.isValid()) {
    dig = PropertyActions::CLEAR;
    LAT = (gps.location.lat());     //Storing the Lat. and Lon. 
    LONG = (gps.location.lng()); 
    
    Serial.print("LAT:  ");
    Serial.println(LAT, 6);  // float to x decimal places
    Serial.print("LONG: ");
    Serial.println(LONG, 6);
    
    spd = gps.speed.kmph();               //get speed
    Serial.print("speed (kmph):  ");
     Serial.println(spd);
      Serial.println();
      
     
  }
  else
  {
    //Serial.print("lost");
  
  dig = "gps signals lost";
  }
}


/*******************TASKS************************/

void FELL(void*parameters)  {
  // Add your code here to act upon Dig change
  for(;;){
    //code for function 1
    onDigChange();
     Serial.println( );
    vTaskDelay(1000/portTICK_PERIOD_MS);
  }
}
/*-------------------TASK BTN------------------------*/

void WEAR(void*parameters)  {
  // Add your code here to act upon Btn change
  for(;;){
    //code for function 2
    onBtnChange();
     Serial.println( );
    vTaskDelay(1000/portTICK_PERIOD_MS);
  }
}

/*------------------TASK SPD/LOCATION-------------------------*/

void LOCAT(void*parameters){
  // Add your code here to act upon Rftar change
  for(;;){
    while (Serial2.available() > 0)
      if (gps.encode(Serial2.read()))
        displayInfo();
    if (millis() > 5000 && gps.charsProcessed() < 10)
    {
      Serial.println(F("No GPS detected: check wiring."));
      while (true);
    }
    Serial.println( );
    vTaskDelay(1000 / portTICK_PERIOD_MS);
    
  }
}

















moreover , I see this message on refreshing the dashboard:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.