Да, я писал что упустил регулярное обновление этой переменной...900 меньше 1000 - не выполняется 1-ое условие
if (Alt_Moment > Alt_Start) {
Исправил ошибку с обновлением "Alt_Moment", заодно выбросил и переменные "Press" и "Temp", запись данных идет на прямую, без переменных. Задал периодичность исполнения в 0,01 секунды...
Теперь имеем следующий вид:
C++:
#include <iarduino_Pressure_BMP.h>
iarduino_Pressure_BMP sensor(0x77);
float bmppressure;
float bmptemperature;
float bmpaltitude;
float bmppressure2;
#include <SPI.h>
#include <SD.h>
#include <iarduino_RTC.h>
float Alt_Start;
float Alt_Moment;
iarduino_RTC time(RTC_DS1302, 8,6,7);
void sd_print(String file, String texttoprint, boolean lf)
{
File sd_file;
sd_file = SD.open(file, FILE_WRITE);
if(sd_file){
if(lf)sd_file.println(texttoprint);
else sd_file.print(texttoprint);
sd_file.close();
}
}
void setup()
{
Alt_Start = 0;
Alt_Moment = 0;
sensor.begin();
SD.begin(10);
time.begin();
}
void loop()
{
//Считывание данных с датчика
if(sensor.read(1)){
bmppressure = sensor.pressure;
bmptemperature = sensor.temperature;
bmpaltitude = sensor.altitude;
}
if(sensor.read(2)){
bmppressure2 = sensor.pressure;
}
//Присвоение текущей высоты переменной
Alt_Moment = bmpaltitude;
//Если текущая высота больше базовой (идёт подъём)
if (Alt_Moment > Alt_Start) {
//Если текущая высота меньше базовой (идёт спуск)
if (Alt_Moment < Alt_Start) {
//Если текущая высота меньше (или равна) пороговой
if (Alt_Moment <= 50) {
//Даём сигнал на выброс парашюта
pinMode(21, OUTPUT);
digitalWrite(21,HIGH);
Alt_Start = Alt_Moment;
Alt_Moment = bmpaltitude;
}
Alt_Start = Alt_Moment;
Alt_Moment = bmpaltitude;
}
//Даём сигнал на выброс тормозной ленты
pinMode(20, OUTPUT);
digitalWrite(20,HIGH);
Alt_Start = Alt_Moment;
Alt_Moment = bmpaltitude;
}
Alt_Start = Alt_Moment;
Alt_Moment = bmpaltitude;
//Пишем статистику в файл
sd_print("fly_logs.txt",(String(time.gettime("H:i:s")) + String(bmpaltitude) + String(bmptemperature) + String(bmppressure2)),true);
//Задаем период в 0,01 секунды
delay(10);
}