Advertisement
Guest User

Untitled

a guest
Feb 19th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.72 KB | None | 0 0
  1. #include <Wire.h>
  2. #include <SPI.h>
  3. #include <Adafruit_Sensor.h>
  4. #include <Adafruit_BMP280.h>
  5. int flag=0;
  6. int ledPin = 8;
  7.  
  8. float getMeanDavlenie(int n, int d);
  9.  
  10. float start_davlenie = 0;
  11. float davlenie = 0;
  12. float stop_davlenie = 0;
  13. int stop = 0; //флаг для выхода из while
  14. int vlag = 0; //флаг для того, что давление изменилось
  15. Adafruit_BMP280 bme; // I2C
  16.  
  17.  
  18. void setup() {
  19. pinMode(8, OUTPUT);
  20. Serial.begin(9600);
  21. Serial.println(F("ТЕСТ"));
  22.  
  23. if (!bme.begin())
  24. {
  25. Serial.println("ДАТЧИК НЕ РОБИТ, БРО!");
  26. while (1);
  27. }
  28.  
  29.  
  30. }
  31.  
  32. void loop() { //программа крутится бесконечно
  33.  
  34. Serial.print("Approx altitude = ");
  35. Serial.print(bme.readAltitude(1013.25));
  36. Serial.println();
  37. Serial.print("stop_davlenie =");
  38. Serial.print(stop_davlenie);
  39. Serial.println();
  40. Serial.print("start_davlenie =");
  41. Serial.print(start_davlenie*0.3);
  42. Serial.println();
  43. delay(3000);
  44.  
  45.  
  46.  
  47. if (digitalRead(9) == HIGH) {
  48. digitalWrite(ledPin, LOW);
  49. // Serial.print("ledpin LOW");
  50. // Serial.println();
  51. start_davlenie = getMeanDavlenie(10, 5); //10 - сколько раз меряем, 5 - сколько мс ждём после каждого измерения,
  52. while (stop == 0) { //будем находиться в цикле пока stop не станет равен единице
  53. delay (5); //будем мерять текущее давление каждые 5 миллисекунд, чтобы не мучать датчик
  54. davlenie = bme.readAltitude(1013.25); //получим текущее давление
  55. if (davlenie > start_davlenie) { //так-так, давление увеличилось
  56. //проверим, что данное увеличение остаётся в течение некоторого времени
  57. stop_davlenie = getMeanDavlenie(5, 5);
  58. //Serial.print("stop_davlenie =");
  59. //Serial.print(stop_davlenie);
  60. //Serial.println();
  61. // Serial.print("davlenie > start_davlenie");
  62. // Serial.println();//померим в течение 25 миллисекунд
  63. if ((stop_davlenie) > (start_davlenie*0.2)) { //если стоп-давление больше начального на 20%
  64. stop = 1; //чтобы выйти из while
  65. vlag = 1;
  66. Serial.print("stop_davlenie =");
  67. Serial.print(stop_davlenie);
  68. Serial.println();
  69. Serial.print("start_davlenie =");
  70. Serial.print(start_davlenie);
  71. Serial.println();
  72. }
  73. }
  74. }
  75. }
  76. if ((vlag == 1)|| (digitalRead(9) == HIGH))
  77. {digitalWrite(ledPin, LOW);
  78. Serial.print("END");
  79. Serial.println();
  80. //давление изменилось, дальше можно делать какие-то действия
  81. } else {
  82. //ничего не делаем, программа начнёт заново ждать нажатия на кнопку и обнулит все переменные
  83. }
  84. }
  85.  
  86. float getMeanDavlenie(int n, int d) { //функция принимает число, показывающее, сколько раз нам мерять давление
  87. float summa = 0;
  88. for (int i = 0; i < n; i++) {
  89. //через каждые d миллисекунд будем засовывать текущее давление в ячейку массива под номер i
  90. delay(d);
  91. summa = summa + bme.readAltitude(1013.25);
  92. }
  93. return summa/n; //функция вернёт среднее давление за всё время использования
  94.  
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement