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.

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ć

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);  
  }

 

(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

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();

 

(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
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 🙂

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ć

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.

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?

(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

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)

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...