Skocz do zawartości

HC5 bluetooth + Arduino - problem z komunikacją


merinum

Pomocna odpowiedź

temat zmiany Int używając string z monitora chyba udało mi się ogarnąć - w sumie to z całej tej litanii związanej z obsługą string wyciągnąłem tylko:

  czas = take.substring(5,8).toInt();

i działa, jeszcze raz dzięki za pomoc

Link do komentarza
Share on other sites

To jest dobry początek rozwiązania. Dalej można by to rozwinąć weryfikując co się odbiera. Czy na początku są takie znaki, jakich się spodziewasz i co zrobić, gdy ich nie ma. Czy w spodziewanym miejscu są cyfry, nie cyfry lub mieszanka. Co zrobić jeśli wartość odczytana z cyfr jest pozbawiona sensu.

Link do komentarza
Share on other sites

no i jak już niby wydawałoby mi się, że już mam to co chciałem to znowu napotykam na barykadę z samego początku:

1. mam komunikacje HC05 -> Arduino (jak wpiszę na konsoli telefonu to wyświetla się na konsoli Arduino)

2. mam komunikację Arduino -> HC05 (jak wpiszę na Arduino to wyświetla się na konsoli HC05 w telefonie)

wszystko co wpiszę mi się elegancko pojaia zarówno na konsoli HC05 i konsoli Arduino.

problem zaczyna się wtedy kiedy próbuje dopasować jakiś wpisany String do funkcji i tu ciekawostka - wszystko działa z poziomu konsoli Arduino, a z poziomu konsoli HC05 (telefon) już nie - choć wpisany ciąg znaków wyświetla mi się identyczny jak ten wpisany w funkcji na kosoli Arduino - może ma ktoś pomysł co jest nie tak bo ciągle mnie coś zwala z nóg ...?

poniżej kod:

#define test 13
boolean stest = LOW;
String cmd = "";
void setup() {
Serial1.begin(9600); // komunikacja z HC05
Serial.begin(9600); // komunikacja z arduino
pinMode(test, OUTPUT);
}
void loop() {
if(Serial1.available()>0){
  cmd = Serial1.readStringUntil('\n');
  Serial.println(cmd);
  if(cmd == "123"){ // jak wpisuje to  konsoli HC05 to na konsoli wyświelta mi się dokładnie to samo, ale sama funkcja nie widzi, że to to samo ...
    digitalWrite(test,stest);
  }
  if(cmd == "124"){ // jak wpisuje to  konsoli HC05 to na konsoli wyświelta mi się dokładnie to samo, ale sama funkcja nie widzi, że to to samo ...
    digitalWrite(test,!stest);    
}
}
if(Serial.available()>0){
  cmd = Serial.readStringUntil('\n');
  Serial1.println(cmd);
  if(cmd == "123"){ // tutaj po wpisaniu na konsoli z Arduino funkcja to rozpoznaje i uruchami kod ....
    digitalWrite(test,stest);
  }
  if(cmd == "124"){// tutaj po wpisaniu na konsoli z Arduino funkcja to rozpoznaje i uruchami kod ....
    digitalWrite(test,!stest);    
}
}
}

 

 

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

6 minut temu, ethanak napisał:

Dodaj tam na wszelki wypadek coś w stylu:

teraz tak sprawdzam i widzę, że to jest problem tylko tego softu (Serial bluetooth terminal) - nie wiem czy problem nie leży czasem po stronie tego ekranu - nie za bardzo wiem co poszczególne pozycje znaczą.

co do "cmd.trim();" to w którym dokładnie miejscu kodu to wstawić?

 

Screenshot_20220526-091543.jpg

Link do komentarza
Share on other sites

2 godziny temu, ethanak napisał:

Dodaj tam na wszelki wypadek coś w stylu:


cmd.trim();

patent z tym poleceniem działa jak należy - teraz już nie ma problemu. dziękuję za pomoc

Link do komentarza
Share on other sites

@merinum Ja tylko wtrącę, że Twoje podejrzenia o opcje ze screena są też prawidłowe. Nie ma jednego powszechnie przyjętego standardu zapisu lub transmisji przerwy między liniami. Np. przy zapisie plików Windows tradycyjnie używa pary znaków CR (Carriage Return) i LF (Line Feed), które w C to \r i \n, Linux używa tylko LF, co do Mac OS to dawne wersje chyba używały CR, a teraz już LF.

Twój kod czytał łańcuch aż do natrafienia na \n, czyli LF. Jeżeli apka wysyłała parę CR i LF, to, zgodnie z tym co napisał @ethanak, zostawało Ci \r.

Na marginesie z portem szeregowym bywa jeszcze dodatkowa trudność, że może być dokonywana konwersja poza samą aplikacją, w API/sterowniku, jakkolwiek zwał. Tak jest np. na Linuksie, jeśli się nie przełączy urządzenia w tryb surowy.

Edytowano przez trainee
Link do komentarza
Share on other sites

fachowe wyjaśnienie kwestii, widzę że czegokolwiek by się tutaj nie dotknęło to ciągnie to za sobą sporo zagadnień, ale najważniejsze, że dzięki wam można iść do przodu 🙂

Link do komentarza
Share on other sites

powiedzcie mi jakiego narzędzia użyć by sterowanie ledami, zmiennymi mam już zrobione w monitorze HC05 i chciałbym to podpiąć pod jakaś aplikację by za każdym razem nie wpisywać koment jak chce się coś zmienić. możecie coś polecić? tych ledów mam około 15 i zmiennych też jakoś tyle - z tego co widziałem to RoboRemo jest nawet dość intuicyjny, ale w wersji frewarowej to jest możliwość wstawienia tylko kilku buttonów, reszta po opłaceniu wersji pro

Link do komentarza
Share on other sites

tak, to android, zaraz kuknę co to jest i jak się z tym obchodzić .... bo w sumie jak dla mnie to już mega sukces, że działa mi to wszystko po HC05 i konsoli, a jak już bym to poprogramował przypisując guziki i suwaki to byłby szczyt moich oczekiwań

Link do komentarza
Share on other sites

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.