LABA 120 - Mit App inventor 2 * Управляем андроидом с андроида по кислороду
Омск, начало 28-3-2018
по кислороду. Иногда можно услышать - а слышат все - например,
такое: "Один-четыре-три! Слышат эти крики не только на всей тюрьме,
но и на продолах. Могут ворваться нехорошие люди, устроить шмон дороги,
репрессии учинить. Поэтому долг человека на пике - у дверей - чутко слушать движение на
продоле и предупреждать тех, кто на дороге, например, словами "контора"
или "рояль". А вы говорите - закон яровой, он не для этого
Это при капитализме человек управляет человеком, а при социализме было наоборот
Управляем андроидом с андроида по кислороду
методом сжатия и расширения расстояния между молекулами газа
заполняющего пространства между андроид девайсами
На самом деле, путем генерации и измерения звуковых частот
или проще говоря свиста определенных тонов
Здесь только основные принципы, программа для тестирования
возможностей, ну и ее исходник естественно
http://aeha.narod.ru/appinv/oxigen/
Программа для тестирования на Yandex Store - Sound Line
Есть один чудесный - " App Inventor 2 Extensions" SoundAnalysis
для работы со звуком, может определять частоту звука по микрофону
работает стабильно от 200 до 800 герц
Частотомер из него не получится, Ибо меряет он не все частоты
а только особо любимые
Назначим им условные значения
00-380 | 01-390 | 02-400 | 03-410 |
04-421 | 05-432 | 06-444 | 07-457 |
08-470 | 09-484 | 10-500 | 11-666 |
12-695 | 13-727 | 14-761 | 15-800 |
для управления по кислороду этого достаточно
с избытком, на дальность связи сильно влияет качество
динамика передающего устройства
Обзор исходника
и так что тут у насЭто обработчик кнопки 0, всего их 16
событие Call.Player1.stop - останавливает плеер не важно играет он или нет
Set.Player1.Source="00-380.MP3" - присваивает плееру звук из соответствующего файла
событие Call.Player1.Start - пиликает этот звук
И так 16 разных тонов для разных кнопок
When Screen1.initialize
Этот обработчик события срабатывает при запуске программы на Andriod Device
на телефоне если кто не въехал здесь -
событие Call.SoundAnalysis1.StartListening - подключает компонент
на прослушивание микрофона
Set Clock1 - и так три раза , здесь не учавствут, можно не вставлять, приделал по привычке
Сам анализатор звука "App Inventor 2 Extensions" SoundAnalysis
пишу много лишних слов для поисковика, так что не серчайте
Этот обработчик When SoundAnalysis1.GotPitch
срабатывает, когда понимает какой частоты звук он слышит
эту частоту он записывает в локальную переменную pitchResult
значение которой в свою очередь записывается в глобальную переменную
global col которая затем передается в текстовый Label на экран телефона
"Set l_inp.Text" через блок "Format as decimal number" предназначенный здесь
для форматирования числа в красивый вид, но .. чёто не заметил красоты
далее блок IF сравнивает глобальную переменную "global col" с не
менее глобальной переменной "global POV" на предмет неравенства, сразу хочу признаться
все названия переменных вымышленные, и совпадения с реальными именами случайны.
зачем вообще это блок IF ?
дело в том что компонент "App Inventor 2 Extensions" SoundAnalysis
работает весьма шустро, и успеет кучу раз замерить частоту сигнала
и передать это на экран, Оно нам надо?
стало быть после первого измерения, значения "global col" и "global POV"
сравняются, и этот блок будет игнорироваться , до смены частоты
Не практично, но ведь тут только рассказ о принципах
По концовке этих логических цепочек
Методом "Call color"
Мы переносимся в процедуру, как ни странно, под название "color"
о выборе имен было выше
Процедура Color
Эта процедура децл длинноватая , но состоит из повторяющийся блоков
так что целиком ее расписывать нет необходимости
в самом ее начале вызывается процедура "Call gas"
которая красит все 16 меток лабел в серый цвет
Set LF.BackGroundColor- Set LF.BackGroundColor
глобальной переменной "global c" - правда изящные имена?
присваивается пустая строка.
далее блок IF проверяет "global col" и если значение укладывается
в нужный диапазон то есть в данном месте, больше 375 и меньше 385
метка "LF.BackGroundColor" окрашивается в красный цвет
что мы и видим на экране сотового.
глобальной переменной "global c" в данном случае присваивается значение 0 или "0"
в "Mit App Ainventor 2" тип переменной значения не имеет
проверив таким образом частоту сигнал 16 раз, программа решает какую цифру она получила
в метку "l_key.Text" выводится "код последней клавиши"
а в метку "L_STR.Text" блоком "Join" собирается строка из нажатых клавиш
которую можно будет использовать для организации какого либо протокола обмена
Ну и в конце процедуры, "global col" ставится в ноль, сейчас вижу конструкция ненужная
да ладно
Кнопка CLR
Кнопка предназначена для очистки "L_STR.Text"
путем присваивания ей пустой строки
Кнопка EXIT
для выхода из программы,
Событие "Call SoundAnalysis1.StopListenig"
останавливает прослушивание микрофона
А блок "close application" завершает программу
Тут видимо нужны пояснения
Телефоны разные и ведут себя по разному, тот что использовался в данном проекте
и вы возможно видели на видео, называется Alcatel 4034D
Так вот на нем погасание экрана не гарантирует ухода в полную спячку
Замечено что он нагревается, а батарея разражается.
что свидетельствует о тайной, бурной жизни девайса.
И как следствие, появилась привычка,
ставить кнопку "Exit" на программы
Как обычно тут можно скачать
Исходник проекта - Для App Inventor 2
Скомпилированный APK - кому влом парится с исходником
И программу генератор звука для ПК
SOCIAL