Разная сигнализация при увеличении или уменьшении высоты

gagatun
Offline
Зарегистрирован: 31.05.2021

Здравствуйте!

Подскажите, как реализовать такое дело: есть датчик bmp280 и пищалка с 3мя контактами - VCC, S, GND.

Все это подключено к Arduino Pro Mini 3.3V, питается от батареи и отлично работает. По отдельности :)

Нужно все это связать в кучу и реализовать две штуки:

1 - Датчик отдает значение высоты. Если это значение увеличивается - он пищит одними звуками, если уменьшается - другими.

2 - В остальное время - пищалка должна просто молчать.

Основная проблема - я даже не понимаю как спросить у гугла про такое.

Подскажите пожалуйста! Заранее большое спасибо!

 

b707
Offline
Зарегистрирован: 26.05.2017

Считываете значение высоты, запоминаете. Потом снова считываете - и сравниваете с запомненным. Если новое больше старого - высота растет, играем одну мелодию. Если новое меньше - высота падает, играем другую мелодию. После этого запоминаем текущее значение и цикл повторяется.

Вся программа - один цикл и два оператора if

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
gagatun
Offline
Зарегистрирован: 31.05.2021

b707 пишет:

Считываете значение высоты, запоминаете. Потом снова считываете - и сравниваете с запомненным. Если новое больше старого - высота растет, играем одну мелодию. Если новое меньше - высота падает, играем другую мелодию. После этого запоминаем текущее значение и цикл повторяется.

Вся программа - один цикл и два оператора if

Спасибо огромное! Есть ещё проблема. Если с 3 вывода ардуинки я назначаю его выходом, то пищалка начинает орать, независимо от того, использую ли я функцию tone().

Существует способ открыть этот вывод, покричать звук и потом снова закрыть наглухо, чтобы пищалка не орала?

ua6em пишет:

параплан?

Так точно! Для параплана это дело, чтобы дядя понимал набирает высоту или снижается.

 

 

b707
Offline
Зарегистрирован: 26.05.2017

gagatun пишет:

Есть ещё проблема. Если с 3 вывода ардуинки я назначаю его выходом, то пищалка начинает орать, независимо от того, использую ли я функцию tone().

покажите код

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

gagatun пишет:

параплан

можно у Андрея Лысенко (по ссылке что приводил) спросить, что использует, у него всё по фэншую и время автономной работы очень приличное, точно более 8 часов

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

gagatun пишет:

 Есть ещё проблема. Если с 3 вывода ардуинки я назначаю его выходом, то пищалка начинает орать, независимо от того, использую ли я функцию tone().

А буззер, случайно, не активный ли? Проверить просто - если при подаче напряжения напрямую на контакты пищалки она пищит, значит активная. Ей никакой tone() не нужен, но и частотой звука управлять не получится

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

v258 пишет:

А буззер, случайно, не активный ли? Проверить просто - если при подаче напряжения напрямую на контакты пищалки она пищит, значит активная. Ей никакой tone() не нужен, но и частотой звука управлять не получится

Отнюдь.

Если запитать активный буззер от tone, можно подобрать очень интересные звуки.

svm
Offline
Зарегистрирован: 06.11.2016

andriano пишет:

v258 пишет:

А буззер, случайно, не активный ли? Проверить просто - если при подаче напряжения напрямую на контакты пищалки она пищит, значит активная. Ей никакой tone() не нужен, но и частотой звука управлять не получится

Отнюдь.

Если запитать активный буззер от tone, можно подобрать очень интересные звуки.

Во, блин. Никогда такое в голову не приходило. А действительно можно получить что-то интересное или просто необычные?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Частотная модуляция ))) Да, это будет довольно необычно

sadman41
Offline
Зарегистрирован: 19.10.2016

Необычно, но слабоуправляемо, поэтому неинтересно. Но с ума посводить какого-нибудь обалдуя-студента - самое то.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

svm пишет:

Во, блин. Никогда такое в голову не приходило. А действительно можно получить что-то интересное или просто необычные?

Честно говоря, скорее - необычные. 

Но кому-то может показаться и интересными.

 

Кстати, на мой взгляд, у активной пищалки получается довольно интересный короткий звук, если подать на нее питание на 5-10 мс. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

sadman41 пишет:
Необычно, но слабоуправляемо, поэтому неинтересно. Но с ума посводить какого-нибудь обалдуя-студента - самое то.

Ну почему же слабоуправляемое: управляется частотой, скважностью, а также функцией изменения частоты от времени.

gagatun
Offline
Зарегистрирован: 31.05.2021

b707 пишет:

gagatun пишет:

Есть ещё проблема. Если с 3 вывода ардуинки я назначаю его выходом, то пищалка начинает орать, независимо от того, использую ли я функцию tone().

покажите код

 

Вот если просто даже так сделать, то спикер пищит не переставая:

const int buzzer = 3;

void setup() 
{

  pinMode(buzzer, OUTPUT);

}

void loop() 
{

  

}

Если даже использовать функцию tone() или функции analogWrite(pin, value) для управления ШИМ, то после выполнения всех этих функций писк продолжается.

Если убрать из кода pinMode(buzzer, OUTPUT); - он перестает постоянно пищать.

Как я понимаю, он не пищит, когда вывод 3 внутри контроллера закрывается резистором. Возможно такое делать каждый раз при использовании спикера, чтобы он пищал только тогда когда нужно?

Спикер вот такой - 

sadman41
Offline
Зарегистрирован: 19.10.2016

andriano пишет:

sadman41 пишет:
Необычно, но слабоуправляемо, поэтому неинтересно. Но с ума посводить какого-нибудь обалдуя-студента - самое то.

Ну почему же слабоуправляемое: управляется частотой, скважностью, а также функцией изменения частоты от времени.


Хорошо, малопредсказуемое. Какой у неё звук на выходе будет - зависит от десятка факторов, но не от пользователя.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

gagatun пишет:

Вот если просто даже так сделать, то спикер пищит не переставая:

const int buzzer = 3;

void setup() 
{

  pinMode(buzzer, OUTPUT);

}

void loop() 
{

  

}

Если даже использовать функцию tone() или функции analogWrite(pin, value) для управления ШИМ, то после выполнения всех этих функций писк продолжается.

Если убрать из кода pinMode(buzzer, OUTPUT); - он перестает постоянно пищать.

Как я понимаю, он не пищит, когда вывод 3 внутри контроллера закрывается резистором. Возможно такое делать каждый раз при использовании спикера, чтобы он пищал только тогда когда нужно?

сразу после 

pinMode(buzzer, OUTPUT);

вставьте

digitalWrite(buzzer, HIGH);

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

sadman41 пишет:

Хорошо, малопредсказуемое. Какой у неё звук на выходе будет - зависит от десятка факторов, но не от пользователя.

Этот фактор всего один и имя ему - программист.

А от пользователя в любой программе мало что зависит.

sadman41
Offline
Зарегистрирован: 19.10.2016

Как пожелаете. В бессмысленный спор о неизвестно чем вступать желания не имею. Мой экземпляр плавает по звуку даже просто при замкнутом на питание входе.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Признаю свою неправоту: от двух факторов - экземпляра буззера и программиста.

gagatun
Offline
Зарегистрирован: 31.05.2021

andriano пишет:

gagatun пишет:

Вот если просто даже так сделать, то спикер пищит не переставая:

const int buzzer = 3;

void setup() 
{

  pinMode(buzzer, OUTPUT);

}

void loop() 
{

  

}

Если даже использовать функцию tone() или функции analogWrite(pin, value) для управления ШИМ, то после выполнения всех этих функций писк продолжается.

Если убрать из кода pinMode(buzzer, OUTPUT); - он перестает постоянно пищать.

Как я понимаю, он не пищит, когда вывод 3 внутри контроллера закрывается резистором. Возможно такое делать каждый раз при использовании спикера, чтобы он пищал только тогда когда нужно?

сразу после 

pinMode(buzzer, OUTPUT);

вставьте

digitalWrite(buzzer, HIGH);

Это не поменяло ничего, если я пишу

const int buzzer = 3;

void setup() 
{

pinMode(buzzer, OUTPUT);
digitalWrite(buzzer, HIGH);

}


void loop() 
{

tone(buzzer, 6500, 500);
delay(9000);

}

То звук с частотой 6500 пищит 500 мс, а потом 9 секунд спикер просто орет одним звуком и так по кругу.

Спикер подключен таким образом: VCC - питания от литиевой батареи, S - 3 пин ардуины, GND - земля.

От этой же батареи через вход RAW питается и ардуина

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вот что больше всего раздражает, когда вместо того, чтобы поблагодарить за совет, мигом изменяют условия задачи.

В исходнике, опубликованном в посте №13, предложенная мной строчка решает проблему?

sadman41
Offline
Зарегистрирован: 19.10.2016

Через 500мс после tone() ставьте HIGH на выходе. Управление-то инверсное.

gagatun
Offline
Зарегистрирован: 31.05.2021

andriano пишет:

Вот что больше всего раздражает, когда вместо того, чтобы поблагодарить за совет, мигом изменяют условия задачи.

В исходнике, опубликованном в посте №13, предложенная мной строчка решает проблему?

Прошу прощения, я не хотел никого обидеть! Я вам очень благодарен, после работы все проверю и отпишусь.

 

sadman41 пишет:
Через 500мс после tone() ставьте HIGH на выходе. Управление-то инверсное.

 

После работы проверю, спасибо!