Проблема с блютуз модулем 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.

, 👍0


2 ответа


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 на высокое значение, поэтому, возможно, вы не читаете данные со своего телефона.

,

0

Почему бы вам не попробовать сделать другой код. Если вы хотите использовать библиотеку, используйте #include <SoftwareSerial.h>

Не используйте digitalWrite(0, HIGH) в void setup(){...}

Объявить ledPin = 13;

Используйте только pinMode и Serial.begin(9600) в void setup()

В loop() спросите if (Serial.available()){...}

,