Skocz do zawartości

Problem z komunikacją APP Inventor 2 i HC-05


Gregory4House

Pomocna odpowiedź

Witam.

Mam problem z przesyłaniem informacji do Arduino z aplikacji. Program nie wchodzi do pętli if ze względu na niespełniony warunek Bluetooth.available() i nie mam pojęcia dlaczego tak się dzieje. Poniżej zamieszczam kod wraz z aplikacją - może ktoś miał podobny problem?

Dla ścisłości dodam że odczyt seriala w aplikacji działa bez zarzutu...

#include <SoftwareSerial.h>
 
#define SOFT_RX 15
#define SOFT_TX 14
 
SoftwareSerial Bluetooth(SOFT_RX, SOFT_TX); // RX, TX

void(* resetFunc) (void) = 0;

int i = 1;
char c;
String readString;

 
void setup() { 
  Serial.begin(115200);   // hardware serial for the USB-PC
  Bluetooth.begin(9600);  // hardware serial for Bluetooth

  Serial.println("ALA");
  Bluetooth.println("A1");
  
  delay(100);
}

void loop() {
  Serial.println("ILI");
  Bluetooth.println("I2");
  delay(1000);
  if (Bluetooth.available()) {
    delay(50);
    Serial.println("ELE");
    Bluetooth.println("E1");
    
    int b = Bluetooth.read();
    Serial.println("AAAAA");
    Bluetooth.println("EEEEE");

  char c = Bluetooth.read();
  readString += c;
    
  Serial.println(readString);
  Serial.println(c);
  Serial.println(b);
  Bluetooth.println(readString);
  Bluetooth.println(c);
  Bluetooth.println(b);
  if (readString.length() >0) {
    Serial.println(readString);
    Serial.println(c);
    if (readString == "DO") {
      Serial.println("OL");
      Bluetooth.println("UL");
      delay(500);
    } else {
      Serial.println("K");
      Bluetooth.println("P");
      delay(500);
    }
    
    
readString = "";
    
  }
  }
}

obraz.thumb.png.6a316047a091b35e510157e2551782ce.png

Poniżej zamieszczam również schemat połączenia oraz model konwertera:

https://www.waveshare.com/logic-level-converter.htm

obraz.thumb.png.7ecb7ff61bd03d235b418c5727476494.png

Zauważyłem również, że przy sprawdzaniu komend AT nie mam odpowiedzi o statusie tak jakby nie było komunikacji. Z tego powodu zastanawiam się czy może być uszkodzony tylko jeden pin, ponieważ tak napisałem powyżej odczyt działa w pełni poprawnie...

Link do komentarza
Share on other sites

Skoro używasz płytki MEGA, gdzie masz 4 sprzętowe UART to użyj sprzętowego. Z softowymi zawsze większy problem jest przy odczycie.

W HC-05 tryb komend AT należy włączyć. Są dwa sposoby,   jeden taki awaryjny - podłączając zasilanie należy trzymać wciśnięty przycisk przy pinie EN. Moduł włącza się w trybie komend AT z prędkością 38400 - fajne jak nie pamiętasz jak jest ustawiony baudrate. Do normalnej pracy trzeba go po ustawieniu wszystkiego zresetować. Drugi sposób podczas normalnej pracy wcisnąć przycisk, tryb komend AT działa z aktualnie ustawionym baudrate. Po ustawieniu wszystkiego trzeba go zresetować. Wciśnięcie przycisku można zastąpić podaniem napięcia 3.3V na pin EN.

Normalnie po uruchomieniu moduł jest po prostu przeźroczysty, to co wyślesz zapisuje do buforu i wyśle ile zapamięta do podłączonego urządzenia BT.

W trybie MASTER komendy AT działają zawsze wtedy gdy nie jest sparowany i wejdziesz w tryb AT lub podczas transmisji (żeby się np. rozłączyć, coś zmienić) gdy włączysz tryb AT tylko na czas trzymania pinu EN w stanie wysokim (3.3V).  Podobnie można zarządzać Slave podczas transmisji, podajesz stan wysoki, wydajesz polecenie, zdejmujesz stan wysoki, wracasz do transmisji między modułami BT.

Każda komenda musi być zakończona znakiem końca i nowej linii. Czyli komend się nie wpisuje, a raczej wysyła. Niektóre modemy wymagają klepania literka po literce, temu wysyła się np. z terminala Arduino AT  z "Both NL & CR".

Link do komentarza
Share on other sites

Nawet tak się składa , że w arduino mega na pinach , 15 i 14 jest HS 

Bluetooth.begin(9600);  // hardware serial for Bluetooth

więc aby ten komentarz był prawdziwy to raczej trzeba by to było zapisać

Serail3.begin(9600);

 

Link do komentarza
Share on other sites

Raczej chodziło mi o zamianę początku:

//#include <SoftwareSerial.h>
// 
//#define SOFT_RX 15
//#define SOFT_TX 14
 
//SoftwareSerial Bluetooth(SOFT_RX, SOFT_TX); // RX, TX
HardwareSerial &Bluetooth = Serial3;
void(* resetFunc) (void) = 0;

int i = 1;
char c;
String readString;

 
void setup() { 
  Serial.begin(115200);   // hardware serial for the USB-PC
  Bluetooth.begin(9600);  // hardware serial for Bluetooth

i potem Bluetooth jest już Serial3, nie trzeba zmieniać całego programu.

I nawet z komentarzy wynika, że tak wcześniej było?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.