Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <SPI.h>
- #include <Adafruit_Sensor.h>
- #include <Adafruit_BMP280.h>
- int flag=0;
- int ledPin = 8;
- float getMeanDavlenie(int n, int d);
- float start_davlenie = 0;
- float davlenie = 0;
- float stop_davlenie = 0;
- int stop = 0; //флаг для выхода из while
- int vlag = 0; //флаг для того, что давление изменилось
- Adafruit_BMP280 bme; // I2C
- void setup() {
- pinMode(8, OUTPUT);
- Serial.begin(9600);
- Serial.println(F("ТЕСТ"));
- if (!bme.begin())
- {
- Serial.println("ДАТЧИК НЕ РОБИТ, БРО!");
- while (1);
- }
- }
- void loop() { //программа крутится бесконечно
- Serial.print("Approx altitude = ");
- Serial.print(bme.readAltitude(1013.25));
- Serial.println();
- Serial.print("stop_davlenie =");
- Serial.print(stop_davlenie);
- Serial.println();
- Serial.print("start_davlenie =");
- Serial.print(start_davlenie*0.3);
- Serial.println();
- delay(3000);
- if (digitalRead(9) == HIGH) {
- digitalWrite(ledPin, LOW);
- // Serial.print("ledpin LOW");
- // Serial.println();
- start_davlenie = getMeanDavlenie(10, 5); //10 - сколько раз меряем, 5 - сколько мс ждём после каждого измерения,
- while (stop == 0) { //будем находиться в цикле пока stop не станет равен единице
- delay (5); //будем мерять текущее давление каждые 5 миллисекунд, чтобы не мучать датчик
- davlenie = bme.readAltitude(1013.25); //получим текущее давление
- if (davlenie > start_davlenie) { //так-так, давление увеличилось
- //проверим, что данное увеличение остаётся в течение некоторого времени
- stop_davlenie = getMeanDavlenie(5, 5);
- //Serial.print("stop_davlenie =");
- //Serial.print(stop_davlenie);
- //Serial.println();
- // Serial.print("davlenie > start_davlenie");
- // Serial.println();//померим в течение 25 миллисекунд
- if ((stop_davlenie) > (start_davlenie*0.2)) { //если стоп-давление больше начального на 20%
- stop = 1; //чтобы выйти из while
- vlag = 1;
- Serial.print("stop_davlenie =");
- Serial.print(stop_davlenie);
- Serial.println();
- Serial.print("start_davlenie =");
- Serial.print(start_davlenie);
- Serial.println();
- }
- }
- }
- }
- if ((vlag == 1)|| (digitalRead(9) == HIGH))
- {digitalWrite(ledPin, LOW);
- Serial.print("END");
- Serial.println();
- //давление изменилось, дальше можно делать какие-то действия
- } else {
- //ничего не делаем, программа начнёт заново ждать нажатия на кнопку и обнулит все переменные
- }
- }
- float getMeanDavlenie(int n, int d) { //функция принимает число, показывающее, сколько раз нам мерять давление
- float summa = 0;
- for (int i = 0; i < n; i++) {
- //через каждые d миллисекунд будем засовывать текущее давление в ячейку массива под номер i
- delay(d);
- summa = summa + bme.readAltitude(1013.25);
- }
- return summa/n; //функция вернёт среднее давление за всё время использования
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement