Тестовый скетч для чтения данных с Bluetooth модуля

Я думаю, что после начала программирования у вас может возникнуть вопрос : а как узнать символы, которые авторы приложений определили для элементов управления. В теории, для этого достаточно открыть окно порта в среде программирования Arduino IDE и прочитать символы, которые появятся после воздействия на те или иные органы управления на смартфоне. Но, как говорилось выше, bluetooth-модуль использует тот же порт, что и USB-кабель при подключении Arduino к компьютеру, и одновременно они работать не могут. Конечно, есть библиотека для переопределения портов и пинов, но чтобы не лезть в дебри, вы можете воспользоваться скетчем, представленным ниже.

Загрузите этот скетч в Arduino, поиграйтесь с кнопками и т.п., и в верхней строчке LCD вы увидите искомые символы. Обратите внимание, они будут замыкаться двумя "крякозябриками" - это символы перевода строки. Чтобы скачать скетч в формате ino, воспользуйтесь этой ссылкой.

Для работы этого скетча вам понадобятся дополнительные библиотеки :

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

//Это тестовый скетч для выяснения, //какие символы посылает приложение через bluetooth модуль hc-05 //в Arduino при воздействии на органы управления приложения (кнопки, джойстик) //скетч больше подходит для чтения одиночных сигналов //также можно проверить функцию передачи данных с Arduino в смартфон #include <LiquidCrystal_I2C.h>//библиотеки работы с LCD через I2C #include <Wire.h> int led = 13; //номер встроенного LED-пина float send_digit = 39.27; //произвольное число для передачи в смартфон LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность дисплея void setup() { pinMode(led, OUTPUT); Serial.begin(9600); //запускаем передачу данных Serial.setTimeout(50);//время ожидания приема данных в мс (по умолчанию 1000 мс, что очень долго) lcd.init();// Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.setCursor(0,0);//рисуем первую строчку lcd.print(" Bluetooth"); lcd.setCursor(0,1);//рисуем вторую строчку lcd.print(" Test "); delay(2000); // Пауза в мс. lcd.setCursor(0,0); //очищаем экран lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,0); } void loop() { Serial.println(send_digit); //посылаем в смартфон произвольное число if (Serial.available() > 0) { ReadBT(); //функция обработки данных со смартфона } } //********* Функция обработки данных со смартфона ************* void ReadBT() { String test_string = "";//объявляем переменную типа String здесь, а не в начале скетча, //чтобы она очистилась из памяти после использования test_string = Serial.readString();//читаем данные из порта, //формирует из данных строку test_string. //Заканчивает работу по Serial.setTimeout(50). lcd.setCursor(0,1); lcd.print(" "); //очищаем экран lcd.setCursor(0,0); lcd.print(test_string); //выводим полученную строку на LCD lcd.print(" "); //Обратите внимание, //символы, на которые будет реагировать контроллер, //определены для элементов управления (джойстик, переключатели) //в приложении Bluetronics (от Aniket Raj). //В других приложениях они будут другие, //соответственно, поменяйте их в скетче ниже. //Чтобы узнать, какие это символы, //вы можете загрузить этот скетч, //поиграться с кнопками и т.п., //и в верхней строчке вы увидите искомые символы, //соответствующие определенному элементу управления. //Искомые символы будут замыкать два крякозябрика - //это символы перевода строки //********* включаем или выключаем LED джойстиком *********** if (test_string.indexOf("T") > -1)//нажата стрелка ВВЕРХ (буква T) { digitalWrite(led, HIGH); } if (test_string.indexOf("B") > -1)//нажата стрелка ВНИЗ (буква B) { digitalWrite(led, LOW); } }