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 EXP. 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 EXP. 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 BaseBot 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.
Sammanfattning av alternativ 1: Tilldela knappar i enhetskonfigurationen
|
Fördelar |
Begränsningar |
Exempelsituation |
|---|---|---|
|
|
|
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.
Ladda ner VEXcode EXP-projektfilen "Alternativ 2" >
Förklaring av alternativ 2-kod.
|
Kodbit |
Förklaring |
|---|---|
|
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 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. |
|
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 |
|
|
|
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.
Ladda ner VEXcode EXP-projektfilen för "Alternativ 3" >
Förklaring av alternativ 3-kod.
|
Kodbit |
Förklaring |
|---|---|
|
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 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. |
|
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 |
|
|
|