Styra Arduino med Gamepad (4 / 5 steg)
Steg 4: Att sätta BITARNA ihop
Om du förstått fullt ut allt material i föregående steg, bör du kunna skriva ett XBox controller-till-UART gränssnitt eller genomföra PC-Arduino kommunikation på egen hand.
Som ett sista exempel jag kommer att använda en mycket enkel grej: en Arduino med några ljusdioder och summern.
Ursprungligen jag ville bygga en liten RC bil, men på grund av långa förseningar i delar leverans kommer inte jag kunna göra det åtminstone för en vecka eller så... Om du har ett par av EasyDriver stiger ombord kan du ansluta riktning stift i stället för gula lampan, och motor steg stift i stället för röda lysdioder (se skiss ovan). En piezo-Summer ansluten till pin D3 reagerar på tryck på varje knapp på handkontrollen.
Den hela funktionsbeskrivning kokar ner till detta:
- Läs XBox controller staten och omvandla det till en kort, men väl avgränsad sträng.
I mitt fall skickar jag bara motor hastighet, riktning och knappläge, så meddelandet ser ut så här:
LLL RRR D BBBB
där LLL är vänster Motor hastigheten, RRR är den rätt varvtal och BBBB representerar knappläge.
D är en motor riktning, som äger endast två värden: 1 för framåt och 0 för bakåt.
Både LLL och RRR kommer att normaliseras för d÷dzoner och skalas till mindre värden (under 255)Alternativt kan du skicka XINPUT rådata till arduino och bearbeta den på mikrokontroller själv.
- Nästa, vi skickar detta meddelande via UART till Arduino
- Ange alla motor hastigheter till förvärvade värden och kontrollera knappen för att fastställa ytterligare åtgärder
- Skicka data till PC (jag skickar bara motor hastigheter för felsökning)
- Förvärvade data bearbetas till vissa visuell representation. Använd vad du vill, vare sig det är en enkel text i konsolfönster, eller GUI-baserat utmatning, som förloppsindikatorer, diagram, flödesscheman eller även OpenGL renderingen.
Vi har redan lärt sig att läsa UART meddelanden med evenemang, så vi inte behöver verkligen oroa rätt tid. PC-side-koden kan förbättras ytterligare med sådana häftiga saker, som multi-threading och asynkron kommunikation, men vi kommer inte att göra det idag.
Så, låt oss börja med Arduino.
Bifogat är en enkel skiss för vår RC bil. Inget speciellt, bara ställa motor hastigheter beroende på thumbstick position.
sqrt(LX*LX+ly*ly) anger omfattningen av varvtal
LY sign(-or +) bestämmer rörelseriktning (framåt / bakåt).
Baserat på värdet av LX vi definiera skillnaden mellan vänster och höger varvtal. Om LX är positivt, då lämnade motor är inställt på aktuella hastighet värdet och höger motor uses(128-LX). Om LX är negativt, tilldelar vi värden motsatt sätt.
Jag har skapat en liten klass, som kallas XBoxUart, som kombinerar allt vi lärt oss tidigare i ett enda program på PC-sidan.
Snälla, Använd länkarna nedan för att ladda ner källkoden för PC och Arduino sida.
Först, ladda upp den arduino skissen. Du kan testa om det fungerar genom att öppna en seriell bildskärm på 115200 bod och skickar data manuellt. Till exempel meddelande "100 100 1 0" är en motsvarighet till flytta framåt 100 steg (vänster och höger motors) med inga knappar tryckte. Svar bör du få strängar, visas i skärmdumpen ovan.
Obs: Glöm inte att ändra namnet på COM port till vad din Arduino CDC är. Om du har en HC-05 modul, kan du ansluta den direkt till Arduino RX och TX stift, om du vill prova det utan sladdar.
Nu kan du kompilera C++-kod i Visual Studio, starta handkontrollen XBox, starta programmet på din PC och se hur lysdioder (eller motorer) ändrar sitt beteende med rörligheten för med styrspak! Att trycka på någon knapp kommer att utlösa summern. Produktionen i konsolfönstret kommer vara som liknar det du ser på den sista skärmbilden.