Управление arduino через android. Управление с андроида по wifi. Сферы применения модуля ESP8266

Вайбер на компьютер 04.03.2019
Вайбер на компьютер

Когда-нибудь задумывались о том, чтобы управлять любыми электронными устройствами с помощью смартфона? Согласитесь, управлять роботом или любыми другими устройствами с вашего смартфона было бы очень круто. Предлагаем простой урок для начинающих и чайников о том как с помощью Arduino через Bluetooth управлять смартфоном. Если вам после этого урока захочется познакомиться с Arduino поближе - вы можете найти книги о нём .

Устройства

Модуль - Bluetooth Module HC 05/06
Плата - Arduino
Светодиод (LED)
Резистор - 220Ω
Android-устройство

Программное обеспечение

Arduino IDE
Android Studio (на самом деле не нужно, т.к. приложение для Андроида вы найдете ниже)

Шаг 2. Как это работает

Обычно мы делаем этот шаг в конце, но, чтобы вы понимали к чему мы должны прийти - посмотрите на результат на этом промежуточном шаге. Также ниже мы опубликовали видео урока по шагам.

Шаг 3. Начинаем собирать схему

Цепь в нашем уроке настолько проста и мала, что нам нужно сделать всего несколько соединений:

Arduino Pins___________Bluetooth Module Pins
RX (Pin 0)___________________TX
TX (Pin 1)___________________RX
5V_________________________VCC
GND_______________________GND

Подключите минус светодиода к GND на Arduino, а плюс к контакту 13 через сопротивление 220 Ом - 1 кОм. В целом, на нашем рисунке ниже всё довольно наглядно.

Не подключайте RX к RX и TX к TX выходы Bluetooth к выходам Arduino, вы не получите никаких данных, здесь TX означает "передача", RX означает "прием".

Теперь нам нужно написать программу и загрузить её в наш Arduino. Если вы этого пока еще не умеете делать - скачайте книги . Код ниже именно то, что нам нужно загрузить в Ардуино.

/* Bluetooh Basic: LED ON OFF * Coder - Mayoogh Girish * Website - http://bit.do/Avishkar * Download the App: https://github.com/Mayoogh/Arduino-Bluetooth-Basic * This program lets you to control a LED on pin 13 of arduino using a bluetooth module */ char data = 0; //Variable for storing received data void setup() { Serial.begin(9600); //Sets the baud for serial data transmission pinMode(13, OUTPUT); //Sets digital pin 13 as output pin } void loop() { if(Serial.available() > 0) // Send data only when you receive data: { data = Serial.read(); //Read the incoming data and store it into variable data Serial.print(data); //Print Value inside data in Serial monitor Serial.print("\n"); //New line if(data == "1") // Checks whether value of data is equal to 1 digitalWrite(13, HIGH); //If value is 1 then LED turns ON else if(data == "0") // Checks whether value of data is equal to 0 digitalWrite(13, LOW); //If value is 0 then LED turns OFF } }

Шаг 5. Как происходит процесс

Модуль HC 05/06 работает по последовательному каналу связи. Андроид-приложение последовательно отправляет данные на модуль Bluetooth, когда вы нажимаете определенную клавишу. Bluetooth на другом конце получает данные и отправить на Arduino через TX-соединение модуля Bluetooth (RX-соединение Arduino) .

Код загруженный в Arduino проверяет полученные данные и сравнивает их. Если получена "1" - светодиод включается и выключается при получении "0". Откройте монитор последовательного порта и наблюдайте полученные данные.

Шаг 6. Приложение для Андроид-устройств

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

Как использовать приложение?

После того как мы подключились через Bluetooth - нам нужно скачать и установить приложение, которое при помощи смартфона 🙂 будет управлять нашим светодиодом на расстоянии. Скачать приложение вы можете бесплатно на сайте Амазон.ком. Подсоединяем смартфон к модулю Bluetooth HC 05/06:

  1. Включите модуль HC 05/0
  2. Ищем устройство
  3. Соединяемся с HC 05/06 введя дефолтный пароль "1234" или "0000" (четыре нуля).

После этого мы устанавливаем приложение на наш смартфон. Открываем его. Выбираем устройство - выбираем модуль Bluetooth из списка (HC 05/06). После успешного подключения нажмите кнопку ON для включения светодиода и кнопку OFF, чтобы выключить светодиод. Потом уже можно нажать кнопку "Отключить", чтобы отключиться от модуля Bluetooth.

Это было руководство для чайников и начинающих по подключению модуля Bluetooth с Arduino. Этот проект можно улучшить и поднять на более высокий уровень для, например, автоматизация дома через управление смартфоном, управляемый робот и многое другое.

В этой статье информация о том как собрать свой танк, оснащенный Web Камерой и управляемый посредством Wifi роутера.

Необходимые материалы:

  1. Web Camera
  2. Роутер TP-Link TL-MR3020
  3. Сервоприводы SG90 - 2шт
  4. Camera Platform Anti-Vibration
  5. Аккумулятор 7.2V 5000mah
  6. Аккумулятор 5V 2000mah
  7. Nano 3.0 Atmel ATmega328
  8. L298N motor driver
  9. Провода, термотрубки, USB хаб, диоды и другое.
  10. Платформа на ваш вкус, я выбрал DD1-1

Сборка нашего монстра
Настройка Роутера MR3020.
Первым делом начнем с роутера. Я долго думал что выбрать OR-WRT или CyberWRT. OR-WRT гибок в настройках, но все редактирование и внесения своих настроек осуществляется через терминал с помощи программы Putty. А так как Я боялся на тот момет работать через терминал, Я выбрал где есть графический интерфейс это CyberWRT, плюс возможно подключение через USB порт.
Для того что бы изменить прошивку нашего роутера, нужно скачать прошивку CyberWrt MR3020.

Как мы скачали, делаем следующее:

1) Включить роутер и подождать загрузки.
2) Зайти и залогиниться на 192.168.0.254 (по умолчанию admin\admin)
3) Найти в меню слева System Tools, там пункт System Upgrade и залить прошивку через веб-форму
4) Дождаться перезагрузки (порядка 4х минут)
Роутер готов к настройке.

Можно выбрать один из режимов: «Точка доступа» и «Клиент Wi-Fi сети». Для настройки режима Клиента:
- выберите режим «Клиент Wi-Fi сети»
- IP адрес Вашего устройства (по этому адресу будет доступно Ваше устройство. Постарайтесь выбрать незанятый IP. Например: 192.168.1.100)
- Маска подсети (255.255.255.0)
- Шлюз (например, IP Вашего домашнего роутера или шлюза - 192.168.1.1)
- Тип шифрования (тип шифрования, используемый в Вашей домашней сети)
- Пароль (пароль, для доступа к Вашей домашней сети)

Если сделали все правильно, то у вас пойдет RSS строка в нижней части экрана.

Когда все заработала, у вас появятся раздел модули, там вы находите модуль "РОБОТ". Устанавливайте. Готово.

Подключение L298N, Arduino Nano, MR3020, Камера и другое

На картинке все наглядно показано, но на всякий случай напишу.

Вывод Arduino DIGITAL 4 - к IN1 пину модуля.
Вывод Arduino DIGITAL 5 - к IN2 пину модуля.
Вывод Arduino DIGITAL 6 - к IN3 пину модуля.
Вывод Arduino DIGITAL 7 - к IN4 пину модуля.
Вывод Arduino GND - к GND клеме модуля.
GND клема модуля - Минус аккумулятора.
7.2V клема модуля - Плюс аккумулятора.
RM клема модуля - Правый моторчик.
LM клема модуля - Левый моторчик.
USB порт Arduino - Подключаем к USB хаб
Web Камера - Подключаем к USB хаб
USB хаб - Подключаем к USB роутера

Питание так скажем логистики, осуществляется вторым аккумулятором. Емкость 2000 mA/h 5v, дабы не спалить роутер. Да и с двумя аккумуляторами робот стабильней работает. Так вот, его мы подключаем просто в разъем микро USB. Через USB хаб который подключен к роутету питанию уже получает и камера и наша ардуинка.

Скетч для Arduino Nano
Вам необходима скачать библиотеку CyberLib , она предназначена только для Atmega 328.

/* Версия 1.5 WIFI Tanka на DD1-1 Реализовано: 1) Движение камеры по X и Y 2) Гудок 3) Фары 4) Звук при включении */ #include // Подключаем библиотеку #include // Подключаем библиотеку сервоприводов Servo myservo1; Servo myservo2; long previousMillis; // Нужно для таймера int LedStep = 0; // Счетчик для LED int i; #define robot_go {D4_High; D5_Low; D6_Low; D7_High;} #define robot_back {D4_Low; D5_High; D6_High; D7_Low;} #define robot_stop {D4_Low; D5_Low; D6_Low; D7_Low;} #define robot_rotation_right {D4_High; D5_Low; D6_High; D7_Low;} #define robot_rotation_left {D4_Low; D5_High; D6_Low; D7_High;} #define LED_ON {D13_High;} #define LED_OFF {D13_Low;} #define Headlamp_ON {D8_Low;} #define Headlamp_OFF {D8_High;} #define Buzzer {tone(11, 494, 500);} #define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D13_Out;} uint8_t inByte; void setup() { myservo1.attach(9); // Подключение сервоприводов к порту myservo2.attach(10); // Подключение сервоприводов к порту D11_Out; D11_Low; // Динамик Headlamp_OFF; // Фары выкл по умолчанию for(uint8_t i=0; i<12; i++) beep(80, random(100, 2000)); //звуковое оповещение готовности робота init; // Инициализация портов //Buzzer; // Инициализация портов динамика UART_Init(57600);// Инициализация порта для связи с роутером wdt_enable (WDTO_500MS); } void loop() { unsigned long currentMillis = millis(); // Обновление таймера if (LedStep == 0 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; // обновление таймер LED_ON; // Включить LedStep = 1; // Счетчик шагов } if (LedStep == 1 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; // обновление таймер LED_OFF; // Выключить LedStep = 2; // Счетчик шагов } if (LedStep == 2 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. LedStep = 0; // Счетчик шагов } if (UART_ReadByte(inByte)) //Еесли что то пришло { switch (inByte) // Смотрим какая команда пришла { case "x": // Остоновка робота robot_stop; break; case "W": // Движение вперед robot_go; break; case "D": // Повопорт влево robot_rotation_left; break; case "A": // Поворот вправо robot_rotation_right; break; case "S": // Движение назад robot_back; break; case "U": // Серво поднимается myservo1.write(i -= 20); break; case "J": // Серво опускается myservo1.write(i += 20); break; case "H": // Серво поворачивается влево myservo2.write(i += 20); break; case "K": // Серво поворачивается вправо myservo2.write(i -= 20); break; case "Y": // Серво поворачивается 85 myservo1.write(85); myservo2.write(85); break; case "F": // Включить фары Headlamp_ON; break; case "V": // Выключить фары Headlamp_OFF; break; case "I": // Гудок Buzzer; break; } } wdt_reset(); }

Внесение изменений в роутер
Для того что бы управлять камерами были внесены изменения в библиотеку роутера. Вам нужно будет скачать измененный код и заменить исходные файлы ним.

Машинка на arduino и Bluetooth без редактирования кода. Мы будем использовать специализированный бесплатный софт для составления скетча. Кроме того не надо покупать шасси для нашей поделки, подойдет практически любая неисправная радиоуправляемая модель автомобиля или танка.

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

Итак, давайте разберем на живом примере как сделать своими руками дистанционно управляемую по bluetooth c android планшета или смартфона машинку. Статья, как ни странно, рассчитана на начальный уровень знаний. Здесь нет руководства по редактированию кода в Arduino IDE, да и мы использовать его будем только для заливки нашего кода. А составлять алгоритм управления будем в программе под названием FLProg. Программа управления со смартфона — HmiKaskada_free. Но сначала о железе, которое нам понадобится.

Машинка на arduino и Bluetooth — аппаратная часть.

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

Для управления электродвигателями нашего будущего творения понадобится Н-мост на микросхеме L298N Ссылка на Али, я брал у именно этот. Картинка кликабельна.

Н-мост для arduino

Может управлять двумя двигателями в диапазоне напряжений 5 — 35 вольт. Поддерживает ШИМ, то есть можно регулировать обороты двигателей. На плате есть вывод стабилизированного напряжения 5 вольт для питания ардуино.

Схема подключения проста и незатейлива:

Следующей неотъемлемой частью электронной начинки нашего проекта является bluetooth модуль HC-06 . Самый обычный модуль для ардуино, настолько популярен что в дополнительном описании не нуждается.

HC-06 bluetooth for arduino

Основным элементом и мозгом в моем случае выступает arduino nano , тут даже фото выкладывать не буду ибо все о ней знают и умеют с ней работать. Кстати подойдет любая плата ардуино, лишь бы в корпус поместилась 😀

Аккумуляторы и провода для пайки в определении спецификации не нуждаются. Выбор аккумуляторов зависит от рабочего напряжения электродвигателей.

Машинка на arduino и Bluetooth — составление скетча.

Повторюсь — никакого копания в коде тут не будет. Мы будем использовать популярную программу FLProg. Скачать ее последнюю версию можно на официальном сайте . Интерфейс проги прост и незатейлив, но имеется огромный функционал и поддержка практически всех популярных модулей. Как ей пользоваться писать не буду так как это потянет на пару статей. Скажу только что я не встречал более удобной и доступной программы для составления скетчей для arduino и ее клонов. Скрин интерфейса:

Интерфейс FLProg

На сайте полно текстовых и видео мануалов, думаю разберетесь.

Мой проект для дистанционно-управляемой машины можно скачать с яндекс-диска через сервис сокращения ссылок.

Машинка на arduino и Bluetooth — интерфейс управления на планшете android.

По многочисленным просьбам написал подробную инструкцию по разработке интерфейса управления на базе HmiKaskada android в статье . Ссылка кликабельна.

Для устройств под управлением android существует программа HmiKaskada (ссылка на ЯндексДиск) . Изначально она разрабатывалась как альтернатива дорогим промышленным HMI панелям. Но пытливые умы быстро смекнули что управлять она может чем угодно. В нашем случае машинкой. Поддерживает беспроводные интерфейсы Wi-Fi и Bluetooth, кроме того можно девайс подключить напрямую через USB.

Есть платная и бесплатная версии программы. У меня есть обе но я принципиально сделал проект в бесплатной версии что бы показать вам и в очередной раз убедиться в абсолютной работоспособности free версии. Основное отличие free от PRO версий это работа только по блютуз.

На форуме FLProg есть гигантская ветка по вопросу совместимости с КаСкадой, да и разработчик активен и общителен. Скрин панели управления выкладывать не вижу смысла — он есть в видеоролике.

В этой статье представлена пошаговая инструкция, которая поможет вам самостоятельно создать приложение для Android-смартфона, предназначенное для управления чем-либо через Bluetooth. Для демонстрации мы подробно разберем пример мигания светодиодом на Arduino по командам с телефона или планшета. В результате выполнения наших инструкций вы научитесь делать вот так:

Для управления домашним роботом достаточно добавить кнопок и обработать их команды на стороне Arduino.

Что для этого потребуется

  1. Любая Arduino-совместимая плата
  2. Bluetooth-модуль
  3. Устройство на котором установлена ОС Android

В качестве Bluetooth-модуля лучше всего использовать HC-05. Его легко купить в китайском интернет магазине или на eBay. Модуль питается от 3.3 В, но его линии I/O могут работать и с 5-вольтовой логикой, что позволяет подключать его UART к Arduino.

Bluetooth-модуль HC-05

Подключение Bluetooth-модуля к Arduino

Так теперь нам нужно подключить нашу Arduino с Bluetooth. Если на Arduino нет вывода с 3.3В, а только 5В то нужен будет поставить стабилизатор чтобы снизить питание. Назначение выводов HC-05 легко найти в интернете. Для использования рекомендуем вам сделать плату с выведенными линиями питания, Rx и Tx. Подключение к Arduino необходимо производить в следующем порядке:

  • вывод Arduino 3.3В или (5В через стабилизатор!) — к 12 пину модуля Bluetooth
  • вывод Arduino GND — к 13 пину модуля Bluetooth
  • вывод Arduino TX — к 2 пину модуля RX Bluetooth
  • вывод Arduino RX — к 1 пину модуля TX Bluetooth

После подключения необходимо проверить работоспособность Bluetooth модуля. Подключим Светодиод к 12 выводу Arduino и загрузим на плату следующий скетч:

Char incomingByte; // входящие данные int LED = 12; // LED подключен к 12 пину void setup() { Serial.begin(9600); // инициализация порта pinMode(LED, OUTPUT); //Устанавливаем 12 вывод как выход Serial.println("Press 1 to LED ON or 0 to LED OFF..."); } void loop() { if (Serial.available() > 0) { //если пришли данные incomingByte = Serial.read(); // считываем байт if(incomingByte == "0") { digitalWrite(LED, LOW); // если 1, то выключаем LED Serial.println("LED OFF. Press 1 to LED ON!"); // и выводим обратно сообщение } if(incomingByte == "1") { digitalWrite(LED, HIGH); // если 0, то включаем LED Serial.println("LED ON. Press 0 to LED OFF!"); } } }

Добрый день!

Недавно заинтересовался идеей создания «умного дома». Так как из необходимых компонентов в моем распоряжении пока что имеются только arduino и телефон на андроиде, решено было начать с создания пульта управления и связи его с остальной частью системы.

Моё видение системы выглядит так:

Думаю стоит совместить домашний и веб-серверы, прикупив статический айпишник, но на первое время сойдет и так. Начнем с простого – научимся удаленно управлять светодиодом и LCD-дисплеем.

Web-server
На веб-сервере создаем БД с двумя таблицами – leds и texts. Таблица leds содержит 2 поля – id и status. Она содержит одну запись с актуальным состоянием светодиода. Таблица texts содержит 2 поля – id и text. Она также содержит одну запись с текстом, который в данный момент отображается на LCD-дисплее.

Теперь напишем пару скриптов, которые будем вызывать с телефона и передавать информацию для БД. Пишем на php.

Скрипт led.php (управление светодиодом):

Скрипт msg.php (управление LCD-дисплеем):

Я думаю, что из комментариев ясно, как работают эти скрипты. Это все, что находится на веб-сервере. Теперь перейдем к домашнему серверу (или говоря проще, компьютеру, к которому подключен ардуино).

Домашний сервер
На нем будет постоянно работать программка (можно даже назвать ее – демон), посылающая запросы к БД и при изменении находящейся там информации, посылающая на COM-порт с ардуино соответствующую команду. Программку напишем на языке Processing:

Import processing.serial.*; //библиотека для работы с COM-портом import de.bezier.data.sql.*; //библиотека для работы с БД MySQL Serial port; MySQL dbconnection; int prevLEDState = 0; //предыдущее состояние светодиода String prevS = ""; //предыдущий текст, отпаврленный на LCD-дисплей void setup() { port = new Serial(this, "COM4", 9600); //инициализируем COM-порт 4 (на не прицеплена ардуина), скорость обмена - 9600 бод port.bufferUntil("\n"); String user = "имя_пользователя"; String pass = "пароль"; String database = "имя_бд"; dbconnection = new MySQL(this, "ваш_домен.ru", database, user, pass); //соединяемся с БД dbconnection.connect(); } void draw() { //следим за информацией о светодиоде в БД dbconnection.query("SELECT * FROM leds WHERE id = "1""); //делаем запрос к таблице leds while (dbconnection.next()) //обходим выборку из результата запроса { int n = dbconnection.getInt("status"); //получаем значение из поля status if (n != prevLEDState) //если оно изменилось по сравнению с предыдущем "тактом" работы программы, то посылаем команду на COM-порт { prevLEDState = n; port.write("1"); //первый переданный символ будет означать код выполняемой операции: 1 - управление светодиодом, 2 - управление LCD-дисплеем port.write(n); } } //следим за информацией о LCD-дисплее в БД dbconnection.query("SELECT * FROM texts WHERE id = "1""); //делаем запрос к таблице texts while (dbconnection.next())//обходим выборку из результата запроса { String s = dbconnection.getString("text"); //получаем значение из поля text if (s != prevS) { prevS = s; port.write("2"); port.write(s); } } delay(50); //делаем задержку в 50 мс, чтобы не слать запросы непрерывно }
Пояснять этот код я тоже не стану, все и так понятно.
Еще 1 важный момент. Чтобы программа с нашего компьютера могла обращаться к БД, расположенной на удаленном сервере, надо это разрешить. Вводим наш ip в список разрешенных:

Приложение для телефона
Телефон у меня андроиде, для него и пишем. Не буду сильно вдаваться в подробности (очень хорошо как о установке среды программирования, так и о написании первого приложения написано вот в этой статье - ссылка).

Внешний вид приложения выглядит довольно скромненько, но в данном случае это не главное:

Приведу только отрывки кода программы под Android. Функция, вызывающая скрипт, управляющий светодиодом:
public void changeLED() { try { URL url1 = new URL("http://ваш_домен.ru/led.php"); HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection(); try { InputStream in = new BufferedInputStream(urlConnection.getInputStream()); } finally { urlConnection.disconnect(); } } catch (Exception e) { } }
Функция, отсылающая текст для отображения на LCD-дисплее:
public void submitMsg() { final EditText tt = (EditText) findViewById(R.id.editText1); try { URL url1 = new URL("http://ваш_домен.ru/msg.php?msg="+tt.getText()); HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection(); try { InputStream in = new BufferedInputStream(urlConnection.getInputStream()); } finally { urlConnection.disconnect(); } } catch (Exception e) { } }
Ну и главная функция, в которой происходит привязка обработчиков событий к кнопкам:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btn1 = (Button) findViewById(R.id.button1); btn1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) // клик на кнопку { changeLED(); } }); final Button btn2 = (Button) findViewById(R.id.button2); btn2.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) // клик на кнопку { submitMsg(); } }); }
И еще один важный момент – добавить разрешение приложению на выход в интернет. Для этого в файл AndroidManifest.xml (он находится в директории нашего андроид-приложения) надо добавить строчку:

Экспортируем наше приложение в файл APK и устанавливаем на телефон. Пульт управления умным домом готов!

Arduino
Ну и наконец последнее, но не по значению – подключение ардуино и ее прошивка. Схема подключения LCD-экрана и светодиода к Arduino Uno выглядит следующим образом:

Резистор берем на 220 Ом. Более подробно про подключение LCD-экрана можно прочитать здесь - ссылка

А вот как это все выглядит в реальности:

Правда красиво?

Задача ардуино состоит в прослушивании того, что программа-демон на домашнем сервере посылает на COM-порт, к которому и подключена ардуино (хотя фактически подключение идет по USB-кабелю, но компьютер распознает его как последовательный порт). После получения каких-либо данных с компьютера, контроллер по первому символу переданной информации распознает код команды (т.е. чем сейчас предстоит управлять – LCD-дисплеем или светодиодом). Далее в зависимости от кода и следующей за ним информации выполняется либо включение/выключение светодиода, либо вывод на дисплей переданного сообщения. Итак, вот собственно код:

#include //встроенная библиотека для работы с LCD-дисплеем boolean isExecuting = false; //переменная, отражающая, что уже идет выполнение какой-то команды //Cразу поясню, для чего это нужно. За каждый "такт" цикла loop ардуино считывает с COM-порта код одного символа. //Поэтому строка будет передаваться за несколько тактов. При этом перед каждой из двух возможных команд (смена состояния светодиода и передача текста на дисплей) //передается код этой команды (1 и 2 соответственно). Чтобы отделить коды команд от передаваемой далее информации (состояния светодиода или текста для дисплея), //используется эта переменная. LiquidCrystal lcd(4,5,10,11,12,13); //инициализация дисплея int ledPin = 8; //номер пина ардуино, на к которому подсоединен светодиод int prevLEDStatus = 0; //предыдущий статус светодиода (вкл/выкл) int newLEDStatus = 0; //новый статус светодиода int cmd = 0; //код выполняемой команды void setup() { Serial.begin(9600); //инициализация COM-порта (9600 - скорость обмена в бодах) pinMode(ledPin,OUTPUT); //инициализация 8-го пина ардуино как выхода lcd.begin(20,4); //инициализация LCD-дисплея (4 строки по 20 символов) } void loop() { if (Serial.available() > 0) //если на COM-порт пришла какая-то информация { if (isExecuting == false) //если в данный момент не идет выполнение никакой команды { cmd = Serial.read() - "0"; //считываем код выполняемой команды isExecuting = true; //теперь переменная показывает, что началось выполнение команды } if (cmd == 1) //управление светодиодом { newLEDStatus = (int) Serial.read(); //считываем новый статус светодиода if (newLEDStatus != prevLEDStatus) //если он изменился по сравнению с текущим статусом, то меняем текущий статус { digitalWrite(ledPin,newLEDStatus); prevLEDStatus = newLEDStatus; } } else //управление дисплеем { if (isExecuting == false) //если в данный момент не идет выполнение никакой команды { lcd.clear(); //очищаем экран } else { lcd.print((char)Serial.read()); //выводим символ на дисплей } } } else //если на COM-порт не пришла никакая информация { delay(50); //делаем задержку в 50 мс if (Serial.available() <= 0) //если информации по-прежнему нет isExecuting = false; //считаем, что никакая команда не выполняется } }
Я думаю, пояснений он не требует, так как я очень подробно все расписал в комментариях. Единственное, что стоит отметить, так это некоторые ограничения на передаваемые для вывода на дисплей строки. Они не должны содержать пробелов (это ограничение накладывается несовершенством моего алгоритма) и не должны содержать кириллицы (т.к. она поддерживается не всеми дисплеями, а если и поддерживается, то требует передачи кодов символов в своей собственной кодировке, преобразовывать символы в которую нет никакого желания).

Заключение
Ну вот и все. Оказалось, что это довольно просто.
Видео того как все работает:

Рекомендуем почитать

Наверх