Добавить в код интервал в 1 минуту, чтобы отображать вывод непрерывно в течение одной минуты и не отображать его в течение другой минуты?

/*
Трехосевой гироскоп и акселерометр MPU6050. Пример акселерометра тангажа и крена.
Подробнее: http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-zyroskop-i-akcelerometr-mpu6050.html
GIT: https://github.com/jarzebski/Arduino-MPU6050
Сайт: http://www.jarzebski.pl
(c) 2014 г., Корнелиуш Яжебский.
*/

#include <Wire.h>
#include <MPU6050.h>

MPU6050 mpu;

void setup() 
{
  Serial.begin(115200);

  Serial.println("Initialize MPU6050");

  while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
    delay(500);
  }
}

void loop()
{
  // Чтение нормализованных значений
  Vector normAccel = mpu.readNormalizeAccel();

  // Рассчитать тангаж и крен
  int pitch = -(atan2(normAccel.XAxis, sqrt(normAccel.YAxis*normAccel.YAxis + normAccel.ZAxis*normAccel.ZAxis))*180.0)/M_PI;
  int roll = (atan2(normAccel.YAxis, normAccel.ZAxis)*180.0)/M_PI;

  // Выход
  Serial.print(" Pitch = ");
  Serial.print(pitch);
  Serial.print(" Roll = ");
  Serial.print(roll);

  Serial.println();

  delay(10);
}

, 👍-1

Обсуждение

Существует множество руководств, обучающих тому, как делать что-то по времени. Погуглите немного, так как мы не являемся бесплатным сервисом по написанию кода., @chrisl


1 ответ


1

Есть мнение, что это базовый вопрос программирования.

Я полагаю, что вы хотите отобразить вывод в течение одной минуты, затем не отображать его в течение минуты, затем отобразить его в течение минуты, затем выключить и т. д.

Если вы переименуете существующую функцию loop в displayData и добавите новую функцию loop, которая выполняет следующее.

Он записывает текущее время (из millis()) и сохраняет его в переменной с именем startTime. Он создает переменную с именем endTime и устанавливает ее значение равным startTime + (60 * 1000) (что составляет 60 секунд??) Затем он выполняет цикл while до тех пор, пока не наступит millis() > endTime. Внутри этого цикла вызывается ваша новая функция displayData Затем выполняется еще один цикл while или вызывается функция сна на 60 секунд.

Что-то вроде этого:

int endTime = millis() + 60000;
while (millis() < endTime)
{
    displayData();
}
endTime = millis() + 60000;
while (millis() < endTime)
{
; // Пустой цикл
}

Ужасный код, есть гораздо более элегантные решения, но он справится со своей задачей.

,