Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Konverterar PPM -signaler från en radiomottagare till joysticklägen
Använd den för att spela dina favoritspel och flygsimulatorer med din R/C -radiosändare. Denna instruktör använder en Arduino från littleBits och en DSMX -mottagare plus ett enkelt kodavsnitt för att göra denna konvertering.
Du kommer behöva
- Kraft
- Arduino
- USB -kablar
- stifthuvuden
- bygelkabel
- en radiomottagare med PPM -utgång.
Steg 1: Lödpinnhuvuden till Arduinos extra I/O -portar
För att driva mottagaren (RX) måste stifthuvuden läggas till i Arduino. Detta kommer också att göra kablarna mellan bit och RX mycket enklare. Se https://discuss.littlebits.cc/t/using-the-additional-i-os-on-the-arduino-bit för mer information.
Steg 2: Lägg till Arduino Joystick -biblioteket i din IDE
Du hittar biblioteket på GitHub, https://github.com/MHeironimus/ArduinoJoystickLib… Tack, Matthew Heironimus, för att du skrev det.
Endast vissa Arduinos kan efterlikna ett HID som en joystick. Eftersom littleBits -mikrokontrollern är en Arduino Leonardo i hjärtat är du bra att gå.
Steg 3: Flasha koden till Arduino
#include #define inputPin 16#definiera kanaler 4 #define lo 800 // justera till utmatning av RX#definiera hi 1600 // justera till utmatning av RX#definiera filter 10int kanal [kanaler]; int föregående värde [kanaler]; int counter = 0; Joystick_ Joystick (JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_MULTI_AXIS, 0, 0, true, true, false, false, false, true, true, false, false, false); void setup () {Joystick.setXAxisRange (lo, Hej); Joystick.setYAxisRange (lo, hej); Joystick.setThrottleRange (lo, hej); Joystick.setRudderRange (lo, hej); Joystick.begin (); Serial.begin (9600); pinMode (inputPin, INPUT); } void loop () {if (pulseIn (inputPin, HIGH)> 3000) {for (int i = 0; i <= channel-1; i ++) {channel = pulseIn (inputPin, HIGH); } för (int i = 0; i <= kanaler-1; i ++) {if ((kanal > 2000) || (kanal <500)) {kanal = föregående värde ; } annars {kanal = (föregående värde +kanal )/2; räknare ++; }} Joystick.setXAxis (kanal [0]); Joystick.setYAxis (kanal [1]); Joystick.setThrottle (kanal [2]); Joystick.setRudder (kanal [3]); } if (counter> filter) {för (int i = 0; i <= channel-1; i ++) {Serial.print ("channel"); Serial.print (i+1); Serial.print (":"); Serial.println (kanal ); föregående värde = kanal ; } räknare = 0; }}
Tänk på att koden som överbryggar mellan R/C -signalen och den emulerade USB HID kommer i sin enklaste form. Funktionen som används här - pulseIn - är en blockerande funktion. Läs här och här hur du implementerar ett icke-blockerande tillvägagångssätt med avbrott.
Steg 4: Gör ledningen
Anslut bygelkabel / DuPont -kablar mellan bit och RX. Anslutningarna i slutet av dessa kablar måste vara hona. Vi ansluter GND (blå), VCC (brun) och signal (orange) från PPM -porten på RX till GND, VCC och d16 på Arduino.
Steg 5: Bind mottagaren
Koppla från Arduino från strömmen. Sätt bindningsselen i kontaktplatsen märkt BIND på RX. Slå på din radiosändare och sätt den i bindningsläge. Applicera sedan ström på Arduino. Bindningsprocessen lyckades när lysdioden i mottagaren tänds.
Steg 6: Justera koden efter dina omständigheter
Konstanterna hi and lo i Arduino -skissen måste ändras för att återspegla den faktiska utsignalen från mottagaren du använder.
#define lo 800
#define hi 1600
Signalerna inuti PPM -pulsen sträcker sig idealiskt från 1000μs till 2000μs. RX som används i denna instruerbara utdata värderar ungefär mellan 800 och 1600 och är något annorlunda på varje kanal. För att ta reda på vilket intervall din mottagare har, öppna seriemonitorn i Arduino IDE för att se utmatningen från din RX. Det kommer att se ut så här:
kanal 1: 728
kanal 2: 729 kanal 3: 703 kanal 4: 726 kanal 1: 1681 kanal 2: 1639 kanal 3: 1613 kanal 4: 1676
När du har en tydligare uppfattning om det intervall som din RX -utmatning ger, välj bra approximationer för hej och lo och ändra konstanterna därefter. Ladda sedan upp skissen till Arduino igen.
Steg 7: Kalibrera den emulerade joysticken
Anslut enheten till din dator och använd kalibreringsfunktionen i ditt operativsystem för att kalibrera den emulerade joysticken. Ett bra verktyg för Linux är jstest-gtk.
Ytterligare förbättringar
- Skriv icke-blockerande kod (se steg 3)
- Ange intervall per kanal, inte globalt (se steg 6)
Vidare läsning
- Redcon CM703
- PPM