Skocz do zawartości

HC5 bluetooth + Arduino - problem z komunikacją


Pomocna odpowiedź

Dnia 26.05.2022 o 20:26, merinum napisał:

a jak już bym to poprogramował przypisując guziki

w serial bluetooth terminal masz guziki w: settings-->misc.-->macro buttons.

Link to post
Share on other sites

heheh, no faktycznie, są guziki - rewelacja :):):), wielkie dzieki za wskazówkę.

tak patrzałem sobie na MIT inventor i musze przyznać, że ma to fajne opcje jak chodzi o kreatywność tworzenia czegoś, ale tak na to patrzałem i myślę, że trochę bym musiał nad tym przysiedzieć, żeby coś w tym wytworzyć, choć nie ukrywam, że kusi by się za to zabrać

Link to post
Share on other sites

panowie, a mam jeszcze pytanie już z innej beczki - przypisując komendy do konsoli mam coś takiego co jest poniżej tylko, że dla każdego on mam 20 takich pozycji, potem jeszcze kolejne 20 na wyłączenie, czy jest jakaś droga by ten kod uprościć?

if(Serial1.available()>0){
  cmd = Serial1.readStringUntil('\n');
  cmd.trim();
//funkcja ON 
if(maszyna1 == 0 && cmd == "mc63on"){
  maszyna1 = 1;
  Serial1.println("maszyna 63 centralny zasyp: ON");
  Serial1.print("status maszyny: ");  
  Serial1.println(maszyna1);  
  }
if(maszyna2 == 0 && cmd == "mc64on"){
  maszyna2 = 1;
  Serial1.println("maszyna 64 centralny zasyp: ON");
  Serial1.print("status maszyny: ");  
  Serial1.println(maszyna2);  
  }
if(maszyna3 == 0 && cmd == "mc65on"){
  maszyna3 = 1;
  Serial1.println("maszyna 65 centralny zasyp: ON");
  Serial1.print("status maszyny: ");  
  Serial1.println(maszyna3);  
  }

 

Link to post
Share on other sites
(edytowany)

@merinum parsować otrzymaną komendę, sprawdzając prefiks "mc", potem istnienie cyfr i zamieniać je na liczbę, sprawdzać czy dalej jest "on" czy "off", trzymać maszyny w tablicy, żeby potem można było maszyna[odczytana_liczba] = 1.

Edytowano przez trainee
Link to post
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

witam ponownie

co do moich postępów w przygotowaniu kodu arduino i tworzeniu aplikacji przy pomocy MIT app dzieki waszym wskazówką jestem już dosyć daleko by zaczęło mi to działać jak powinno, ale napotkałem na inny problem - chyba nawet nie do końca związany z komunikacją pomiędzy arduino i HC05, a samym kodem, a mianowicie problem jest taki:

mam komende, która zmienia mi zadeklarowaną zmienną i tutaj wszystko działa poprawnie, co zmienię komendą (chodzi o czas )to zmienia się w programie i dioda świeci jak trzeba bądź dłużej bądź krócej, ale działa, problem pojawia mi się w przypadku zadeklarowanej zmiennej, która używa zmiennej którą zmieniam - tutaj jest to bardziej skomplikowane bo program wogóle nie widzi tego co zmieniłem i cały czas wylicza mi czas w stosunku do czasu domyślnego, zadeklarowanego na początku w programie - powiedzcie mi co tu jest nie tak i co źle robię, że druga zmienna nie zmienia mi czasu zgodnie z nowym zmienionym czasem poprzez komendę, pomocy, bo nie mam pojęcia jak to ogarnąć, a problem jest w tym, że mam sporo takich zależnych zmiennych, które musiały by się na nowo przeliczać, prosze wesprzyjcie mnie

 

unsigned long maszyna1_proznia_d = 20;
unsigned long maszyna2_proznia_d = 20;

unsigned long maszyna1_zawor_d = round(maszyna1_proznia_d*0.6);
unsigned long maszyna2_zawor_d = round(maszyna2_proznia_d*0.6);

//zmiana czasu próźni
if(cmd.substring(0,5) == "mc63t"){
  maszyna1_proznia_d = cmd.substring(5).toInt();

 

Link to post
Share on other sites
(edytowany)

 

40 minut temu, merinum napisał:

co źle robię, że druga zmienna nie zmienia mi czasu zgodnie z nowym zmienionym czasem poprzez komendę

Błąd tkwi w tym, że nie rozumiesz działania własnego programu.

Jeśli masz taki kod:
 

int x = 7;
int y = 2 * x;

to owszem, zmienna y będzie miała wartość 14, i żadne późniejsze zmiany wartości x nie będą wpływać na wartość y (bo i niby jak, magicznie?)

Potrzebujesz funkcji a nie zmiennej - coś w stylu:
 

int y() {
	return 2 * x;
}

Wtedy za każdym razem kiedy odwołasz się do y() będziesz miał prawidłowy wynik, zależny od aktualnej wartości x.

Równie dobrze możesz użyć definicji:

#define y (2*x)

Wtedy nawet w programie nie musisz nic zmieniać. Przykładowo zamiast :

unsigned long maszyna2_zawor_d = round(maszyna2_proznia_d*0.6);

możesz użyć czegoś w stylu:

#define maszyna2_zawor_d ((unsigned long)round(maszyna2_proznia_d*0.6))

 

Edytowano przez ethanak
Link to post
Share on other sites
6 minut temu, ethanak napisał:

Błąd tkwi w tym, że nie rozumiesz działania własnego programu.

dziękuje bardzo za wskazówkę - no faktycznie po staremu zwraca mi taką wartość jaką powinie zwrócić, a ja szukam dziury w całym.

po wprowadzeniu twoich sugestii do programu wszystko teraz działa jak powinno. jeszcze raz wielkie dzięki, jak byś mnie nie wyprowadził z błędu to kręciłbym się w kółko cały czas 🙂

Link to post
Share on other sites

wybaczcie te milion pytań, ale drąże temat tej aplikacji w MIT inventor sterującej ledami i mam teraz znowu zawias - czy jest jakaś możliwość by po włączeniu aplikacji sprawdziła ona aktualny stan pinów na arduino bądź jaka jest wartość zmiennych i na tej podstawie zmieniła switch na on bądź off lub wyświetliła aktualną wartość zmiennej np. czasu - użyłem tutaj tiny db i fajnie mi zapamiętuje ostatnie ustawienia sliderów, switchy przed jej wyłączeniem, ale co jak ktoś na innym urządzeniu coś zmieni to jak to zrobić by na innym status się aktualizował po jego załączeniu? nie wiem czy dobrze opisałem problem, ale mam nadzieje, że ktoś mi poradzi w jakim kierunku tu iść by to zrobić

Link to post
Share on other sites

Najprościej: przy włączeniu zapytać o stan  i powtarzać pytanie aż się dostanie odpowiedź. Np. niech apka wysyła znak zapytania, a Arduino po jego otrzymaniu odpowiada ciągiem liczb.

Link to post
Share on other sites

no, ok, jak by to było w drugą stronę to biorąc pod uwagę to czego mnie już nauczyliście to wysłałbym wszystkie stany w jednym stringu i za pomocą xxx.substringa powyciągałbym po kolei wszystkie stany zmiennych i pinów, ale problem jest tutaj taki, że nie mam pojęcia jak się za to zabrac ze strony MIT inventora ... od czego tu zacząć by uzyskać taki efekt? odczytac dane  z arduino już potrafię, ale co dalej z nimi zrobić? jaka funcja odpowiada arduinowemu xxx.substring by zrobić warunki?

Link to post
Share on other sites
(edytowany)

jeśli chodzi o wsadzenie gdzieś tego co odczytamy to poniższe pokazuje mi co odpowiada arduino, ale jak dalej iść?

xxx.JPG

Edytowano przez Gieneq
Link to post
Share on other sites

Hm... ja się ostatnio tym bawiłem dość dawno, ale jest tam o ile pamiętam parę funkcji do obróbki stringów. Możesz poczekać aż ktoś się zlituje i podpowie albo poszukać samemu (druga wersja jest szybsza)

Link to post
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.