Anpassad styrenhetskod i VEXcode V5

Att använda kontrollenheten kan göra det enklare att köra och flytta din robot för att slutföra en uppgift. Det finns dock begränsningar med att använda Drive-programmet, och beroende på din robotkonstruktion eller uppgiften kan du vilja ha olika kontroller. Genom att koda styrenheten kan du optimera den så att den passar din robot och den aktuella uppgiften bättre. Det finns flera sätt att koda regulatorn i VEXcode V5. Var och en har sina fördelar och begränsningar, och vissa metoder är bättre lämpade för vissa situationer beroende på önskat resultat.

Den här artikeln går igenom tre olika alternativ för anpassad kodning av styrenheten i VEXcode V5. Varje metod kommer att beskrivas med dess fördelar, begränsningar och ett exempel på användningsfall som kan hjälpa dig att välja en metod. I den här artikeln skapades alla visade kodexempel för Clawbot. Samma koncept skulle dock kunna tillämpas på många andra byggen som finns på builds.vex.com, och anpassade byggen.

Alternativ 1: Tilldela knappar i enhetskonfigurationen

Det här alternativet är utmärkt när du använder en standardversion, som en Speedbot eller Clawbot, och vill komma igång snabbt.

Med det här alternativet kan du tilldela motorer, en drivlina eller motorgrupper till knappar på styrenheten i enhetskonfigurationen. För mer information om hur man tilldelar knappar till kontrollenheten i enhetskonfigurationen, se den här artikeln.

VEXcode V5-enheters meny med visade styrenhetsalternativ. Diagrammet över knappkontrollerna visar att de två joystickarna driver roboten i en tankdrivningskonfiguration. Upp- och Ner-knapparna styr en ArmMotorgrupp, och R-axelns knappar styr en ClawMotor.

Sammanfattning av alternativ 1: Tilldela knappar i enhetskonfigurationen

Fördelar Begränsningar Exempelsituation
  • Snabb installation utan kodning
  • Enklaste metoden
  • Lätt justerbar
  • Kan tilldela enskilda motorer, en standarddrivlina och motorgrupper till knappar
  • Knapptilldelningar är begränsade till antalet knappar på kontrollenheten.
  • Drivlinan får inte överstiga 4 motorer eller vara anpassad (endast en standarddrivning stöds, inte en H-drivning, holonomisk eller annan anpassad drivlina)
  • Manipulera en standardversion som en Speedbot, Clawbot eller en enkel modifiering av dessa standardversioner. Till exempel en Speedbot med ett insug fäst på framsidan som styrs av en motorgrupp.
  • Manipulera vilka knappar som motsvarar olika beteenden på roboten snabbt utan mycket kodning

Alternativ 2: Använda en Forever Loop

Om du använder en anpassad version istället för en standardversion, eller vill kunna anpassa din kontrollenhet mer, är det här alternativet ett bra alternativ. Att använda en Forever-loop är en bra introduktion till att skapa anpassad kod för din Controller.

Det här alternativet placerar alla villkor för kontrollenheten och dess tillhörande knappar i en Forever-loop. Detta ger mer flexibilitet, särskilt med anpassade byggdesigner, men kräver också viss kodningserfarenhet. En faktor att beakta när man använder det här alternativet är dock projektets längd och komplexitet. Ju fler villkor som läggs till, desto längre kan kodstacken bli. Det här innebär att flera block måste exekveras i ordning, och när det finns många block kan detta sakta ner projektkörningen. Långsammare projektkörning kan skapa en fördröjning mellan att trycka på kontrollknapparna och att se robotens beteende.

Det specifika exemplet som visas nedan är ett sätt att använda en Forever-loop med en specialdesignad robot (till exempel en robot med en specialdesignad drivlina) för att driva roboten och manipulera klon och armen för att interagera med objekt.

VEXcode V5-arbetsyta med Option 2-blockprojektet öppet. Projektet har en stapel med block och har konfigurerade enheter. Menyn Enheter öppnas på sidan och listar följande enheter: Controller1, ClawMotor på port 3, ArmMotor på port 8, LeftMotor på port 1 och RightMotor på port 10. I arbetsytan finns en stapel med block för att hantera regulatorns inmatning. Stacken läser När den startas, sätt ArmMotor stopping till hold och sätt ClawMotor stopping till hold. Resten av stacken finns i en Forever-loop. Den visar För alltid, sätt vänstermotorns hastighet till Controller1 3 position %, snurra vänstermotorn framåt, sätt högermotorns hastighet till Controller1 2 position % och snurra högermotorn framåt. Om Controller1 Upp trycks in, snurra ArmMotorn upp, annars om Controller1 Ner trycks in, snurra ArmMotorn ner, annars stoppa ArmMotorn. Slutligen, om Kontroller1 A trycks in, snurra Klomotorn på plats, annars om Kontroller1 B trycks in, snurra Klomotorn på plats, och annars stoppa Klomotorn.

Ladda ner VEXcode V5-projektfilen "Alternativ 2" >

Förklaring av alternativ 2-kod.

Kodbit Förklaring
Närbild av blockstapeln i VEXcode V5-projektet med alternativ 2. Två block är markerade och ligger utanför stackens Forever-loop, de läser "set ArmMotor stopping to hold" och "set ClawMotor stopping to hold". En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.
Närbild av blockstapeln i VEXcode V5-projektet med alternativ 2. Fyra block är markerade inuti stackens Forever-slinga. De läser För alltid, ställer in vänstermotorns hastighet till Controller1 3 position %, snurrar vänstermotorn framåt, ställer in högermotorns hastighet till Controller1 2 position % och snurrar högermotorn framåt.

 

V5-kontrollenheten för att visualisera dess knapplayout.

En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.

En Forever-slinga används för att kontinuerligt kontrollera vilka knappar som trycks ned på kontrollenheten.

Blocken [Ställ in motorhastighet] används för att ställa in motorhastigheten till den aktuella regulatorns position längs 2:ans och 3:ans axlar. Detta motsvarar att sätta en bil i körläge. Det behöver inte nödvändigtvis få bilen att röra sig, det bara sätter igång den.

Varje joystickaxel returnerar ett värde mellan -100 och +100, och returnerar värdet noll när den är centrerad. Detta innebär då att joystickens axlar, när de trycks ned, motsvarar -100 % till 100 %. Ju längre mot 100 eller -100 axlarna trycks, desto snabbare snurrar motorn.

Blocket [Spin] används sedan för att faktiskt röra motorn. Detta motsvarar att gasa på bilen när riktningen har ställts in. Detta gör att varje motor kan styras av en av de fyra styrenhetens axlar. 

Närbild av blockstapeln i VEXcode V5-projektet med alternativ 2. Ett if, else if, else-block är markerat inuti stackens Forever-loop. Den läser om Controller1 Upp trycks in, snurra ArmMotorn upp, annars om Controller1 Ner trycks in, snurra ArmMotorn ner, och annars stoppa ArmMotorn.

 

En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.

Blocket [If then else if then else] används för att mappa vissa beteenden till knappar som trycks ned eller släpps på kontrollenheten. I det här kodexemplet är villkoren som ställs in om Upp- eller Ner-knapparna trycks ned. Om så är fallet kommer vissa beteenden att inträffa, som att höja och sänka armen. Det finns också den andra delen av villkoret, om ingen av knapparna trycks ner är armen inställd på att sluta röra sig.

Observera att följande kodavsnitt i projektet för Claw följer samma förklaring.

Sammanfattning av alternativ 2: Använda en Forever Loop

Fördelar Begränsningar Exempelsituation
  • Kan anpassas efter behov, särskilt drivlinor med fler än fyra motorer.
  • Kan tilldela flera beteenden till en enda knapp
  • Kan tilldela beteenden till olika axlar på kontrollenheten (i motsats till de enda alternativen Vänster Arkad, Höger Arkad, Delad Arkad och Tankdrift i Enhetskonfigurationen)
  • Kräver en viss mängd kodningskunskaper (villkorskommandon, loopar och kunskap om knappar/joysticks på handkontrollen)
  • Potential för långsammare projektkörning, eller fördröjd knappresponstid. Eftersom alla kommandon finns i en enda Forever-loop kan kodkörningen gå långsamt beroende på de inställda villkoren och kodens längd.
  • Använda styrenheten med en specialbyggd robot, särskilt med en icke-standardiserad drivlina
  • När man vill tilldela flera beteenden till en enda knapp. Till exempel, när uppknappen trycks ner kan klon öppnas, köra framåt och sedan stängas runt ett föremål.

Alternativ 3: Använda händelser

Om du vill ha många anpassningsmöjligheter för din Controller är Använda Events det bästa alternativet för dig. Ett knapptryck kan utlösa flera robotbeteenden, som att trycka på en knapp för att öppna klon, höja armen och köra framåt ett visst avstånd. Att försöka koda flera beteenden per knapp inom en Forever-loop skulle göra att projektkörningen saktar ner dramatiskt – med hjälp av Events kan du göra detta mer effektivt.

Det här alternativet använder händelser för att dela upp projektflödet. Detta liknar att använda en Forever-loop, men gör att koden kan vara mer organiserad, så att knappkörningen har en snabbare svarstid. Snabbare svarstid innebär att du inte kommer att se någon fördröjning mellan att trycka på kontrollknapparna och att du ser robotens beteende. Det här exemplet visar samma beteenden som det föregående projektet, men utfört med hjälp av Events istället för Forever Loop.

VEXcode EXP-arbetsyta med Option 3-blockprojektet öppet. Projektet har 11 små staplar med block och konfigurerade enheter. Menyn Enheter öppnas på sidan och listar följande enheter: Controller1, ClawMotor på port 3, ArmMotor på port 8, LeftMotor på port 1 och RightMotor på port 10. I arbetsytan finns de 11 små staplarna med block som hanterar kontrollenhetens inmatning. Den första stacken läser När den startas, sätt ArmMotor stopping till hold och sätt sedan ClawMotor stopping till hold. Den andra stacken läser När Controller1 axel 3 ändras, sätt vänstermotorns hastighet till Controller1 3 position % och snurra sedan vänstermotorn framåt. Den tredje stacken läser När Controller1 axel 2 ändras, sätt högermotorhastigheten till Controller1 2 position % och snurra sedan högermotorn framåt. Den fjärde stapeln läser När Controller1-knappen uppåt trycks in, snurra upp ArmMotorn. Den femte stapeln läser När Controller1-knappen Upp släpps, stoppa ArmMotor. Den sjätte stapeln läser När Controller1-knappen nedtryckt, snurra ner ArmMotorn. Den sjunde stapeln läser När Controller1-knappen släpps, stoppa ArmMotor. Den åttonde stapeln läser När Controller1-knapp A trycks in, snurra ClawMotor och öppna. Den nionde stapeln läser När Controller1-knapp A släpps, stoppa ClawMotor. Den tionde stapeln läser När Controller1-knapp B trycks in, snurra ClawMotor för att stänga. Den elfte och sista stacken läser När Controller1-knapp B släpps, stoppa ClawMotor.

Ladda ner VEXcode V5-projektfilen "Alternativ 3" >

Förklaring av alternativ 3-kod.

Kodbit Förklaring
Närbild av en stapel med block i VEXcode V5-projektet med alternativ 3. Stacken läser När den startas, sätt ArmMotor stopping till hold och sätt sedan ClawMotor stopping till hold.
En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.
Närbild av två staplar med block i VEXcode V5-projektet med alternativ 3. Den första stacken läser När Controller1 axel 3 ändras, sätt vänstermotorns hastighet till Controller1 3 position % och snurra sedan vänstermotorn framåt. Den andra stacken läser När Controller1 axel 2 ändras, sätt högermotorhastigheten till Controller1 2 position % och snurra sedan högermotorn framåt.

 

V5-kontrollenheten för att visualisera dess knapplayout.

En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.

{When controller axis} Händelseblock används för att utlösa vissa beteenden när en av de fyra axlarna på kontrollenheten ändras med hjälp av joystickarna.

Blocken [Ställ in motorhastighet] används för att ställa in motorhastigheten till den aktuella regulatorns position längs A- och D-axlarna. Detta motsvarar att sätta en bil i körläge. Det behöver inte nödvändigtvis få bilen att röra sig, det bara sätter igång den.

Varje joystickaxel returnerar ett värde mellan -100 och +100, och returnerar värdet noll när den är centrerad. Detta innebär då att joystickens axlar, när de trycks ned, motsvarar -100 % till 100 %. Ju längre mot 100 eller -100 axlarna trycks, desto snabbare snurrar motorn.

Blocket [Spin] används sedan för att faktiskt röra motorn. Detta motsvarar att gasa på bilen när riktningen har ställts in. Detta gör att varje motor kan styras av en av de fyra styrenhetens axlar. 

Närbild av fyra staplar med block i VEXcode V5-projektet med alternativ 3. Den första stapeln läser När Controller1-knappen uppåt trycks in, snurra upp ArmMotorn. Den andra stapeln läser När Controller1-knappen Upp släpps, stoppa ArmMotor. Den tredje stapeln läser När Controller1-knappen trycks ner, snurra ner ArmMotorn. Den fjärde stapeln läser När Controller1-knappen släpps, stoppa ArmMotor.

 

En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.

{When controller axis} Händelseblock används för att koppla vissa beteenden till knappar som trycks ned eller släpps på kontrollenheten. I det här kodexemplet är villkoren som ställs in om Upp- eller Ner-knapparna trycks ned. Om så är fallet kommer vissa beteenden att inträffa, som att höja, sänka eller stanna upp armen.

Observera att den sista koden i projektet för Claw följer samma förklaring.

Sammanfattning av alternativ 3: Använda händelser

Fördelar Begränsningar Exempelsituation
  • Kan anpassas efter behov, särskilt drivlinor med fler än fyra motorer.
  • Kan tilldela flera beteenden till en enda knapp
  • Kan tilldela beteenden till olika axlar på kontrollenheten (i motsats till de enda alternativen Vänster Arkad, Höger Arkad, Delad Arkad och Tankdrift i Enhetskonfigurationen)
  • Snabbare kodkörning och därmed knappresponsivitet (eftersom varje villkor anropas separat och inte är inbäddat i en enda kodstack)
  • Kräver mest kodningskunskap om alternativen (villkor, loopar, händelser och kunskap om knappar/joysticks på kontrollenheten)
  • Använda styrenheten med en specialbyggd robot, särskilt med en icke-standardiserad drivlina
  • När man vill tilldela flera beteenden till en enda knapp utan fördröjning. Till exempel, när uppknappen trycks ner kan klon öppnas, köra framåt och sedan stängas runt ett föremål.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: