Как рассчитать общее время, в течение которого датчик работает или динамически? - PullRequest
0 голосов
/ 09 октября 2019

У меня есть модуль акселерометра, который подключен к esp8266.

Я уже взял значения, когда устройство движется и статично (считывает необработанные данные из регистра).

Это дано в условии «Если», как я могу рассчитать общее время (в секундах или минутах), когда устройство статическое или динамическое?

#include <Ticker.h>
#include <Wire.h>

#include <MPU6050.h>
int  startTime=0,endTime=0;
int i=0;
int j=0;
double x;
double y;
int SCL_PIN=26; 
int SDA_PIN=25; 
MPU6050 mpu;
Ticker blinker;

void changeState()
{
Vector rawAccel =mpu.readRawAccel();

x =  rawAccel.XAxis;
y = rawAccel.YAxis;

if(x>250&&x<1000||y>64000)  // static values
 {
 i++;
 Serial.print("static");
  Serial.print("total time in second ");
 Serial.println(i);
 }

 if(x>900||y<500)    // dynamic values
 {
   j++;
   Serial.print("dynamic");
   Serial.print("total time in second");
   Serial.println(j);

 }

}


void setup()
{
 Serial.begin(9600);
 Serial.println("Initialize MPU6050");

  while(!mpu.beginSoftwareI2C(SCL_PIN,SDA_PIN,MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
    delay(500);
  }
 blinker.attach(.5, changeState);

}

void loop()
{

}

Я пробовал этот код, но некоторые значения отсутствуют, любыеДругой способ?

1 Ответ

0 голосов
/ 09 октября 2019

Возьмите время в миллис () в точке входа для вычитания из последнего цикла, в котором он существовал. Разница во времени (в секундах) - это время, когда он был динамическим или статическим.

Вы всегда можетеизмените тип данных «sec», «i», «j», если обнаружите какую-либо ошибку.

#include <Ticker.h>
#include <Wire.h>

#include <MPU6050.h>
int  startTime=0,endTime=0;
uint32_t i=0;
uint32_t j=0;
double x;
double y;
int SCL_PIN=26; 
int SDA_PIN=25; 
MPU6050 mpu;
Ticker blinker;
uint32_t sec, secDiff = 0;

void changeState()
{
int sec1 = millis() / 1000;
Vector rawAccel =mpu.readRawAccel();

x =  rawAccel.XAxis;
y = rawAccel.YAxis;

if(x>250&&x<1000||y>64000)  // static values
 {
 i += (sec - secDiff) % 60;
 Serial.print("static");
  Serial.print("total time in second ");
 Serial.println(i);
 }

 if(x>900||y<500)    // dynamic values
 {
   j += (sec - secDiff) % 60;
   Serial.print("dynamic");
   Serial.print("total time in second");
   Serial.println(j);

 }
secDiff = sec1;
sec = millis() / 1000;
}


void setup()
{
 Serial.begin(9600);
 Serial.println("Initialize MPU6050");

  while(!mpu.beginSoftwareI2C(SCL_PIN,SDA_PIN,MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
    delay(500);
  }
 secDiff = millis()/1000;
 blinker.attach(.5, changeState);

}

void loop()
{

}
...