Autor Wątek: Kontrolery Arduino  (Przeczytany 53387 razy)

0 użytkowników i 1 Gość przegląda ten wątek.


Odp: Kontrolery Arduino
« Odpowiedź #91 dnia: Sierpnia 01, 2016, 17:58:42 »
Zrobiłem zgodnie z sugestią 3.14ter i mam dostęp do 2 MCP23017. Teraz pozostaje sprawdzić analogi i czekać na kit CY8CKIT-059. Zgodnie z sugestią golasa zamówię pod jednym z podanych linków. Możliwości tego kitu wydają się bardzo atrakcyjne. Jest to przejście jakby na wyższy poziom. Ja się na to piszę, ale prawda jest taka, że projekt zależy wyłącznie od umiejętności 3.14ter. Moja rola to tak jak wspomniałem rola testera.

Odp: Kontrolery Arduino
« Odpowiedź #92 dnia: Sierpnia 02, 2016, 10:43:33 »
Projekt MegaJoy jest bardzo dobrym projektem i może być stosowany w budowie kokpitów. Kolejny projekt jest bardzo ambitny i jeśli się uda to będzie to kolejny bardzo dobry projekt, ale już z górnej półki.
Chciałbym dokończyć moje testy z projektem MegaJoy.
Co trzeba zrobić aby spełnił założenia napisane w komentarzu szkicu.
1.Dostęp do 128 wejść.
Aby mieć dostęp do 128 wejść trzeba dopisać pozostałe 6 rejestrów MPC3-6 tak jak dla MCP1, MCP2.
Adresy np.:
const int MCP1_SLAVE_ADDR = 0x20;
const int MCP2_SLAVE_ADDR = 0x27;
//....
const int MCP8_SLAVE_ADDR = 0x26;
Odczyt:
   btnBank[0] = readMCP23017(MCP1_SLAVE_ADDR);
   btnBank[1] = readMCP23017(MCP2_SLAVE_ADDR);
   // ...
   // btnBank[7] = readMCP23017(MCP8_SLAVE_ADDR);
Odblokować pozostale zakresy 32-128
   for (i=1; i<16; i++)......
Dopisać inicjalizację dla MCP3-8 tak jak dla MCP1,2:
   initMCP23017(MCP1_SLAVE_ADDR);
   initMCP23017(MCP2_SLAVE_ADDR);
   //...
   initMCP23017(MCP8_SLAVE_ADDR);
2. Wejścia analogowe.
W założeniach jest 6 16 bit osi. 3.14ter sugerował, że program jest przygotowany na 4 osie od A0 do A3. Podłączyłem swój zestaw w następujący sposób. Joystick ośX na A0, ośY na A1, pot2 na A2 oraz pot1 na A3. Sprawdziłem na testerze analogów i działa to dosyć dziwnie podwójnie:
A0 ośX oraz obrót X   A1 ośY oraz obrót Y   A2 ośZ oraz obrót Z   A3 oba słupki suwaka
Trzeba to sprawdzić.
3. Ostatnia sprawa to 4 HAT.
Czy mogę prosić o wyjaśnienie co z HAT1-4.
Co do mnie to mam zamiar zabrać się za monitorowanie MegaJoy.


Odp: Kontrolery Arduino
« Odpowiedź #93 dnia: Sierpnia 02, 2016, 11:30:31 »
Osie zaprogramowałem tak, żeby sprawdzić czy wszystkie działają, mając tylko 4 potencjometry do dyspozycji. Stąd niektóre są sprzężone. Ten skrypt to tylko taki test czy w ogołe wszystko działa i nadaje przez USB do PC. Nie jest pełnym programem joysticka.

W pętli głównej od komentarza "//analog inputs" zaczyna się przypisywanie osi.

Żeby odczytać oś analogową należy:
- podłączyć suwak potencjometru do któregoś z wejść analogowych
- wpisać oś od razu jedną instrukcją (np. dla osi X):

 Joystick.setXAxis(analogRead(numer wejścia analogowego)<<6);

To "<<6" - przesunięcie w lewo 6 bitów to inaczej napisany iloczyn wynik*2^6, czyli *64. Wejścia ADC w AVR są 10 bitowe, a pełny zakres osi wysyłanej przez USB ma 16 bitów.

HATy
Obsługuje się je funkcją:

Joystick.setHatSwitch(numer HATa 0..3, położenie w stopniach 0...360 lub -1 dla OFF);

Położenie trzeba sobie wyliczyć samemu na podstawie rodzaju użytego HATa.
Muszę przyznać, że tą część przetestowałem najmniej (tylko generując różne wartości programowo). Akurat nie mam nic pod ręką, co mogłoby posłużyć za taki przełącznik. Tu mogą być jeszcze jakieś niespodzianki.
Zastanawiam się też czy używanie ustawienia w stopniach w ogóle ma sens. Ta wartość i tak zapisywana jest jako liczba 4 bitowa. Może od razu lepiej przyjąć docelowe wartości 0-8 odpowiadające położeniom góra, góra+prawo, prawo itd.

Czego nie było w pierwotnej bibliotece, a jest w mojej to dodatkowe funkcje do odczytywania wartości, np.:
Joystick.getXAxis(); zwraca uktualną wartość osi
Dlaczego tak? W celu oszczędzenia RAMu i dla bezpieczeństwa. Zmienne przechowujące wszystkie parametry joysticka są prywatne i reszta programu do dostęp do nich tylko poprzez odpowiednie funkcje. Te funkcje przydają się podczas monitowania działania joysticka przez UART:

uint16_t osX;
osX = Joystick.getXAxis();
term.print(F("Wartosc osi X="));
term.print(osX);



Odp: Kontrolery Arduino
« Odpowiedź #94 dnia: Sierpnia 02, 2016, 13:01:47 »
Osie działają prawidłowo, zrobiłem tak jak sugerowałeś. Z HAT poczekam, ponieważ też nie mam hat tylko przyciski. HAT-y podłączamy na wejście rejestru, czyli zmniejszamy liczbę dostępnych przycisków o 4 dla 1 HAT. Program, który używam do testów ma 2 HAT, czy ten który testowałeś z 4 HAT jest stabilny czy raczej nie.

Odp: Kontrolery Arduino
« Odpowiedź #95 dnia: Sierpnia 02, 2016, 13:29:57 »
Więc myślę, że o wiele praktyczniej będzie przepisać funkcję setHatSwitch, żeby jako argument przyjmowała stany przycisków Góra, Prawo, Lewo, Dół.
Wtedy będzie można po prostu wrzucić tam stany odczytane z MCP, bez niepotrzebnego przeliczania to na kąty.

Nawiasem mówiąc, czytając na forum o użyciu czujników Halla w joystickach przyszedł mi do głowy kolejny pomysł. Regulowanie zakresu poprzez zmianę rodzaju magnesów nie jest zbyt wygodne. Chyba powstanie kilka niewielkich, acz bardzo ułatwiających życie (budowę kokpitów znaczy się) gadżetów.
Ale to później.

Odp: Kontrolery Arduino
« Odpowiedź #96 dnia: Sierpnia 02, 2016, 17:04:18 »
Robiłem próby z konwerterem USB->RS232, ale pojawiły się problemy, dlatego zamawiam moduł bluetooth HC05. Znalazłem pod tym linkiem 
https://botland.com.pl/moduly-bluetooth/2569-modul-bluetooth-hc-05-ze-zlaczami.html
Muszę także kupić odbiornik bluetooth i tutaj mam pytanie jaki, ponieważ ceny się znacznie różnią.
MegaJoy już pracuje z 6 osiami i teraz tylko potrzeba monitoringu oraz HAT. CY8CKIT-059 także zamówię, ale pod innym linkiem.

Odp: Kontrolery Arduino
« Odpowiedź #97 dnia: Sierpnia 02, 2016, 18:38:19 »
Vito jeżeli znalazłeś taniej to może podzielisz się informacją gdzie można zakupić za mniejsze pieniądze:)

Odp: Kontrolery Arduino
« Odpowiedź #98 dnia: Sierpnia 02, 2016, 19:36:21 »
U mnie po otwarciu linku z ostatniego mojego wpisu na dole są inne produkty i tam są odbiornik bluetooth od 8.50 zł do 60 zł.  CY8CKIT-059 jeszcze nie sprawdzałem.
Cytuj
Wtedy będzie można po prostu wrzucić tam stany odczytane z MCP, bez niepotrzebnego przeliczania to na kąty.
Chciałbym nawiązać do tego cytatu. U mnie w drążku Cougara są 4 HAT-y gdzie ten od widoków teoretycznie powinien mieć 8 pozycji a praktycznie ma 4. Nie rozumiem różnicy pomiędzy 4 przyciskami na 4 kierunkach a HAT 4-kierunkowym. HAT-y także w sensie elektrycznym są przyciskami chyba, że jest inaczej. Może mi to ktoś wyjaśnić. Umieszczenie 4 przycisków na 4 kierunkach odpowiada położeniom kątowym czyli po co przeliczać kąty. Może czegoś nie dostrzegam.

Odp: Kontrolery Arduino
« Odpowiedź #99 dnia: Sierpnia 02, 2016, 19:52:44 »
Będzie kilka nowych funkcji w bibliotece do Arduino, głównie do szybszej obsługi przycisków i HATów.
Funkcje w pierwotnej bibiotece obsługują przyciski pojedynczo. W przypadku, kiedy jest ich sporo i jak u nas, są zgrupowane w 8 bitowe banki dzięki użyciu MCP23017, zamiast na piechotę sprawdzać każdy bit z osobna i ustawiać przyciski jeden za drugim, można po prostu wkopiować owe 8 bitów w odpowiednie miejsce.
Piszę właśnie dwie nowe funkcje, jedna jako argument przyjmować będzie 8 bitowy bajt ze stanami wejść. Przyda się dla różnorakich 8bitowych rejestrów przesuwnych, czy PCF8574. Trzeba tylko pamiętać o odwróceniu bitów, 1 oznacza przycisk wciśnięty. MCP23017 robi to automatycznie.
Druga funkcja, jako argument przyjmować będzie jedno słowo 16bitowe, specjalnie dla MCPka. Wystarczy podać tylko numer banku 0-15 (128 przycisków podzielone jest na 16 banków po 8 przycisków) i zmienną zwracanę przez f-cję readMCP2301.

HATy - pełny zestaw 4 szt. zajmie całego MCP. A skoro tak, to wygodniej będzie mieć funkcję typu "ten MCP odpowiedzialny jest tylko za HATy, odczytaj wszystko i poustawiaj tak, żeby działało".

Jeśli chodzi o ilość kierunków w HATach to to, co napiszę to tylko moje hipotezy, być może mylne.
Od strony sprzętowej HAT to po prostu 4 przyciski, które są w stanie wskazać 8 kierunków. W paczce danych, która wysyłana jest do komputera jeden HAT zajmuje 4 bity.
Jeśli działają tylko 4 kierunki, to możliwe, że problem leży po stronie programu, a ściślej deksryptora HID. Tam ustala się dokładnie ile i jakie dane będą nadawane.


Odp: Kontrolery Arduino
« Odpowiedź #100 dnia: Sierpnia 02, 2016, 20:40:40 »
W moim skrypcie próbowałem to robić w ten sposób, że jeżeli pojawiały się dwa sygnały np. prawo - góra to był to kąt 45 stopni, prawo 90, dół - prawo 135, dół 180, dół- lewo 225, lewo 270 i góra-lewo 315. Nie działało to wtedy poprawnie ale jakaś ścieżka pewnie do tego prowadzi.

Odp: Kontrolery Arduino
« Odpowiedź #101 dnia: Sierpnia 02, 2016, 21:49:08 »
Cytuj
.... jeżeli pojawiały się dwa sygnały np. prawo - góra to był to kąt 45 stopni, prawo 90, dół - prawo 135, dół 180, dół- lewo 225, lewo 270 i góra-lewo 315.
Faktycznie teraz kojarzę jak mogą działać HAT-y. Gdy robiłem metodą domową DCS w ICP to specjalnie zrobiłem prowadnicę w kształcie krzyża aby nie zwierały sąsiadujące przyciski. Tutaj mają zwierać dając dodatkowe 4 kąty.

Odp: Kontrolery Arduino
« Odpowiedź #102 dnia: Sierpnia 02, 2016, 23:16:47 »
Ufff... HATy działają. Dawno nic nie robiłem na AVR i pan Murphy uprzejmnie przypomniał (w postaci godziny zastanawiania się dlaczego wychodzą głupoty), że dostęp do stałych zapisanych we Flashu wymaga specjalnych funkcji. Jutro wrzucę nową wersję na Github.



4 HATy można podpiąć pod jednego MCP23017 i odczytać je jedną linijką.

Odp: Kontrolery Arduino
« Odpowiedź #103 dnia: Sierpnia 03, 2016, 08:20:37 »
Gratulacje i pytania, mam 2 MCP23017 oraz 16 przycisków tak jak na zdjęciach mojego modelu. Pytanie jak symulować HAT. Jeśli założę, że A0 to kierunek N, A1 E, A2 S oraz A3 to W, to naciśnięcie przycisków A1 oraz A2 powinno dać 135 stopni tak jak w Twoim przykładzie. Kolejne pytanie czy jest w programie przypisywanie dla wejść A0-A7, B0-B7 kierunków N,E,S oraz W dla 4 HAT.

Odp: Kontrolery Arduino
« Odpowiedź #104 dnia: Sierpnia 03, 2016, 14:17:33 »
No i ja tu wdepnę.... Będę miał na swoim panelu kontrolki podwozia, dzwignię podwozia i już gotowe wyłączniki pożarowe. Te w czasie działania odpowiednio  się podświetlają i to chcę też mieć w swoim kokpiciku. Wiem, że za pomocą Arduino mogę to osiągnąć tylko nie wiem jeszcze jak i co. Myślę o nabyciu Arduino Mega, kontrolki będą diodowe, tylko nie wiem czy mogą być na 12V ? No i sam nie wiem co jeszcze będzie mi potrzebne, zapewne jakiś soft, bo jakoś trzeba zgrać działanie kontrolek w grze z tymi na kokpicie.  Oczywiście przeczytam ten temat cały parę razy, tylko nie wiem czy ze zrozumieniem...
Latamy dzisiaj?

Oficer polityczny Padi-Van. (Prostak-1)