Программа
Итак, чтобы протестировать bluetooth-соединение, подключим к Ардуино четыре обычных светодиода и заставим их зажигаться от нажатия кнопок на пульте.
В одном из ранних уроков мы разбирали как правильно подключать светодиоды к плате Ардуино. Для работы используем контакты 2, 3, 4 и 5.
Никаких дополнительных библиотек для работы с bluetooth требуется. Модули bluetooth HC-05 и HC-06 подключаются по UART интерфейсу, а значит достаточно использовать стандартный класс Serial. Скорость передачи по UART у модуля HC-05 равна 9600 бод, указываем это при вызове функции инициализации «begin». (более подробно об UART в этом уроке)
int led1pin = 2;
int led2pin = 3;
int led3pin = 4;
int led4pin = 5;
void setup() {
Serial.begin(9600); // скорость UART интерфейса у HC-05
// настройка контактов
pinMode(led1pin, OUTPUT);
pinMode(led2pin, OUTPUT);
pinMode(led3pin, OUTPUT);
pinMode(led4pin, OUTPUT);
}
void loop() {
char data;
// есть во входном буфере есть данные
if( Serial.available() > 0 ){
data = Serial.read(); // считываем один байт из буфера
switch(data){ // сравниваем полученный символ с R,L,F,B
case 'R':{
digitalWrite(led1pin, HIGH);
break;
}
case 'L':{
digitalWrite(led2pin, HIGH);
break;
}
case 'F':{
digitalWrite(led3pin, HIGH);
break;
}
case 'B':{
digitalWrite(led4pin, HIGH);
break;
}
default:{
// если полученный символ не равен ни одному из вышеуказанных
// гасим все светодиоды
digitalWrite(led1pin, LOW);
digitalWrite(led2pin, LOW);
digitalWrite(led3pin, LOW);
digitalWrite(led4pin, LOW);
}
}
}
}
Загружаем программу на Ардуино, подаем питание на наш стенд, подключаемся со смартфона к устройству и пробуем нажимать на стрелки джойстика. Можно даже попробовать нажать сразу на несколько стрелок.
В следующей программе будем использовать пульт для управления яркостью светодиода. В схеме останется только один светодиод, подключенный к любому выводу Ардуино с поддержкой ШИМ. Для Ардуино Уно это 3,5,6,9,10,11.
int led1pin = 3;
void setup() {
Serial.begin(9600);
// настройка контактов
pinMode(led1pin, OUTPUT);
}
void loop() {
byte data;
// есть во входном буфере есть данные
if( Serial.available() > 0 ){
data = Serial.read(); // считываем один байт из буфера
if( data >= 48 && data <= 57 ){
analogWrite(led1pin, 255*(data-48)/9);
}
}
}
Что за числа 48 и 57? И формула 255*(data-48)/9. Поясним.
Как мы уже писали, приложение Bluetooth robot control отправляет нам символы. Как известно, в вычислительной технике принято хранить символы с помощью кода из ASCII таблицы. Так вот согласно этой таблице, символам, обозначающим цифры 0, 1, 2, …, 9 соответствуют числовые коды 48, 49, 50, …, 57. То есть, когда мы говорим, что символ пришел в последовательный порт, на самом деле мы получили один байт, что есть число в диапазоне от 0 до 255.
В нашей программе сразу после получения байта мы проверяем, является ли этот байт цифрой (символом, на числом!) в диапазоне от 0 до 9. Если является, то мы преобразуем эту цифру сначала в число от 0 до 9:
data - 48
А затем применяем обычную пропорцию чтобы превратить число в диапазоне от 0 до 9 в число от 0 до 255:
255*(data-48)/9
Таким образом выражение 255*(data-48)/9 преобразует символы от 0 до 9 в число от 0 до 255! Никакой магии.
Загружаем программу в Ардуино, подключаемся к устройству через смартфон и пробуем двигать бегунок. Светодиод будет менять яркость. Смена яркости будет происходить скачкообразно, так программа поддерживает всего 10 позиций бегунка (ну от 0 до 9 же, помните?).
На основе этих примеров можно составить программу для управления движением робота. Разберем это в одной из следующих статей на нашем портале!
Здравствуйте. У вас стрелка назад перекликается с кнопкой B, и это небольшая проблема, но значительная
Приветствую! Есть такое, уже публикуем новую версию приложения:) не приметили слона
Вариант №2. Если же требуется передавать данные от bluetooth модуля к Ардуино, то необходимо использовать делитель напряжения. Полная схема подключения будет выглядеть так:
Что- то мне подсказывает, что в этом варианте данные передаются ОТ Ардуино На БТ.