Привет! Сегодня доработаем программу для обработки сигналов с ИК пульта. Подключим rgb светодиод к схеме и будем управлять Ардуино ДУ пультом.
В прошлый раз мы делали обзор на приемник ик сигналов для Ардуино. В этом проекте мы будем его использовать, поэтому посмотрите тот пост, если пропустили.
Программа
А чтобы управлять светодиодом нам понадобиться доработать стандартную программу приема ИК сигнала.
Заведем нужные переменные для контактов rgb светодиода и для состояние каждого цвета. А так же, нам будет нужна переменная для сохранения состояние нажатой на пульте кнопки.
Программирование dmx пульта
int RLED = 3; int GLED = 5; int BLED = 6; int red = 0; int green = 0; int blue = 0; int oldCode = 0;
В функции setup() настроим контакты на вывод
void setup() < pinMode(LED_BUILTIN, OUTPUT); pinMode(RLED, OUTPUT); pinMode(GLED, OUTPUT); pinMode(BLED, OUTPUT); Serial.begin(115200); IrReceiver.enableIRIn(); // Start the receiver >
В функции loop() будем считывать сигналы от пульта. И передавать в нашу функцию принятое значение.
void loop() < if (IrReceiver.decode()) < Serial.println(); SetLED( IrReceiver.results.value ); IrReceiver.resume(); // Receive the next value >>
И теперь осталось написать функцию для обработки кодов.
Во-первых, выведем все коды, которые принимает модуль. Таким образом мы узнаем код, соответствующий нажатию каждой кнопки. Чтобы использовать его в программе.
Во-вторых, код -1 отвечает за повтор предыдущего кода. То есть, если нажать на кнопку и удерживать ее, то код будет -1. Нам понадобиться этот код, чтобы запрограммировать кнопки уменьшения и увеличения яркости на пульте.
Так же, в этом случае, нам нужно сохранить состояние нажатой кнопки до повтора, сохраним ее в конце функции в переменную oldCode.
И наконец, запрограммируем каждый код от пульта для включения своего цвета на RGB светодоиде.
void SetLED( int code ) < Serial.print(«CODE: t»);Serial.println(code); switch (code) < case -1: SetLED(oldCode); break; case -16321: red = 255; green = 255; blue = 255; break; case 16575: red = 0; green = 0; blue = 0; break; case 8415: red = 255; green = 0; blue = 0; break; case -24481: red = 0; green = 255; blue = 0; break; case 24735: red = 0; green = 0; blue = 255; break; case 10455: red = 127; green = 127; blue = 0; break; case -22441: red = 0; green = 127; blue = 127; break; case 26775: red = 127; green = 0; blue = 127; break; case -32641: red—;green—;blue—; break; case 255: red++;green++;blue++; break; >if( code != -1 ) analogWrite(RLED, red = constrain(red, 0, 255)); analogWrite(GLED, green = constrain(green, 0, 255)); analogWrite(BLED, blue = constrain(blue, 0, 255)); Serial.print(«RED: t»);Serial.println(red); Serial.print(«GREEN: t»);Serial.println(green); Serial.print(«BLUE: t»);Serial.println(blue); >
Полный текст программы
#include int RLED = 3; int GLED = 5; int BLED = 6; int red = 0; int green = 0; int blue = 0; int oldCode = 0; #if defined(ESP32) int IR_RECEIVE_PIN = 15; #else int IR_RECEIVE_PIN = 11; #endif IRrecv IrReceiver(IR_RECEIVE_PIN); // On the Zero and others we switch explicitly to SerialUSB #if defined(ARDUINO_ARCH_SAMD) #define Serial SerialUSB #endif void setup() < pinMode(LED_BUILTIN, OUTPUT); pinMode(RLED, OUTPUT); pinMode(GLED, OUTPUT); pinMode(BLED, OUTPUT); Serial.begin(115200); #if defined(__AVR_ATmega32U4__) || defined(SERIAL_USB) || defined(SERIAL_PORT_USBVIRTUAL) delay(2000); // To be able to connect Serial monitor after reset and before first printout #endif // Just to know which program is running on my Arduino IrReceiver.enableIRIn(); // Start the receiver >void SetLED( int code ) < Serial.print(«CODE: t»);Serial.println(code); switch (code) < case -1: SetLED(oldCode); break; case -16321: red = 255; green = 255; blue = 255; break; case 16575: red = 0; green = 0; blue = 0; break; case 8415: red = 255; green = 0; blue = 0; break; case -24481: red = 0; green = 255; blue = 0; break; case 24735: red = 0; green = 0; blue = 255; break; case 10455: red = 127; green = 127; blue = 0; break; case -22441: red = 0; green = 127; blue = 127; break; case 26775: red = 127; green = 0; blue = 127; break; case -32641: red—;green—;blue—; break; case 255: red++;green++;blue++; break; >if( code != -1 ) analogWrite(RLED, red = constrain(red, 0, 255)); analogWrite(GLED, green = constrain(green, 0, 255)); analogWrite(BLED, blue = constrain(blue, 0, 255)); Serial.print(«RED: t»);Serial.println(red); Serial.print(«GREEN: t»);Serial.println(green); Serial.print(«BLUE: t»);Serial.println(blue); > void loop() < if (IrReceiver.decode()) < Serial.println(); SetLED( IrReceiver.results.value ); IrReceiver.resume(); // Receive the next value >>
Заключение
Как запрограммировать пульт от приставки ZALA
Таким образом мы написали программу для обработки ИК сигналов от пульта ДУ. Естественно, вместо rgb светодиода мы можем управлять любым другим оборудованием, с помощью управляющих сигналов от пульта. Хотя для света нужна прямая видимость между приемником и источником. Поэтому, возможно, использование беспроводной радио связи, например bluetooth, будет более предпочтительнее.
Источник: arcadepub.ru
Идея
Купив зеркальный фотоаппарат, через некоторое время осознаешь потребность в ручной настройке, штативе и бесконтактном спуске затвора, который осуществляется с помощью дополнительного оборудования, предлагаемого фирмой-производителем. Но, осознав, что в твоем Android-телефоне есть ИК, которым можно удаленно спустить затвор, идешь в Google Play. Там поиск по «саmera remote» сразу выдает массу приложений, среди которых есть подходящие.
Скачиваешь, пробуешь — да, работают, но… удобство использования и интерфейс оставляют желать лучшего. Кроме перечисленного, в моей модели фотоаппарата сильно не хватает функции подсчета экспопары для съемки ночью. Поэтому решил реализовать собственное приложение, чтобы понять, что такое Android, и с чем его едят.
Тестирование ИК на телефоне
Реализация приложения, которое выполняет бесконтактный спуск затвора, заняла не больше одного часа. За это время было создано Activity с одной кнопкой и найден способ отправки сигналов на камеру, который выглядит примерно так:
ConsumerIrManager consumerIrManager = (ConsumerIrManager) this.getSystemService(Context.CONSUMER_IR_SERVICE); int frequency = 38400; int[] pattern = new int[]< 1, 105, 5, 1, 75, 1095, 20, 60, 20, 140, 15, 2500, 80, 1 >; consumerIrManager.transmit(frequency, pattern);
Что только что произошло? Была создана «программа», выполняющая функцию устройства, которое мне хотела продать фирма Nikon за 30$.
Я думал «Что может быть проще, чем реализация одной кнопки?», но не тут-то было.
Анализ конкурентов привел к длинному списку их возможностей и недостатков. Приведу только основные.
- можно установить задержку перед первым снимком, длительность выдержки камеры в blub режиме, задержку между последующими снимками, количество снимков
- HDR режим (Bracketing) — съёмка нескольких кадров с разным значением выдержки
- срабатывание по звуку
- поддержка большого числа камер и устройств
- оставляющий желать лучшего дизайн и простота использования, или хороший дизайн, но мало возможностей
- работа в главном потоке
- сделать бесплатное и без рекламы приложение, которое не стыдно показать другим
- включить все возможности конкурентов
- реализовать калькуляторы экспопары и глубины резкости
- добавить отображение времени заката и рассвета (золотого часа)
- обеспечить работу в фоновом процессе
- подключить звуковые уведомления
- разработать наиболее быстрый и интуитивный дизайн для основных возможностей
- не забыть о «вау-эффекте»
Некоторые задачи выходят за рамки пульта ДУ, но мне хотелось попробовать как можно больше возможностей Android.
Реализация или «Шагая по подводным минам»
Работа с графикой
При разработке я придерживаюсь философии: «Больше векторной, меньше растровой графики». Поэтому на весь проект потребовалось «две» растеризированных картинки — иконка приложения и иконка уведомления (не считая изображений для Google Play). Все остальное — бесплатные стоковые шрифты и шрифты-иконки. Благодаря этому, интерфейс выглядит одинаково качественно на большинстве устройств, независимо от разрешения экрана.
В целях достижения максимального быстродействия приложения, я обычно отказываюсь от анимации. Но ее отсутствие делало работу приложение неочевидной для конечного пользователя. Поэтому, и для достижения «вау-эффекта» анимация присутствует. В связи с тем, что взаимодействие с приложением происходит вокруг одной кнопки, она была максимально стилизована, и процесс съемки отображен вокруг нее.
После работы с WPF и Silverlight, мне показалось, что Android содержит очень скудный набор графических примитивов для построения независимых векторных объектов (объекты, которые сами знают как перерисовывать себя — без необходимости рисовать их на канве вручную). Поэтому пришлось сделать несколько итераций реализации кольцевого ProgressBar-а.
Странность: Если на некоторых устройствах вызывать у объекта ClipDrawable функцию setRotation() с углами отличными от 0, 90, 180,…, в котором есть другие графические объекты, они становятся полностью видимыми вне зависимости от ClipDrawable.setLevel().
Работа с уведомлением
Хотелось создать уведомление, и в нем менять состояние прогресса съемки. Но вместо этого приходится постоянно пересоздавать его, из-за ограничений Android. Скорость, с которой меняется время, оставшееся до следующего срабатывания, заставляет делать это часто, что привело к невозможности использовать иконку с большим разрешением.
Работа с аппаратным обеспечением
Разрабатывать такого типа приложение в стандартном эмуляторе сложно и долго, в более шустрых аналогах — просто сложно. Наличие лопаты Samsung S4, позволило проще работать с аппаратным обеспечением устройства. На эмуляторах добиться поддержки ИК не удалось, а с микрофоном были очень большие тормоза, после которых уровень звука вел себя не менее непредсказуемо.
После релиза, захотелось доработать другие, более загадочные способы «нажатия на кнопку», для простых смертных пользователей. Идея заключалась в спуске затвора фотоаппарата не касаясь телефона, и в наилучшем случае с выключенным дисплеем.
Сценарий демонстрации: зафиксировать камеру вдалеке и положить «выключенный» телефон перед собой, после чего, от «магического» жеста рукой срабатывает камера. Для большего эффекта можно включить вспышку. Проверено, смотрится с удивлением и восклицанием «Вау!» (последнее зависит от эмоциональности конкретного человека).
Первое, что пришло в голову — использовать, продемонстрированные впервые Air Gestures в Samsung S4. Поиск SDK привёл к разочарованию: Devices with Android 4.3 Jelly Bean (API level 18) or higher support Gesture except Galaxy S4 due to a hardware issue. Но, я вспомнил про акселерометр и, позднее, про освещенность.
Вначале реализовал срабатывание при переходе устройства с вертикального положения в горизонтальное. Все работало отлично, пока не отключил телефон от компьютера. При выключении экрана акселерометр «засыпает», т.е. сигналы о изменении положения устройства в пространстве перестают генерироваться. Устранить этот эффект ни работой в фоновой службе, ни настройками энергосбережения не удалось.
Реализовал срабатывание на резкое изменение освещенности. Этот сенсор, не «засыпает» при выключенном дисплее, но количество генерируемых сигналов заметно уменьшается. Именно благодаря наличию этого сенсора в устройстве, написанный ранее сценарий работает.
Была идея подключить камеры для распознавания, например, подмигивания. Но, найти вменяемую бесплатную библиотеку для этого не смог.
Процесс в целом
В большинстве случаев, платформа Android ведет себя вполне ожидаемо. Не возникло проблем при определении местоположения, получении данных с сервера прогноза погоды, реализации жизненного цикла приложения, использовании фоновой службы и работе с базой данных.
IDE
В связи с работой, пришлось сменить Visual Studio на Eclipse, что периодически бесит и по сей день. Но, для разработки приложения установил Android Studio с надеждой, что «Studio» в названии, что-то да значит. С первых созданных методов и переменных понял, что это то, чего я так ждал: проверка правописания кода, умный autocomplete, огромное количество подсказок и многое другое. Спасибо разработчикам за качественный продукт!
Публикация
Создал аккаунт, заплатил взнос, прочитал рекомендации, настроил релиз-версию, создал подписанное приложение, подготовил описание на нескольких языках (EN, RU, UA, NO), сделал фотографии приложения и выложил как бета-версию.
Неожиданностью стало обязательное изображение для Google Play размером 1024х500, хотя в статьях писали, что это «не помешает».
При компиляции релиз-версии использовался ProGuard, который нарушил работу определенной части кода, основанного на названиях классов, которые он успешно обфусцировал. Проблема была обнаружена не сразу, поскольку при запуске релиз-версии, параметр «debuggable» равен «false». Ошибки выскакивали, обрабатывались и всё работало дальше.
В связи с тем, что приложение для микрорынка, я не планировал писать статью на Хабр, если бы не проблемы с ИК. Вначале писал на форумы для фотографов, но результат — лишь бан. В основном помог youtube. После чего появились первые реальные пользователи, а с ними и проблемы.
Детально про мучения работу с ИК-портом
Возвращаясь к коду, для отправки импульсов:
ConsumerIrManager consumerIrManager = (ConsumerIrManager) this.getSystemService(Context.CONSUMER_IR_SERVICE); int frequency = 38400; int[] pattern = new int[]< 1, 105, 5, 1, 75, 1095, 20, 60, 20, 140, 15, 2500, 80, 1 >; consumerIrManager.transmit(frequency, pattern);
Все было хорошо, пока не оказалось, что поддержка ИК, появилась в Android только начиная с API версии 19. Что было до этого?
Было выпущено достаточно много устройств с ИК, для управления которыми, производители либо создавали свои библиотеки (HTC OpenSense IR API и LG QRemote IR SDK) или публиковали пример кода для работы с их ИК (Samsung). Что произошло после? Вышли новые версии, и способ передачи сигналов стандартизированный в API 19 поменялся.
Удалось заставить работать приложение с ИК портами на Samsung-ах с версиями Android KitKat и Lollipop. После многих попыток удаленного тестирования с HTC One M8, понял, что самому реализовать поддержку других устройств будет очень сложно. Поэтому, я создал проект на GitHub-е, который может скачать любой желающий: AndroidInfraRed.
Немножко скучной теории
Для дистанционного управления устройством с помощью ИК, вам необходимы: передатчик и последовательность сигналов, которую необходимо отправить. В моем случае, устройство — Nikon D7100, передатчик — Samsung S4.
Последовательность задается двумя параметрами: частотой (Hertz) и паттерном, который представляет собой некую временную последовательность наличий/отсутствий сигнала заданной частоты.
- Frequency: 40000
- Pattern: 125, 100, 150, 75, .
- Frequency: 40000
- Pattern: 5, 4, 6, 3, .
Подробно о проекте
- Библиотеку для работы с ИК
- MainActivity с одной кнопкой для тестирования
- Модуля логирования, для простой возможности отобразить сообщения либо на консоли, либо в EditText, либо отключить лог вообще
- Модуля паттернов, который позволяет адаптировать последовательности сигналов под конкретный тип устройства
- Модуля определения передатчика, который анализируя устройство, возвращает способ, с помощью которого могут быть переданы сигналы
- Модуля передатчиков, в котором реализуются способы отправки сигналов
- Класса InfraRed, объединяющего работу модулей
Как это работает
Описание строк кода из MainActivity.java
1. Выбираем один из трёх способов логирования
// Log messages print to EditText EditText console = (EditText) this.findViewById(R.id.console); log = new LogToEditText(console, TAG); log.log(«Hello, world!»); // Log messages print with Log.d(), Log.w(), Log.e() // LogToConsole log = new LogToConsole(TAG); // Turn off log // LogToAir log = new LogToAir(TAG);
По умолчанию выбран вывод текста на экран устройства
2. Создаем объект класса InfraRed
infraRed = new InfraRed(this, log);
Для этого необходимо передать Context и Logger
3. Инициализируем передатчик
TransmitterType transmitterType = infraRed.detect(); infraRed.createTransmitter(transmitterType);
Функция «detect()» возвращает одно из значений перечисления TransmitterType. Возможные варианты: Actual, HTC, LG и Undefined. В случае Actual, для передачи сигналов будет использоваться класс ConsumerIrManager предоставляемый Android. Если HTC или LG — будут использованы соответствующие SDK, если Undefined то — «пустая» реализация.
4. Инициализируем последовательности сигналов
PatternConverter patternConverter = new PatternConverter(log); List patterns = new ArrayList<>(); // Nikon D7100 v.1 patterns.add(patternConverter.createTransmitInfo(38400, 1, 105, 5, 1, 75, 1095, 20, 60, 20, 140, 15, 2500, 80, 1)); // Nikon D7100 v.2 patterns.add(patternConverter.createTransmitInfo(38400, 77, 1069, 16, 61, 16, 137, 16, 2427, 77, 1069, 16, 61, 16, 137, 16));
С помощью класса PatternConverter, инициализируем сигналы для устройств, которыми хотим управлять.
Важно! Функция «createTransmitInfo(int frequency, int… pulseCountPattern)», принимает сигнал в виде последовательности циклов (как в Android = 4.4.3). Что бы перейти от микросекунд к циклам, необходимо каждый элемент паттерна умножить на частоту и поделить на миллион (количество микросекунд в секунде). Это обратная операция, к той, которая конвертирует заданные последовательности под Android >= 4.4.3.
5. Передаем последовательность сигналов на устройство
TransmitInfo transmitInfo = patterns[random.nextInt(patterns.length)]; infraRed.transmit(transmitInfo);
В конкретном примере, посылаем заданные сигналы в случайном порядке.
Комментарии
Проект AndroidInfraRed — почти готовое решение для дистанционного управления устройствами с помощью ИК. Единственное чего не хватает — протестировать и наладить работу с HTC, LG, Sony… Я очень надеюсь, что на Хабре найдутся люди со смартфонами с ИК, которые помогут данному проекту, и тем, кто в будущем захочет добавить в свое приложение работу с ИК.
Результат
В результате получилось создать приложение, которое покрывает все мои потребности для удаленного управления камерой и процесса фотографирования в целом. Жаль, что преимущества данного приложения могут оценить лишь обладатели Samsung.
- Java
- Разработка под Android
Источник: habr.com
Универсальный инфракрасный пульт ДУ на основе Arduino и приложения для Android
Наверняка у многих из вас в доме есть несколько инфракрасных пультов дистанционного управления (ДУ) различными электронными устройствами. Иногда пользоваться всеми ими бывает затруднительно и хотелось бы иметь один универсальный пульт, который смог бы заменить все эти пульты. В этой статье мы рассмотрим проект превращения смартфона на операционной системе Android в универсальный инфракрасный пульт дистанционного управления на основе платы Arduino.
Необходимые компоненты
- Плата Arduino Uno (купить на Aliexpress).
- Приемник TSOP-IR (1838T) (купить на Aliexpress).
- Инфракрасный светодиод (купить на Aliexpress).
- Модуль Bluetooth (HC05) (купить на Aliexpress).
- Смартфон или другое устройство с операционной системой Android.
- Источник питания.
Принцип работы универсального пульта
Многие из вас для управления телевизором вынуждены использовать 2 пульта ДУ: один для управления телевизором и один для управления телевизионной приставкой. В этом проекте мы объединим эти 2 пульта на основе смартфона чтобы с его помощью можно было управлять телевизором в полной мере, не задействуя дополнительные пульты.
Используя плату Arduino Uno достаточно просто в этом универсальном пульте ДУ реализовать процессы кодирования и декодирования нужных сигналов. Для удобства изготовления подобного устройства целесообразно сконструировать самодельный шилд (плату расширения) для платы Arduino как показано на следующем рисунке. Шилд будет состоять из приемника (ресивера) TSOP IR 1838T, инфракрасного светодиода и Bluetooth модуля (HC-05).
Вы можете либо изготовить приведенный шилд, либо просто соединить эти компоненты с платой Arduino Uno как показано на приведенной ниже схеме устройства.
Большинство инфракрасных устройств работают на частоте 38 кГц, поэтому мы и выбрали для нашего проекта 1838T. При этом рассматривая принципы работы устройств с инфракрасной связью следует помнить о том, что в них нет логических единиц и нулей в прямом понимании этих понятий. И единица, и ноль в этих устройствах кодируются набором специальных импульсов как показано на следующем рисунке. Сущность этих процессов кодирования описана в NEC протоколе.
Принцип работы проектируемого нами универсального пульта ДУ будет заключаться в следующем. Сначала смартфон с помощью приложения для Android передает сигнал плате Arduino при помощи технологии Bluetooth, далее Arduino принимает его при помощи приемника TSOP-IR (1838T) и анализирует его. Затем Arduino передает команду инфракрасному светодиоду чтобы он мигал по определенному алгоритму (шаблону), зависящему от того, какая кнопка нажата в приложении для Android в смартфоне. Этот сигнал принимается телевизором или телевизионной приставкой, которые выполняют закодированную в сигнале команду.
Но перед осуществлением этого проекта мы должны декодировать сигналы с пультов ДУ, которые мы хотим заменить. Этот процесс рассмотрен далее в статье.
Работа схемы
Схема устройства представлена на следующем рисунке.
Как можно видеть, схема достаточно проста и не должна вызвать затруднений в сборке даже у начинающего радиолюбителя.
Декодирование инфракрасных сигналов управления с помощью Arduino
Плата Arduino в рассматриваемом проекте выполняет сразу две функции: одна заключается в декодировании инфракрасных сигналов от пультов ДУ, а вторая — в управлении инфракрасным излучателем.
Для декодирования сигналов от инфракрасных пультов ДУ мы будем использовать заголовочный файл от Ken Shirriff’s IRremote, который значительно упрощает эти процессы. Для работы с этим заголовочным файлом вы должны сделать следующую последовательность действий:
- Скачать эту библиотеку инфракрасной связи по ссылке https://github.com/z3t0/Arduino-IRremote.
- Распаковать ее и поместить ее в папку библиотек Arduino (Arduino ‘Libraries’ folder). Затем переименовать извлеченную из архива папку в IRremote.
- Затем необходимо загрузить приведенный код в плату Arduino, установить собранный шилд поверх платы и поместить напротив приемника TSOP IR пульт ДУ, сигналы которого мы хотим декодировать. Затем откройте монитор последовательного порта (serial monitor) в Arduino IDE и нажмите желаемую кнопку на пульте ДУ. После этого вы увидите в serial monitor’е информацию, которая включает тип кода, его значение и количество бит в нем как показано на нижеприведенных рисунках.
Текст программы для декодирования сигналов от инфракрасных пультов ДУ:
#include
const int RECV_PIN = 6;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
<
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
irrecv.blink13(true);
>
void loop() <
if (irrecv.decode(
if (results.decode_type == NEC) <
Serial.print(«NEC «);
> else if (results.decode_type == SONY) <
Serial.print(«SONY «);
> else if (results.decode_type == RC5) <
Serial.print(«RC5 «);
> else if (results.decode_type == RC6) <
Serial.print(«RC6 «);
> else if (results.decode_type == UNKNOWN) <
Serial.print(«UNKNOWN «);
>
Serial.print(» «);
Serial.print(results.value, HEX);
Serial.print(» «);
Serial.println(results.bits);
irrecv.resume(); // Receive the next value
>
>
После того как вы сумеете это реализовать аккуратно запишите все значения кодов и другую представленную информацию для всех кнопок со всех пультов ДУ, которые вы хотите реализовать в вашем универсальном пульте. Таким образом, вы создадите своеобразную базу данных кнопок и соответствующих им кодов.
Представленный пример программы для декодирования сигналов инфракрасных пультов ДУ был взят из подпапки ‘examples’ (примеры) папки IRremote (которую мы скачали по вышеприведенной ссылке). Также в подпапке ‘examples’ вы можете при желании изучить и другие примеры работы с устройствами инфракрасной связи.
Настройка приложения для Android для создания инфракрасного передатчика
В качестве приложения Android для нашего универсального инфракрасного пульта мы будем использовать приложение MIT’s APP inventor-2, но вы можете использовать любое другое подобное приложение. А если вы еще и профессионал в программировании на Android, то вы можете достигнуть гораздо лучших результатов чем рассмотренные в нашем проекте. Все, что нам понадобится, это создать несколько кнопок в приложении.
При создании кнопок в этом приложении старайтесь давать кнопкам осмысленные названия, чтобы они по смыслу соответствовали кнопкам пультов ДУ, которые вы будете замещать своим пультом. Также следите за тем текстом (набором символов), который будет передаваться при нажатии каждой кнопки. Также удостоверьтесь в тем, что вы обеспечиваете правильный адрес для своего модуля Bluetooth HC-05. На следующем рисунке показан примерный вид экрана приложения, который вы должны создать.
![]() |
![]() |
Вам целесообразно выполнить следующую последовательность шагов.
Шаг 1. Проследуйте по ссылке ai2.appinventor.mit.edu, или самостоятельно можете попытаться найти приложение MIT appinventor-2 в гугле. Регистрация в AI2 требует аккаунта в Google, поэтому если у вас нет такого аккаунта, то создайте его.
Шаг 2. После того как вы залогинитесь в ai2.appinventor.mit.edu с помощью своего аккаунта Google, вас перебросит на рабочую веб-страницу AI2, которая будет выглядеть примерно следующим образом:
Начните новый проект при помощи нажатия вкладки “Projects” вверху экрана и выберете там “Start New Project”. После этого вы увидите пустой экран, на котором вы можете разместить нужные вам кнопки и текст.
Для использования пакета с кнопками выберите вкладку “Button” в левом крае экрана под секцией “User Interface”. Просто перетащите любой пакет из меню слева и поместите его на рабочий экран. Аналогично текст можно поместить на рабочий экран с помощью пакета “Label”.
Шаг 3. После того как вы разместите на экране все необходимые вам кнопки и текстовые метки (labels) можно заняться кодом для этого приложения. Но перед этим необходимо выбрать пакет Bluetooth поскольку именно с помощью этой технологии вы будете связываться с Arduino.
Этот пакет не показывается сразу на экране потому что он расположен под “Non-visible Components” – это компоненты, которые не отображаются в графическом интерфейсе пользователя.
Шаг 4. На этом шаге вам предстоит формирование программного кода, в котором вы должны определить функции для всех компонентов, которые вы выбрали, и каким образом вы будете работать с ними.
Слева экрана вы увидите все пакеты, которые вы выбрали в графической секции (GUI section). Картинки сверху показывают все компоненты, которые содержатся в каждом использованном вами пакете. Также учтите, что адрес Bluetooth модуля будет нужен в текстовом формате.
Шаг 5. После того как вы завершите конфигурирование вашего приложения, нажмите на вкладку “Build” как показано выше и выберите вторую опцию. Это позволит скачать созданное вами приложение на компьютере в “.apk” формате. Затем просто передайте этот .apk файл на ваш телефон с Android и установите приложение там.
Исходный код программы
Прежде чем использовать приведенный ниже текст программы вы должны заменить в нем HEX коды (шестнадцатеричные коды) кнопок с пультов ДУ, которые вы хотите замещать, на свои – те, которые вы определили с помощью программы, приведенной в первой половине этой статьи.
Источник: microkontroller.ru