Проблема заключается в следующем: без массива в loop программа работает и выводит все значения, при появлении массива и операций с ним перестаёт измеряться высота и ускорение по двум осям из трёх, как можно это исправить?
//подключение библиотек
#include <GyverBME280.h>
#include "MPU6050.h"
#include <Wire.h>
GyverBME280 bme;
MPU6050 mpu;
float startheight; //начальная высота
int Measurecount = 0; //счётчик циклов
float accx = 0; //ускорение по трём осям
float accy = 0;
float accz = 0;
float arr_max = 0; //максимальное значение массива, в который записана высота
void setup() {
Serial.begin(19200);
Serial.println("Start");
// запуск BMP 280 и проверка на работоспособность
while(!bme.begin(0x76)) {
Serial.println("Error!");
// запуск и инициализация MPU 6050
mpu.initialize();
Serial.println(mpu.testConnection() ? "MPU6050 OK" : "MPU6050 FAIL");
delay(300);
}
}
void loop() {
float heightarr[3000]; //массив, в который записывается высота
float height = (760 - ((bme.readPressure()) / 133.32))*12; //переменная, отвечающая за высоту
//проверка кол-ва циклов
Measurecount ++;
if(Measurecount == 2){
startheight = height;
}
// температура
Serial.print("Temperature: ");
Serial.println(bme.readTemperature());
// давление
Serial.print("Pressure: ");
Serial.println(bme.readPressure());
// высота над уровнем старта
Serial.print("Height:");
Serial.println(height - startheight);
//запись ускорения в переменные
accx = mpu.getAccelerationX();
accy = mpu.getAccelerationY();
accz = mpu.getAccelerationZ();
//их вывод
Serial.print("Accelaration X:");
Serial.println(accx / 32768 * 2*9.81);
Serial.print("Accelaration Y:");
Serial.println(accy / 32768 * 2*9.81);
Serial.print("Accelaration Z:");
Serial.println(accz / 32768 * 2*9.81);
heightarr[Measurecount] = height-startheight; //запись значения высоты в ячейку массива
if (heightarr[3000]>0 || heightarr<0) {for(int i = 1; i <= 3000; i++){ // запуск цикл для обхода всех элементов массива
arr_max = max(arr_max, heightarr[i]);
}
}
//вывод апогея
Serial.print("Apogee of cycle: ");
Serial.println(arr_max);
delay(100);
}