Проблема с блютуз модулем hc-05
Я написал простую программу для управления светодиодом с помощью мобильного телефона. Итак, я купил Bluetooth-модуль HC-05, настроил его, а затем подключил к Arduino.
Это код, который я написал для него.
int ledPin1=13;
int state;
int flag=0;
void setup()
{
pinMode(ledPin1, OUTPUT);
digitalWrite(0,HIGH);
second:
Serial.begin(9600);
}
void loop()
{
if(Serial.available() >0)
{
state = Serial.read();
flag=0;
}
if (state == '0')
{
digitalWrite(ledPin1, LOW);
if(flag == 0){
Serial.println("led off");
flag=1;
}
}
if (state == '1')
{
digitalWrite(ledPin1, HIGH);
if(flag == 0){
Serial.println("led on");
flag=1;
}
}
}
С последовательным монитором все работает отлично. Но я не могу управлять им с мобильного телефона. Я ввел 1 в последовательный монитор, и если он показал «включен». то же самое появляется в командном интерфейсе приложения, используемого в мобильном телефоне. Итак, bluetooth передает информацию с arduino на мобильный, но я не могу отправлять команды с мобильного и управлять светодиодом. Я пытался использовать различные приложения, такие как Blueterm, Ardudroid и т. д., но ситуация остается прежней.
Что я делаю не так? Что-то не так с кодом?
Я использую Arduino Uno.
2 ответа
Ваше приложение для Android может отправлять дополнительные символы, например "конец строки", из-за чего возвращаемое значение Serial.read()
будет отличаться от 1
или 0
после первого байта. Тем не менее, похоже, что он по-прежнему должен включать или выключать светодиод, как только он читает первый байт, и ничего не делать, когда он читает следующие байты. Я успешно использовал приложение «hyperterminal rs232» для отправки отдельных символов, возможно, я пытаюсь проверить, помогает ли оно, и убедиться, что оно настроено на правильную скорость передачи данных.
Я бы рекомендовал отправлять обратно в последовательный поток прочитанные символы, чтобы убедиться, что они были получены правильно, поэтому я бы изменил это:
if(Serial.available() >0)
{
state = Serial.read();
flag=0;
}
к:
if(Serial.available() >0)
{
state = Serial.read();
Serial.print(state);
flag=0;
}
Изменить:
Только что понял это в setup()
:
digitalWrite(0,HIGH);
Вы устанавливаете вывод периферийного устройства UART на высокое значение, поэтому, возможно, вы не читаете данные со своего телефона.
Почему бы вам не попробовать сделать другой код.
Если вы хотите использовать библиотеку, используйте #include <SoftwareSerial.h>
Не используйте digitalWrite(0, HIGH)
в void setup(){...}
Объявить ledPin = 13;
Используйте только pinMode
и Serial.begin(9600)
в void setup()
В loop()
спросите if (Serial.available()){...}
- TX,RX,ON,l светодиоды всегда были красными
- я не могу работать над своим небольшим проектом
- Можно ли измерить скорость акселерометром? Насколько точно?
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Модуль Bluetooth HC-05 мигает красным светом - Arduino Uno
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.