Ви не увійшли.
Начну первый.
Приобрел недавно блютуз модуль для ардуино и хочу его сразу вам показать.
Модуль блютуз HC-06.
Описание:
Bluetooth модуль для подключения устройств к ардуино по блютуз. Режим работы пассивный.
Для работы просто выбираем поиск на другом устройстве, и находим его как НС-06. Пин базовый 1234. После подключения к ардуино, данный блютуз выступает в роли порта, т.е. все что мы пошлем на последовательный порт будет отсылался а этот блютуз, также все то что мы будем слать на этот блютуз из вне, будет приниматься на ардуино как через порт.
Пины:
STATE -- выводит сигнал от светодиода.
RXD -- контакт для получения данных. На него мы посылаем данные.
TXD -- контакт для отправки данных.
GND - земля
VCC -- питание 3.3 v
EN -- питание вкл\выкл, если подать единицу модуль будет включен. Если ноль то модуль будет отключен.
Настройка:
Для изменения базовых настроек, имя, пин. Модуль нужно подключит к ПК, через переходник. И через ПК, АТ коммандами изменять настройки. На данный момент я этого не делал, т.к. не имею переходника.
Но вот список команд для изменения:
AT - возвращает OK
AT+VERSION - посмотреть версию
AT+NAMEyyy - изменить имя устройства.
AT+PINxxxx - задать другой пин, базовый 1234
AT+BAUDx - установить скорость.
Источник http://arduino-ua.com/index.php?productID=241
Схема подключения:
Пример скетча: (пример не мой, но где нашел не могу сказать )
В данном примере, по команде с телефона мы отправляем 1 и светодиод на 13 порту включается, 0 его отключает, а * заставляет его мигать с интервалом в 1 секунду.
enum { LED_PIN = 13 };
enum LedState { LED_ON, LED_OFF, LED_BLINK };
LedState led_state;
void setup()
{
led_state = LED_OFF;
pinMode(LED_PIN, OUTPUT);
pinMode(3,OUTPUT);
Serial.begin(9600);
}
void loop()
{
if (Serial.available())
{
char command = Serial.read();
switch (command)
{
case '1':
led_state = LED_ON;
Serial.println("Led On Cool");
break;
case '0':
led_state = LED_OFF;
Serial.println("Led Off Fall");
break;
case '*':
led_state = LED_BLINK;
Serial.println("Led Blink ");
break;
default:
{
for (int i = 0; i < 5; ++i)
{
digitalWrite(LED_PIN, HIGH);
delay(50);
digitalWrite(LED_PIN, LOW);
delay(50);
}
Serial.println("Fail ....");
}
}
}
switch (led_state)
{
case LED_ON: digitalWrite(LED_PIN, HIGH); break;
case LED_OFF: digitalWrite(LED_PIN, LOW); break;
case LED_BLINK:
{
static unsigned long start_millis = 0;
if (millis() - start_millis >= 300)
{
start_millis = millis();
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
}
}
}
И вот видео того что получилось.
Вот все, что касается настройки и подключения блютуз HC-06 для ардуино.
Будут вопросы пишите, буду помогать их решать!
Остання редакція Tigran (2014-06-17 19:35:46)
Неактивний
А к компу не пробовали подключать? У меня как-то странно работает - первый раз подключается нормально, а потом не хочет - приходится плату передергивать по питанию.
В смысле через комповый блютуз подключится к модулю, а не через телефон.
Нет, в таком проблемы не было, была проблема в питании. Но у меня как-то было подобно, при использовании сторонней проги для блютуз, она не была зарегистрирована, и отключала от устройства каждые несколько минут. А с телефона не происходит отключения?
Неактивний
Попробуй с телефона, если так-же будут отключения, скорее всего проблема в блютуз. А к чему конкретно подключен модуль, какая плата, что еще по мимо этого подключено? У меня примерная ситуация была, когда на плату Romeo v2 был подключен блютуз и папру моторов и дальномеров. При включении всего этого, переставало поступать питание на модуль блютуз. При этом переставал мигать индикатор на самом модуле. Вышел из ситуации подключив отдельное питание на модуль! Проверь так!
Неактивний
А что за программка на телефоне для отправки команд? Это что-то самописное?
Здравствуйте.
Помогите с проблемой, пожалуйста. Приобрел HC-06, подключил к Arduino. Передаю команды через putty(не важно что за терминал) часть символов не доходит. Показательный пример: передаю 123456789, arduino возвращает только 12345789. Шестой символ с большей вероятностью теряется. Бывает доходят все символы. Через обычный serial по usb данные передаются полностью. Подскажите в чем дело?
https://yadi.sk/i/pr_Ovyvcepj37
ghostaz, с проблемами искажения данных сталкивался когда неверно настроен UART,
например модуль настроен на парити None, а мега на парити Even
либо теряете данные ) 6-ой байт всегда? а 12 тый?
понимаю так :
2 модуля работают хорошо,
но когда один на меге, эхо искажается?
или как делаете тест?
Неактивний
6й символ не всегда теряется, но большинстве случаев. 12 символ не теряется.
Тест делаю между Arduino Leonardo и ноутбуком.
В ноуте соеднияюсь с HC-06, создается ком порт, подключаюсь к нему через Putty или через Arduino IDE. Отправляю строку ищу в ней подстроку "setmode", если нахожу пишу ОК + то что прислал, не нахожу пишу Error + то что прислал.
char Command[15];
Serial1.readBytes(Command, 15);
if (strstr(Command, "setmode") != NULL) {
Serial1->println("OK");
Serial1->println(Command);
}
else {
Serial1->println("Error");
Serial1->println(Command);
}
Скорость сериала 9600 бод.
мысли вслух
send 12345678\n
send 12345678
'6' 16 символ буфер в Command[15]
http://arduino.cc/en/Reference/StreamReadBytes
Syntax
stream.readBytes(buffer, length)
Parameters
stream : an instance of a class that inherits from Stream.
buffer: the buffer to store the bytes in (char[] or byte[])
length : the number of bytes to read (int)
Returns
The number of bytes placed in the buffer
алгоритм мне не нравится
поток то асинхронный в чистом виде, для начала я бы формировал данные в своем буфере ( Command, только переполнение буфера не реализуйте ), т.е. читал бы по байту.
по завершению строки '\r' или '\n' анализировал бы входные данные
if (strstr(Command, "setmode") != NULL) {
Неактивний
При передаче через USB код работает. Да, и как вы говорите, пробовал, выводил по байтам - через bluetooth пропускает шестой символ( Не пойму никак.
не мне нравится stream.readBytes(buffer, length) length = 15
по логике читает 15 байт и отдает буферу, либо по таймауту отдает что такое встречал
есть ли возможность читать по одному байту?
вывод в порт в Ардуино не буфиризирован, тут все равно, важен прием.
Неактивний
Сделал через read. Проблема та же. https://yadi.sk/i/IHnoUHfDeq9PA. Чувствую что аппаратная проблема.
Залил пример работы с serial вместо моего кода - ошибок нет. Получается проблема в коде - буду искать. Спасибо за помощь)
Приветствую!
Планшет Explay Hit некорректно подключается через синезуб к устройству Arduino Bluetooth модуль HC-06 через приложение для андроида.
В свою очередь телефон самсунг работает через точно такое же приложение корректно.
Вопрос: это проблемы с моим планшетом?
Неактивний
Всем привет, я хочу сделать в своем авто блютуз ключ н модуле НС-5 без изпользования ардуино, но хочу сделат чтоб именно смартфон автоматический подключался к модулю а не наоборот, никак немогу найти готовое приложение с финкцией автоконнекта, вернее одно нашел "MuseHack Full" но оно автоматический подключается если розорвать соединение на небольшой промежуток времени до минуты.
Неподскажите где взять прогу которая бы при появлении модуля НС-5 в поле видимости автоматически к нему конектилать?
Неактивний
Ребята,помогите!!!! Весь измучился) написал программу в апп инвентаре, должна выводить температуру и влажность воздуха... Все бы ничего, но при запросе данных с платы, передает сначала первый символ, а затем второй, и при повторное запросе все сначала и вместо 25 градусов выходит как то так 2 25 2. Пробовал добавлять пробел перед передачей данных, работает лучше, но для функций программы так быть не должно... что может быть не так??? Bluetooth hc 06
без модуля все работает, в мониторе порта все четко...Модуль хорошо принимает данные, как однозначные так и двузначные, но как только дело доходит до передачи, он отправляет сначала первый символ, затем после повторного запроса второй и снова первый и выглядит это как то так:
> t
< 2
> t
< 5 2
и так далее, вместо 25, а по поводу кода..., как то так( датчик, терморезистор на 10 кОм):
int sensePin = 2;
int dim;
void setup() {
Serial.begin(9600);
}
void loop(){
int val = analogRead(sensePin);
val= constrain(val, 250, 555);
int temp = map(val, 250 , 555, 1 , 30);
if (Serial.available())
{
dim = Serial.read();
if (dim == 't')
{
Serial.print(temp);
}
}
}
Заменить строку Serial.print(temp); на Serial.print( \r\n temp); ???