Программа

Итак, чтобы протестировать 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 же, помните?).

На основе этих примеров можно составить программу для управления движением робота. Разберем это в одной из следующих статей на нашем портале!


Изменено:

Ардуино: Bluetooth: 3 комментария

  1. Здравствуйте. У вас стрелка назад перекликается с кнопкой B, и это небольшая проблема, но значительная

    • Приветствую! Есть такое, уже публикуем новую версию приложения:) не приметили слона

  2. Вариант №2. Если же требуется передавать данные от bluetooth модуля к Ардуино, то необходимо использовать делитель напряжения. Полная схема подключения будет выглядеть так:
    Что- то мне подсказывает, что в этом варианте данные передаются ОТ Ардуино На БТ.

Добавить комментарий

Ваш адрес email не будет опубликован.