Явообще чайник. Для себя решил поковыряться с ардуинкой. Занимаюсь парапланеризмом. Решил сделать вариометр. и блютус датчик давления для проги на андроиде.
Собрал на и про мини приборчик.Пищалка-вариометр и блютус датчик давления в одном флаконе. Залил скетч на пищалку-вариометр. Работает отлично и на подъем и на опускание . Пьезозуммер пищит как положено .
Залил скетч на блютус датчик. Все отлично андроид видит блютус.считывает данные давления и программа для полетов видит и работает с данными как и положено.
Решил объединить скетчи. Все залилось и работает.Блютус так же выдает. Все работает.
А вот звук на пищалке(пьезо) стал дребезжащий, как подыхающий. Что это, нехватка сигнала или что. Я вообще не соображаю. Если кто в курсе, подскажите куда копать
Код пищалки
#include <Adafruit_BMP280.h>
#include <Wire.h>
#include <Adafruit_LiquidCrystal.h>
Adafruit_BMP280 sensor;
float vario_down = -1.8; // Установка СНИЖЕНИЯ
float vario_up = 0.2;
float alt[51];
float tim[51];
float beep;
float Beep_period;
float mux;
float Altitude;
const float p0 = 101325;
long Pressure = 101325;
unsigned long bounseInput4P = 0UL;
int samples = 40;
int maxsamples = 50;
int countPressVal = 0;
bool tmp1 = 0;
bool countPress = 0;
bool bounseInput4S = 0;
bool bounseInput4O = 0;
boolean thermalling = false;
int p = 9;
void setup() {
pinMode(p, OUTPUT);
if (!sensor.begin()) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1)
;
}
sensor.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X8, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X8, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_63); /* Standby time. */
}
void loop() {
sensor.readTemperature();
sensor.readPressure();
sensor.readAltitude();
float tempo = millis();
float vario = 0;
float N1 = 0;
float N2 = 0;
float N3 = 0;
float D1 = 0;
float D2 = 0;
for (int cc = 1; cc <= maxsamples; cc++) { // усреднитель
alt[(cc - 1)] = alt[cc];
tim[(cc - 1)] = tim[cc];
};
alt[maxsamples] = sensor.readAltitude();
tim[maxsamples] = tempo;
float stime = tim[maxsamples - samples];
for (int cc = (maxsamples - samples); cc < maxsamples; cc++) {
N1 += (tim[cc] - stime) * alt[cc];
N2 += (tim[cc] - stime);
N3 += (alt[cc]);
D1 += (tim[cc] - stime) * (tim[cc] - stime);
D2 += (tim[cc] - stime);
};
vario = 1000 * ((samples * N1) - N2 * N3) / (samples * D1 - D2 * D2); // рачёт звука
if ((tempo - beep) > Beep_period) {
beep = tempo;
if (vario > vario_up && vario < 15) {
Beep_period = 350 - (vario * 5);
tone(p, (1000 + (100 * vario)), 300 - (vario * 5)); // звук на подъёме
tone(p, (1003 + (100 * vario)), 300 - (vario * 5));
thermalling = true;
} else if ((vario < 0) && (thermalling == true)) {
thermalling = false;
// tone(200, 800); // звук предпоток (по-желанию )
} else if (vario < vario_down) { // звук на сливе
Beep_period = 200;
tone(p, (300 - (vario)), 340);
tone(p, (303 - (vario)), 340);
thermalling = false;
}
}
}
Код блютус
#include <Wire.h>
#include <Adafruit_BMP280.h>
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // RX | TX // Указываем пины rx tx на который будет подключен Bluetooth модуль
// Переменная для вывода давления
Adafruit_BMP280 bmp; // I2C
void setup() {
Serial.begin(9600);
BTSerial.begin(9600); //38400
if (!bmp.begin()) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1)
;
}
/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X8, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X8, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_63); /* Standby time. */
}
void loop() {
//Serial.println(F("BMP280 test2"));
// Показания давления зависят от температуры, поэтому узнаем сначала температуру
bmp.readTemperature(); // Считывание показания температуры
bmp.readPressure();
BTSerial.print(F("PRS ")); // Передаем в монитор порта
BTSerial.print(round(bmp.readPressure()), HEX); // Для проверки
BTSerial.print(F("\n"));
Serial.print(F("PRS ")); // Передаем в монитор порта
Serial.print(round(bmp.readPressure()), HEX); // Для проверки
Serial.print(F("\n")); // Например: "PRS 1817F\n"
}
общий
#include <Adafruit_BMP280.h>
#include <Wire.h>
#include <Adafruit_LiquidCrystal.h>
#include <SoftwareSerial.h>
Adafruit_BMP280 sensor;
SoftwareSerial BTSerial(2, 3);
float vario_down = -1.8; // Установка СНИЖЕНИЯ
float vario_up = 0.2;
float alt[51];
float tim[51];
float beep;
float Beep_period;
float mux;
float Altitude;
const float p0 = 101325;
long Pressure = 101325;
unsigned long bounseInput4P = 0UL;
int samples = 40;
int maxsamples = 50;
int countPressVal = 0;
bool tmp1 = 0;
bool countPress = 0;
bool bounseInput4S = 0;
bool bounseInput4O = 0;
boolean thermalling = false;
int p = 9;
void setup() {
pinMode(p, OUTPUT);
BTSerial.begin(9600); //38400
if (!sensor.begin()) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1)
;
}
sensor.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X8, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X8, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_63); /* Standby time. */
}
void loop() {
sensor.readTemperature();
sensor.readPressure();
sensor.readAltitude();
BTSerial.print(F("PRS ")); // Передаем в монитор порта
BTSerial.print(round(sensor.readPressure()), HEX); // Для проверки
BTSerial.print(F("\n"));
float tempo = millis();
float vario = 0;
float N1 = 0;
float N2 = 0;
float N3 = 0;
float D1 = 0;
float D2 = 0;
for (int cc = 1; cc <= maxsamples; cc++) { // усреднитель
alt[(cc - 1)] = alt[cc];
tim[(cc - 1)] = tim[cc];
};
alt[maxsamples] = sensor.readAltitude();
tim[maxsamples] = tempo;
float stime = tim[maxsamples - samples];
for (int cc = (maxsamples - samples); cc < maxsamples; cc++) {
N1 += (tim[cc] - stime) * alt[cc];
N2 += (tim[cc] - stime);
N3 += (alt[cc]);
D1 += (tim[cc] - stime) * (tim[cc] - stime);
D2 += (tim[cc] - stime);
};
vario = 1000 * ((samples * N1) - N2 * N3) / (samples * D1 - D2 * D2); // рачёт звука
if ((tempo - beep) > Beep_period) {
beep = tempo;
if (vario > vario_up && vario < 15) {
Beep_period = 350 - (vario * 5);
tone(p, (1000 + (100 * vario)), 300 - (vario * 5)); // звук на подъёме
tone(p, (1003 + (100 * vario)), 300 - (vario * 5));
thermalling = true;
} else if ((vario < 0) && (thermalling == true)) {
thermalling = false;
// tone(200, 800); // звук предпоток (по-желанию )
} else if (vario < vario_down) { // звук на сливе
Beep_period = 200;
tone(p, (300 - (vario)), 340);
tone(p, (303 - (vario)), 340);
thermalling = false;
}
}
}