Aangepaste controllercode in VEXcode EXP

Het gebruik van de controller kan het gemakkelijker maken om uw robot te besturen en te verplaatsen om een ​​taak te voltooien. Er zijn echter beperkingen aan het gebruik van het Drive-programma, en afhankelijk van uw robotconstructie of de taak die u moet uitvoeren, wilt u mogelijk andere bedieningselementen. Door de controller te coderen, kunt u de controller optimaliseren, zodat deze beter bij uw robot en de uit te voeren taak past. Er zijn verschillende manieren om de Controller in VEXcode EXP te coderen. Elk heeft zijn voordelen en beperkingen, en sommige methoden zijn beter geschikt voor bepaalde situaties, afhankelijk van het gewenste resultaat.

Dit artikel begeleidt u door drie verschillende opties voor het op maat coderen van de controller in VEXcode EXP. Elke methode wordt beschreven met zijn voordelen, beperkingen en een gebruiksvoorbeeld om u te helpen bij het kiezen van een methode. Voor de doeleinden van dit artikel zijn alle getoonde codevoorbeelden gemaakt voor de Clawbot. Dezelfde concepten kunnen echter worden toegepast op talloze andere builds op builds.vex.comen op aangepaste builds.

Optie 1: Knoppen toewijzen in de apparaatconfiguratie

Deze optie is geweldig als u een standaardbuild gebruikt, zoals een BaseBot of Clawbot, en snel aan de slag wilt.

Met deze optie kunt u motoren, een aandrijflijn of motorgroepen toewijzen aan knoppen op de controller in de apparaatconfiguratie. Voor meer informatie over het toewijzen van knoppen aan de controller in de apparaatconfiguratie, bekijk dit artikel.

VEXcode EXP Devices-menu met de controlleropties weergegeven. Het diagram met de knoppenbediening laat zien dat de twee joysticks de robot in een tank-aandrijfconfiguratie aansturen. Met de knoppen Omhoog en Omlaag bedient u een ArmMotorGroup, en met de knoppen op de R-as bedient u een ClawMotor.

Samenvatting van optie 1: knoppen toewijzen in de apparaatconfiguratie

Voordelen

Beperkingen

Voorbeeldsituatie

  • Snelle installatie zonder codering
  • Eenvoudigste methode
  • Gemakkelijk verstelbaar
  • Kan individuele motoren, een standaard aandrijflijn en motorgroepen aan knoppen toewijzen
  • Knoptoewijzingen zijn beperkt tot het aantal knoppen op de controller
  • De aandrijflijn mag niet meer dan 4 motoren bevatten en mag niet worden aangepast (alleen een standaardaandrijving wordt ondersteund, geen H-aandrijving, holonomische of andere aangepaste aandrijflijn)
  • Het manipuleren van een standaardbuild zoals een BaseBot, Clawbot of een eenvoudige aanpassing van die standaardbuilds. Bijvoorbeeld een BaseBot met een aan de voorkant bevestigde inlaat, bestuurd door een motorgroep.
  • Snel manipuleren welke knoppen overeenkomen met verschillende gedragingen op de robot, zonder veel codering

Optie 2: Een Forever Loop gebruiken

Als je een custom build gebruikt in plaats van een standaard build, of als je meer maatwerk in je controller wilt hebben, is deze optie een goede keuze. Het gebruik van een Forever-lus is een geweldige introductie om aangepaste code voor je controller te maken.

Deze optie plaatst alle voorwaarden voor de controller en de bijbehorende knoppen in een Forever-lus. Dit biedt meer flexibiliteit, vooral bij op maat gemaakte ontwerpen, maar vereist ook enige codeerervaring. Een overweging bij het gebruik van deze optie is echter de lengte en complexiteit van uw project. Hoe meer voorwaarden er worden toegevoegd, hoe langer de codestapel kan worden. Dit betekent dat meerdere blokken achter elkaar moeten worden uitgevoerd, en als er veel blokken zijn, kan dit de uitvoering van het project vertragen. Een langzamere projectuitvoering kan een vertraging veroorzaken tussen het indrukken van de controllerknoppen en het zien van het robotgedrag.

Het specifieke voorbeeld hieronder is één manier waarop u een Forever-lus kunt gebruiken met een robot met een aangepast ontwerp (zoals een robot met een aangepaste aandrijflijn) om de robot aan te drijven en de klauw en arm te manipuleren om met objecten te communiceren.

VEXcode EXP-werkruimte met het project Optie 2-blokken geopend. Het project bestaat uit een stapel blokken en geconfigureerde apparaten. Het menu Apparaten wordt aan de zijkant geopend en bevat de volgende apparaten: ArmMotor op poort 3, ClawMotor op poort 4, Controller, LeftMotor op poort 6 en RightMotor op poort 10. Ten slotte is er de stapel blokken die de controllerinvoer verwerkt. De stapel luidt: Wanneer gestart, stel ArmMotor stopping in op hold en stel ClawMotor stopping in op hold. De rest van de stapel bevindt zich in een Forever-lus. Er staat Forever, stel de LeftMotor-snelheid in op de positie van Controller 3 (%), laat de LeftMotor vooruit draaien, stel de RightMotor-snelheid in op de positie van Controller 2 (%) en laat de RightMotor vooruit draaien. Als vervolgens Controller Up wordt ingedrukt, dan draait u ArmMotor omhoog. Als anders Controller E Down wordt ingedrukt, dan draait u ArmMotor omlaag. Als anders ArmMotor wordt gestopt. Als laatste, als Controller A is ingedrukt, draai dan ClawMotor open. Als Controller B is ingedrukt, draai dan ClawMotor dicht. Als dat niet het geval is, stop dan ClawMotor.

Download het "Optie 2" VEXcode EXP-projectbestand >

Uitleg van optie 2-code.

Codestuk

Uitleg

Close-up van de stapel blokken in het Option 2 VEXcode EXP-project. Twee blokken zijn gemarkeerd en bevinden zich buiten de Forever-lus van de stapel. Er staan set ArmMotor stopping to hold en set ClawMotor stopping to hold.

Voor dit codevoorbeeld is een Clawbot gebruikt. Wanneer de knoppen op de controller worden gebruikt om de arm omhoog en omlaag te brengen, zal de arm, zodra de knop wordt losgelaten, door de zwaartekracht weer naar beneden vallen. Als u zowel de arm als de klauw op “vasthouden” zet, zorgt u ervoor dat zowel de arm als de klauw op hun plaats blijven, zelfs nadat de knoppen op de controller zijn losgelaten.

Close-up van de stapel blokken in het Option 2 VEXcode EXP-project. Vier blokken worden gemarkeerd in de Forever-lus van de stapel. Ze lezen Forever, stellen de LeftMotor-snelheid in op de positie van Controller 3 in %, laten de LeftMotor vooruit draaien, stellen de RightMotor-snelheid in op de positie van Controller 2 in % en laten de RightMotor vooruit draaien. Schema van de EXP-controller met gelabelde knoppen en joysticks. Het beeld is vanaf de voorkant van de controller. De assen van de linkerjoystick zijn gemarkeerd met 3 en 4. De middelste knop van de linkerjoystick heeft het label L3. De twee ronde knoppen onder de linker joystick zijn genaamd Omhoog en Omlaag. De assen van de rechterjoystick zijn gemarkeerd met 1 en 2. De middelste knop van de rechterjoystick heeft het label R3. De twee ronde knoppen onder de rechterjoystick zijn gemarkeerd met A en B.

Voor dit codevoorbeeld is een Clawbot gebruikt. Wanneer de knoppen op de controller worden gebruikt om de arm omhoog en omlaag te brengen, zal de arm, zodra de knop wordt losgelaten, door de zwaartekracht weer naar beneden vallen. Als u zowel de arm als de klauw op “vasthouden” zet, zorgt u ervoor dat zowel de arm als de klauw op hun plaats blijven, zelfs nadat de knoppen op de controller zijn losgelaten.

Er wordt gebruik gemaakt van een Forever-lus om continu te controleren welke knoppen op de Controller worden ingedrukt.

De blokken [Set motor speed] worden gebruikt om de motorsnelheid in te stellen op de huidige positie van de controller langs de 2 en 3 assen. Dit komt overeen met het in de rij zetten van een auto. Dat zorgt er niet noodzakelijkerwijs voor dat de auto in beweging komt, het zet hem alleen maar in beweging.

Elke joystickas retourneert een waarde tussen -100 en +100, en retourneert een waarde nul wanneer deze gecentreerd is. Dit betekent dan dat de assen van de joystick, wanneer ingedrukt, gelijk zijn aan -100% tot 100%. Hoe verder richting 100 of -100 de assen worden geduwd, hoe sneller de motor zal draaien.

Het [Spin]-blok wordt dan gebruikt om de motor daadwerkelijk te laten bewegen. Dit komt overeen met het indrukken van het gaspedaal op de auto zodra de richting is bepaald. Hierdoor kan elke motor worden bestuurd door een van de vier controller-assen.

Close-up van de stapel blokken in het Option 2 VEXcode EXP-project. Een if, else if, else-blok wordt gemarkeerd in de Forever-lus van de stapel. Het geeft aan dat als Controller Up wordt ingedrukt, ArmMotor omhoog moet draaien. Als Controller Down wordt ingedrukt, ArmMotor omlaag moet draaien. Anders moet ArmMotor gestopt worden.

Voor dit codevoorbeeld is een Clawbot gebruikt. Wanneer de knoppen op de controller worden gebruikt om de arm omhoog en omlaag te brengen, zal de arm, zodra de knop wordt losgelaten, door de zwaartekracht weer naar beneden vallen. Als u zowel de arm als de klauw op “vasthouden” zet, zorgt u ervoor dat zowel de arm als de klauw op hun plaats blijven, zelfs nadat de knoppen op de controller zijn losgelaten.

Het blok [Als dan anders als dan anders] wordt gebruikt om bepaald gedrag toe te wijzen aan knoppen die op de controller worden ingedrukt of losgelaten. In dit codegedeelte gelden de ingestelde voorwaarden als de knoppen Omhoog of Omlaag worden ingedrukt. Als dat zo is, zullen bepaalde gedragingen plaatsvinden, zoals het omhoog en omlaag brengen van de arm. Er is ook het else-gedeelte van de voorwaarde: als geen van beide knoppen wordt ingedrukt, stopt de arm met bewegen.

Merk op dat het volgende codegedeelte in het project voor de Claw dezelfde uitleg volgt.

Samenvatting van Optie 2: Een Forever Loop gebruiken

Voordelen

Beperkingen

Voorbeeld situatie

  • Geschikt voor maatwerk, vooral aandrijflijnen met meer dan 4 motoren
  • Kan meerdere gedragingen aan één knop toewijzen
  • Kan gedrag toewijzen aan verschillende assen op de controller (in tegenstelling tot de enige opties van Left Arcade, Right Arcade, Split Arcade en Tank Drive in de apparaatconfiguratie)
  • Vereist enige codeerkennis (conditionals, loops en kennis van de knoppen/joysticks op de controller)
  • Potentieel voor langzamere projectuitvoering of vertraging in de reactietijd van de knoppen. Omdat alle opdrachten in één Forever-lus zijn opgenomen, kan de uitvoering van de code langzaam verlopen, afhankelijk van de ingestelde voorwaarden en de lengte van de code.
  • Gebruik van de controller met een op maat gemaakte robot, vooral met een niet-standaard aandrijflijn
  • Wanneer u meerdere gedragingen aan één knop wilt toewijzen. Wanneer u bijvoorbeeld op de knop Omhoog drukt, kan de klauw zich openen, naar voren rijden en vervolgens rond een object sluiten.

Optie 3: Gebeurtenissen gebruiken

Als je veel maatwerk aan je Controller wilt, is het gebruik van Events de beste optie voor jou. Eén druk op de knop kan meerdere robotgedragingen activeren, zoals het indrukken van een knop om de klauw te openen, de arm op te heffen en een bepaalde afstand vooruit te rijden. Als u probeert meerdere gedragingen per knop binnen een Forever-lus te coderen, zou de uitvoering van het project dramatisch vertragen. Door Gebeurtenissen te gebruiken, kunt u dit effectiever doen.

Deze optie gebruikt gebeurtenissen om de projectstroom op te splitsen. Dit is vergelijkbaar met het gebruik van een Forever-lus, maar zorgt ervoor dat de code beter georganiseerd is, zodat de uitvoering van de knop een snellere responstijd heeft. Een snellere responstijd betekent dat u geen vertraging zult zien tussen het indrukken van de controllerknoppen en het zien van het robotgedrag. Dit voorbeeld toont hetzelfde gedrag als het vorige project, maar uitgevoerd met behulp van de gebeurtenissen in plaats van de Forever Loop.

VEXcode EXP-werkruimte met het project Optie 3-blokken geopend. Het project bestaat uit 11 kleine stapels blokken en er zijn geconfigureerde apparaten. Het menu Apparaten wordt aan de zijkant geopend en bevat de volgende apparaten: ArmMotor op poort 3, ClawMotor op poort 4, Controller, LeftMotor op poort 6 en RightMotor op poort 10. Ten slotte zijn er de 11 kleine stapels blokken die de Controller-invoer verwerken. De eerste stapel luidt: Wanneer gestart, stel ArmMotor stoppen in op vasthouden en stel vervolgens ClawMotor stoppen in op vasthouden. De tweede stapel luidt: Wanneer controller-as 3 wordt gewijzigd, stel de LeftMotor-snelheid in op Controller 3-positie % en laat LeftMotor vervolgens vooruit draaien. De derde stapel luidt: Wanneer Controller-as 2 wordt gewijzigd, stel de RightMotor-snelheid in op Controller 2-positie % en draai RightMotor vervolgens vooruit. Op de vierde stapel staat: Wanneer de Controller-knop omhoog wordt ingedrukt, draait u ArmMotor omhoog. Op de vijfde stapel staat: Wanneer de Controller-knop Omhoog wordt losgelaten, stop ArmMotor. Op de zesde stapel staat: Wanneer de Controller-knop wordt ingedrukt, draait u ArmMotor omlaag. Op de zevende stapel staat: Wanneer de controllerknop wordt ingedrukt, stopt ArmMotor. Op de achtste stapel staat: Wanneer op Controller-knop A wordt gedrukt, draai de ClawMotor open. De negende stapel luidt: Wanneer controllerknop A wordt losgelaten, stop ClawMotor. Op de tiende stapel staat: Wanneer op Controller-knop B wordt gedrukt, draai ClawMotor dicht. De elfde en laatste stapel luidt: Wanneer controllerknop B wordt losgelaten, stop ClawMotor.

Download het "Optie 3" VEXcode EXP-projectbestand >

Uitleg van optie 3-code.

Codestuk

Uitleg

Close-up van een stapel blokken in het Optie 3 VEXcode EXP-project. De stapel luidt: Wanneer gestart, stel ArmMotor stoppen in op vasthouden en stel vervolgens ClawMotor stoppen in op vasthouden.

Voor dit codevoorbeeld is een Clawbot gebruikt. Wanneer de knoppen op de controller worden gebruikt om de arm omhoog en omlaag te brengen, zal de arm, zodra de knop wordt losgelaten, door de zwaartekracht weer naar beneden vallen. Als u zowel de arm als de klauw op “vasthouden” zet, zorgt u ervoor dat zowel de arm als de klauw op hun plaats blijven, zelfs nadat de knoppen op de controller zijn losgelaten.

Close-up van twee stapels blokken in het Option 3 VEXcode EXP-project. De eerste stapel luidt: Wanneer controller-as 3 wordt gewijzigd, stel de snelheid van de linkermotor in op de controller-positie % en laat de linkermotor vervolgens vooruit draaien. De tweede stapel geeft aan: Wanneer Controller-as 2 wordt gewijzigd, stel de RightMotor-snelheid in op Controller 2-positie % en draai RightMotor vervolgens vooruit. Schema van de EXP-controller met gelabelde knoppen en joysticks. Het beeld is vanaf de voorkant van de controller. De assen van de linkerjoystick zijn gemarkeerd met 3 en 4. De middelste knop van de linkerjoystick heeft het label L3. De twee ronde knoppen onder de linker joystick zijn genaamd Omhoog en Omlaag. De assen van de rechterjoystick zijn gemarkeerd met 1 en 2. De middelste knop van de rechterjoystick heeft het label R3. De twee ronde knoppen onder de rechterjoystick zijn gemarkeerd met A en B.

Voor dit codevoorbeeld is een Clawbot gebruikt. Wanneer de knoppen op de controller worden gebruikt om de arm omhoog en omlaag te brengen, zal de arm, zodra de knop wordt losgelaten, door de zwaartekracht weer naar beneden vallen. Als u zowel de arm als de klauw op “vasthouden” zet, zorgt u ervoor dat zowel de arm als de klauw op hun plaats blijven, zelfs nadat de knoppen op de controller zijn losgelaten.

{When controller axis} Gebeurtenisblokken worden gebruikt om bepaald gedrag te activeren wanneer een van de vier assen op de controller wordt gewijzigd met behulp van de joysticks.

De blokken [Set motor speed] worden gebruikt om de motorsnelheid in te stellen op de huidige positie van de controller langs de A- en D-assen. Dit komt overeen met het in de rij zetten van een auto. Dat zorgt er niet noodzakelijkerwijs voor dat de auto in beweging komt, het zet hem alleen maar in beweging.

Elke joystickas retourneert een waarde tussen -100 en +100, en retourneert een waarde nul wanneer deze gecentreerd is. Dit betekent dan dat de assen van de joystick, wanneer ingedrukt, gelijk zijn aan -100% tot 100%. Hoe verder richting 100 of -100 de assen worden geduwd, hoe sneller de motor zal draaien.

Het [Spin]-blok wordt dan gebruikt om de motor daadwerkelijk te laten bewegen. Dit komt overeen met het indrukken van het gaspedaal op de auto zodra de richting is bepaald. Hierdoor kan elke motor worden bestuurd door een van de vier controller-assen.

Close-up van vier stapels blokken in het Option 3 VEXcode EXP-project. De eerste stapel luidt: Wanneer de Controller-knop Omhoog wordt ingedrukt, draait u ArmMotor omhoog. Op de tweede stapel staat: When Controller button Up released, stop ArmMotor. Op de derde stapel staat: Wanneer de Controller-knop wordt ingedrukt, draait u ArmMotor omlaag. Op de vierde stapel staat: Wanneer de controllerknop wordt ingedrukt, stop ArmMotor.

Voor dit codevoorbeeld is een Clawbot gebruikt. Wanneer de knoppen op de controller worden gebruikt om de arm omhoog en omlaag te brengen, zal de arm, zodra de knop wordt losgelaten, door de zwaartekracht weer naar beneden vallen. Als u zowel de arm als de klauw op “vasthouden” zet, zorgt u ervoor dat zowel de arm als de klauw op hun plaats blijven, zelfs nadat de knoppen op de controller zijn losgelaten.

{When controller axis} Gebeurtenisblokken worden gebruikt om bepaald gedrag toe te wijzen aan knoppen die op de controller worden ingedrukt of losgelaten. In dit codegedeelte gelden de ingestelde voorwaarden als de knoppen Omhoog of Omlaag worden ingedrukt. Als dat zo is, zullen bepaalde gedragingen plaatsvinden, zoals het omhoog brengen, laten zakken of stoppen van de arm.

Merk op dat het laatste codegedeelte in het project voor de Claw dezelfde uitleg volgt.

Samenvatting van optie 3: Gebeurtenissen gebruiken

Voordelen

Beperkingen

Voorbeeld situatie

  • Geschikt voor maatwerk, vooral aandrijflijnen met meer dan 4 motoren
  • Kan meerdere gedragingen aan één knop toewijzen
  • Kan gedrag toewijzen aan verschillende assen op de controller (in tegenstelling tot de enige opties van Left Arcade, Right Arcade, Split Arcade en Tank Drive in de apparaatconfiguratie)
  • Snellere uitvoering van code en dus reactievermogen van knoppen (aangezien elke voorwaarde afzonderlijk wordt aangeroepen en niet is ingebed in één enkele stapel code)
  • Vereist de meeste codeerkennis van de opties (conditionals, loops, events en kennis van de knoppen/joysticks op de controller)
  • Gebruik van de controller met een op maat gemaakte robot, vooral met een niet-standaard aandrijflijn
  • Wanneer u meerdere gedragingen zonder vertraging aan één knop wilt toewijzen. Wanneer u bijvoorbeeld op de knop Omhoog drukt, kan de klauw zich openen, naar voren rijden en vervolgens rond een object sluiten.

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

Last Updated: