Arduino Polska Forum

Pełna wersja: UART problem z odczytem wartosci
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Hej, kupiłem sobie bluetooth BT-201 który posiada wyjście UART gdzie wyświetlane są nazwy piosenek i możliwość sterowania przez komendy AT.

Poniżej z noty katalogowej wykaz parametrów UARTa:
Kod:
1>.Baud rate:115200bps(User can set by command)
  2>.Data bit:8bit
  3>.Stop bit:1bit
  4>.Check Digit:None
  5>.Control flow:None
  6>.Control command format: AT+<CMD>[<param>]rn
  7>.Return data format: <IND>[<param>]rn
  8>.AT+:The start of a control command.
  9>.<CMD>:Specific control command.
  10>.[<param>]:The parameter of CMD if need.
  11>.rn:Enter and Wrap.
  12>.<IND>:The start of return data.


Ok, więc zadowolony wziąłem zakurzone UNO żeby podsłuchać co tam jest na wyjściu ale mam same krzaki, kod do odczytu poniżej:

Kod:
#include <SoftwareSerial.h>
SoftwareSerial BTserial(3, 2); // RX, TX

char c=' ';
boolean NL = true;

void setup()
{
    Serial.begin(115200);
    Serial.print("Nasluchuje:");
    Serial.println(" ");

//  Default (38400)
    BTserial.begin(115200); 

}

void loop()
{
    // Read from the Bluetooth module and send to the Arduino Serial Monitor
    if (BTserial.available())
    {
        c = BTserial.read();
        Serial.write(c);
    }


    // Read from the Serial Monitor and send to the Bluetooth module
    if (Serial.available())
    {
        c = Serial.read();
        BTserial.write(c);  

        // Echo the user input to the main window. The ">" character indicates the user entered text.
        if (NL) { Serial.print(">");  NL = false; }
        Serial.write(c);
        if (c==10) { NL = true; }
    }
}


A to przykładowy wynik z konsoli:
Kod:
⸮1kp0ppp0ps
⸮2kpppp00p3
⸮⸮kp00p00⸮⸮
⸮⸮k0pp0p0p0
MF+/LEN⸮ ` `⸮⸮s


Lena Sattelite utwór, więc coś tam mniej więcej pokazuje, ale może coś źle robię i mnie nakierujecie ?

Na komendy AT tez reaguje, bo wypluwa tez krzaczki na monitorze.
Ustaw odpowiednią prędkość w monitorze portu, bo domyślnie jest 9600, a ty masz w programie 115200.
(25-11-2019, 22:42)Robson Kerman napisał(a): [ -> ]Ustaw odpowiednią prędkość w monitorze portu, bo domyślnie jest 9600, a ty masz w programie 115200.

Na to wpadłem, po ustawieniu pokazuje to co wysłałem Sad

[Obrazek: Adnotacja-2019-11-25-220534.png]
A czemu masz tak?
char c=' ';
a tego nie rozumiem
// Echo the user input to the main window. The ">" character indicates the user entered text.
if (NL) { Serial.print(">"); NL = false; }
Serial.write©;
if (c==10) { NL = true; }
(25-11-2019, 23:38)Jarewa0606 napisał(a): [ -> ]a tego nie rozumiem
        // Echo the user input to the main window. The ">" character indicates the user entered text.
        if (NL) { Serial.print(">");  NL = false; }
        Serial.write©;
        if (c==10) { NL = true; }
Kod 10 to '\n' (nowa linia). Czytelniej byłoby "c == '\n\'" niż posługiwanie się kodem znaku. Reszta jest już jasna choć trochę to przekombinowane i można zrobić dużo prościej bez użycia flagi.
Na innych przykładach z internetu mam dokładnie ten sam efekt, więc zostawiłem ten co używam jak już jest taka potrzeba.
Ktoś coś doda ?
(26-11-2019, 19:27)error105 napisał(a): [ -> ]Ktoś coś doda ?
Pewnie to, że daj zlecenie na rozwiązanie problemu. Za kilka k zł na pewno znajdziesz chętnego.
Inna opcja, tańsza, kupienie archiwalnych numerów "Elektroniki dla wszystkich". Poczytasz i pewnie sam dasz radę.

To niestety wymaga czasu. Ja uczę sie 30 lat i nadal nie wszystko wiem.
Zmiana prędkości UART modułu wystarczyła, uf, dobrze że zaoszczędziłem kilka tysięcy Smile