Skip to main content

Een tweede knop toevoegen aan het hersenscherm - C++

Icoon Toolbox voor docenten Toolbox voor leerkrachten - Het doel van deze activiteit

Nu leerlingen ervaring hebben met het omgaan met het scherm in de hersenen als één grote knop, kunnen ze het scherm in twee knoppen veranderen. Met deze activiteit maken leerlingen kennis met het gebruik van genesteif then elsestatements om voorwaardelijke statements beter te beheren en de onderliggende logica hiervan. Studenten worden eerst door het bouwen van het project geleid, waarbij het indrukken van het scherm de robot naar links of rechts laat draaien. Vervolgens moeten ze de knoppen omdraaien, zodat de robot naar links gaat en nu naar rechts gaat, en andersom.

Voor meer informatie overif thenenif then elsestatements of andere statements die in deze activiteit worden gebruikt, kunt u de helpinformatie in VEXcode V5 raadplegen. Voor meer informatie over deze ingebouwde helptool kunt u artikelen over help inC++vinden.

Hieronder volgt een overzicht van wat uw leerlingen tijdens deze activiteit zullen doen:

  • Beoordeling van hetStopOrDriveproject en de indeling van het scherm van de hersenen in pixels.

  • Een nieuwLeftOrRightproject bouwen terwijl je door de redenering van het programmeren wordt geleid.

  • Het project aanpassen zodat de knoppen op het scherm omgekeerd werken.

  • Breid uw leerproces uit: verdeel het scherm in twee knoppen. Als u deze knoppen indrukt, draait de robot naar links of rechts.

Zorg ervoor dat je de benodigde hardware, je technische notebook en VEXcode V5 bij de hand hebt.

Benodigde materialen:
Aantal Benodigde materialen
1

VEX V5 Classroom Starter Kit (met up-to-date firmware)

1

VEXcode V5 (nieuwste versie, Windows, macOS)

1

Technisch notitieboekje

1

StopOrDrive-project van de vorige Afspeelpagina

Icoon Toolbox voor docenten Toolbox voor leraren

Suggesties voor lesstrategieën voor dit onderdeel vindt u in de kolom 'Bezorging' van de 'To Do or Not to Do Pacing Guide'! (Google Doc / .docx / .pdf)

Het scherm van de hersenen kan meer dan één knop hebben.

Met deze activiteit kunt u de robot programmeren om vooruit te rijden en naar links of rechts te draaien, afhankelijk van welke kant van het scherm van de hersenen wordt ingedrukt.

De drie aanvullende typen instructies die u tijdens deze activiteit nodig hebt, zijn de volgende:

  • Drivetrain.turn(rechts);
  • nummer< 50
  • Brain.Screen.xPosition();

U kunt de Help-informatie in VEXcode V5 gebruiken om meer te weten te komen over de instructies.

VEXcode V5 met een station voor commando ingetypt in de werkruimte aan de linkerkant en de Help-informatie geopend aan de rechterkant. De Help toont een definitie van de opdracht en informatie over hoe deze wordt gebruikt.

Stap 1: Laten we beginnen met het bekijken van het StopOrDrive-project.

Laten we beginnen met het doornemen van het StopOrDrive-project.

In het StopOrDrive-project stopte Clawbot als het scherm werd ingedrukt, anders reed hij door.
Het hele scherm was één grote knop, maar in het volgende project willen we de helft van het scherm als één knop hebben en de andere helft als de andere knop.

// Begin met projectcode
int main() {
  // Initialiseren van robotconfiguratie. NIET VERWIJDEREN!
  vexcodeInit();

  while (true) {
    Drivetrain.drive(forward);
    if (Brain.Screen.pressing()) {
      Drivetrain.stop();
      waitUntil(!Brain.Screen.pressing());
    } 
    else {
      Drivetrain.drive(forward);
    }   
  }  
}  

Om het scherm in twee knoppen te splitsen, moeten we meer weten over de lay-out van het scherm.

Pixelraster van het scherm V5 Brain toont 12 genummerde rijen langs de linkerkant, met de bovenste rij met het label Row 1 en de onderste met het label Row 12. Bovenaan staan 48 genummerde kolommen, met uiterst links kolom 1 en uiterst rechts kolom 48. De totale pixelmetingen zijn 480px breed bij 240 px hoog.

  • Merk op dat de kolommen van links naar rechts in aantal toenemen. Het aantal kolommen is 48 en het scherm is 480 pixels breed.
  • Noteer in je engineering notebook dat de x-waarde op het scherm gelijk is aan het aantal pixels gemeten van links naar rechts.
  • Wat is de x-waarde van het midden van het scherm? Voor deze activiteit kun je je alleen op de x-as concentreren, omdat je alleen een linker- en rechterknop nodig hebt.

Icoon Toolbox voor docenten Toolbox voor leraren - antwoord

De x-waarde in het midden van het scherm is gelijk aan de helft van de breedte van het scherm in pixels. De x-waarde van het middelpunt is dus 240. Studenten hebben dit nummer nodig om de voorwaarde te programmeren voor het aanwijzen van de linker- of rechterkant van het scherm. Controleer dus of ze allemaal de juiste waarde hebben.

Vooruitkijkend naar de User Interface Challenge in het onderdeel Rethink, moeten leerlingen toepassen wat ze hebben geleerd om vier knoppen op het scherm te maken. Hiervoor hebben ze zowel de x- als de y-waarde nodig.

Tips voor leraren-pictogram Tips voor leraren

Voor verdere ondersteuning kunt u deVEX Bibliotheekraadplegen voor aanvullende help-artikelen.

Stap 2: Programmeren voor twee knoppen.

  • SlaStopOrDriveop als het projectLeftOrRight.

Het dialoogvenster Projectnaam in de VEXcode V5-werkbalk leest Links of Rechts en toont dat sleuf 2 is geselecteerd.

  • Bouw het onderstaande project. Het zal de Clawbot naar links of rechts laten draaien wanneer het scherm wordt ingedrukt, afhankelijk van de kant waarop het wordt ingedrukt.

 

// Begin met projectcode
int main() {
  // Initialiseren van robotconfiguratie. NIET VERWIJDEREN!
  vexcodeInit();

  while (true) {
    if (Brain.Screen.pressing()) {
      if (Brain.Screen.xPosition() < 240) {
        Drivetrain.turn(left);
        waitUntil(!Brain.Screen.pressing());
      } else {
        Drivetrain.turn(rechts);
        waitUntil(!Brain.Screen.pressing());
      }
    } anders {
      Drivetrain.drive(forward);
    }
  }  
}  
  • Laten we eens kijken wat dit project doet.

    Het blijft controleren of het scherm is ingedrukt. Als het scherm niet is ingedrukt, rijdt de auto vooruit. Als dat wel het geval is, controleert de auto waar het scherm is ingedrukt.

    Als de druk aan de linkerkant was (minder dan 240), dan draait de auto naar links. Anders draait het naar rechts. We hebben geen andere voorwaarde nodig voor wanneer de x-waarde groter is dan 240, want als deze niet minder is dan 240 (linksaf), moet deze groter zijn (rechtsaf). We hoeven ons maar met twee knoppen bezig te houden.

    Dewacht totDe bedieningsinstructies na elke beurt laten het project wachten tot het scherm niet meer wordt ingedrukt voordat het verdergaat.

Het linker- of rechterproject wordt weergegeven met opdrachten die zijn gelabeld met hun functionaliteit. De commando's While true en first if zijn gelabeld als Keeps checking if screen is pressed. Het volgende genest als commando wordt gelabeld wanneer het scherm wordt ingedrukt, controleert of aan de linker- of rechterkant. De volgende afslagopdracht wordt gelabeld als de pers links stond (minder dan 240, draait links), dan wordt de wacht totdat de opdracht is gelabeld, wacht totdat het scherm niet langer wordt ingedrukt voordat u doorgaat. De volgende opdracht rechtsaf in de tak else wordt gelabeld als de pers niet links stond (minder dan 240), naar rechts draait en de wacht totdat de opdracht is gelabeld, wacht totdat het scherm niet langer wordt ingedrukt voordat u doorgaat. De buitenste anders tak is gelabeld is scherm is niet ingedrukt, rijdt naar voren.

  • Nu het project is voltooid, download en voer het uit om te testen hoe het werkt.

VEXcode V5-werkbalk met een rood vak rond het downloadpictogram. De getoonde pictogrammen lezen van links naar rechts Controller, Hersenen, Downloaden, Uitvoeren, Stoppen en Delen.

  • Maak aantekeningen in je technische notitieboekje over hoe de knoppen de bewegingen van de Clawbot regelen.

Tips voor leraren-pictogram Tips voor leraren

Tijdens het testen moeten de studenten beseffen dat de gebruikersinterface, wanneer ze deze achter de Clawbot bedienen, omgekeerd lijkt te werken. Vanuit het perspectief van de gebruiker draait de Clawbot weg van de zijde die door de gebruiker wordt ingedrukt. Dat is geen optimale gebruikerservaring.

Stap 3: Pas het project aan voor een betere gebruikerservaring.

Bij het indrukken van de knoppen van het scherm van achter de Clawbot terwijl deze vooruit reed, drukte je aan de rechterkant van het scherm om naar links te draaien en aan de linkerkant van het scherm om naar rechts te draaien. Dat is geen goede User Experience. Een gebruikerservaring is hoe goed een gebruiker kan communiceren met een gebruikersinterface om een computersysteem te bedienen. Meer informatie over gebruikersinterfaces vindt u in het gedeelte Toepassen van dit lab.

In dit geval moeten we de gebruikersinterface verbeteren om de gebruikerservaring te verbeteren.

  • Bekijk het LeftOrRight-project en herzie het zodat wanneer de gebruiker de knoppen van achter de Clawbot indrukt, de robot naar rechts draait wanneer de gebruiker op de linkerkant van het scherm drukt. Of anders draait de Clawbot linksaf.
// Begin met projectcode
int main() {
  // Initialiseren van robotconfiguratie. NIET VERWIJDEREN!
  vexcodeInit();

  while (true) {
    if (Brain.Screen.pressing()) {
      if (Brain.Screen.xPosition() < 240) {
        Drivetrain.turn(left);
        waitUntil(!Brain.Screen.pressing());
      } else {
        Drivetrain.turn(rechts);
        waitUntil(!Brain.Screen.pressing());
      }
    } anders {
      Drivetrain.drive(forward);
    }
  }  
}  
  • Plan, test en herhaal dit project in je technische notitieblok, zodat het project de Clawbot naar de zijkant van het scherm laat draaien waar de gebruiker achter de Clawbot op drukt.

Icoon Toolbox voor docenten Toolbox voor leraren

Studenten moeten deze wijzigingen in het project plannen, testen en verfijnen en deze vervolgens documenteren in hun technische notitieboekjes. Voor de individuele rubriek voor technische notitieboeken klikt u op een van de volgende links (Google Doc / .docx / .pdf), of klikt u op een van de volgende links voor teamnotitieboeken (Google Doc / .docx / .pdf). Vergeet niet de beoordeling aan de leerlingen uit te leggen voordat ze aan de slag gaan.

Icoon Toolbox voor docenten Teacher Toolbox - Oplossingen

Er zijn twee mogelijke manieren om het hierboven gestelde probleem op te lossen. De eerste manier staat beschreven in de instructie: Bekijk het LeftOrRight-project en pas het zo aan dat wanneer de gebruiker op de knoppen achter de Clawbot drukt, de robot naar rechts draait als de gebruiker op de linkerkant van het scherm drukt. Anders gaat de Clawbot naar links.

// Begin projectcode
int main() {
  // Initialiseren van robotconfiguratie. NIET VERWIJDEREN!
  vexcodeInit();

  while (true) {
    if (Brain.Screen.pressing()) {
      if (Brain.Screen.xPosition() < 240) {
        Drivetrain.turn(right);
        waitUntil(!Brain.Screen.pressing());
      } else {
        Drivetrain.turn(left);
        waitUntil(!Brain.Screen.pressing());
      }
    } else {
      Drivetrain.drive(forward);
    }
  }  
}  

De andere oplossing is om de Operator-instructie zo aan te passen dat de Clawbot naar links draait als de x-waarde groter is dan 240.

// Begin projectcode
int main() {
  // Initialiseren van robotconfiguratie. NIET VERWIJDEREN!
  vexcodeInit();

  while (true) {
    if (Brain.Screen.pressing()) {
      if (Brain.Screen.xPosition() > 240) {
        Drivetrain.turn(left);
        waitUntil(!Brain.Screen.pressing());
      } else {
        Drivetrain.turn(right);
        waitUntil(!Brain.Screen.pressing());
      }
    } else {
      Drivetrain.drive(forward);
    }
  }  
}  

Motiveer discussie-icoon Motiveer discussie

U moest coördinaten uit een coördinatenvlak gebruiken toen u de voorwaardelijke instructie programmeerde voor situaties waarin de x-waarde kleiner was dan 240 (linkerkant van het scherm). Om het scherm van de hersenen visuele knoppen te laten tekenen, moet u ook coördinaten gebruiken.
Ga terug naar stap 2, waar u de coördinaten voor het scherm van de V5 Robot Brain te zien kreeg.

Het pixelraster van het V5 Brain-scherm toont 12 genummerde rijen aan de linkerkant, waarbij de bovenste rij Rij 1 heet en de onderste Rij 12. Bovenaan staan 48 genummerde kolommen, waarbij kolom 1 helemaal links staat en kolom 48 helemaal rechts. De totale pixelafmetingen zijn 480 px breed en 240 px hoog.

V:Wat is de x-waarde aan de rechterkant van het scherm?
A:De x-waarde loopt op van 0 aan de linkerkant tot 480 aan de rechterkant.

V:Het bereik van de x-waarde is dus 480 (0 tot 480). Wat is het bereik van de y-waarde?
A:Het bereik van de y-waarde is 240 (0 tot 240).

V:Waar ligt de oorsprong (0, 0) van dit coördinatenvlak?
A:De oorsprong bevindt zich linksboven.

V:U bevindt zich bovenaan het scherm als de y-waarde gelijk is aan 0. Waarom is dit ongebruikelijk?
A:Normaal gesproken neemt de y-waarde toe als u omhoog gaat, maar op het V5-scherm neemt de y-waarde toe als u omlaag gaat. Maar je kunt het je voorstellen als de y-waarde die toeneemt naarmate je verder weg beweegt van de oorsprong (0, 0) linksboven in het scherm.

Breid uw leerproces uit-pictogram Breid uw leerproces uit

In de User Interface Challenge van het onderdeel Rethink krijgen leerlingen de opdracht een project te ontwikkelen waarmee ze vier knoppen op het scherm kunnen maken om de klauw en arm van de Clawbot te bedienen. Voor die uitdaging moeten ze ook die vier knoppen op het scherm laten zien. Deze Extend Your Learning-opdracht zal, net als de vorige pagina's, helpen om je leerlingen voor te bereiden op de uitdaging. De opdracht heeft namelijk vier knoppen die geprogrammeerd moeten worden, terwijl deze opdracht er maar twee heeft.

Laat je leerlingen een gebeurtenis aan het programma toevoegen, zodat er twee zichtbare knoppen op het scherm verschijnen wanneer het project wordt uitgevoerd. Stel voor dat studenten de Help-functie in VEXcode V5 gebruiken voor informatie over gebeurtenissen, met name de informatie in de instructieteken rechthoek. Laat de leerlingen bekijken hoe het scherm van de hersenen is georganiseerd in een coördinatensysteem op basis van het aantal pixels in het blok, teken rechthoek. Ze moeten dit begrijpen om parameters in dat blok te kunnen instellen. Bovendien moeten ze weten hoe ze evenementen moeten uitzenden. In dit geval is de gebeurtenis het tekenen van knoppen.

Studenten moeten deze wijzigingen aan het project plannen, testen en verfijnen en deze vervolgens documenteren in hun technische notitieboekjes. Voor de individuele technische notitieboekrubriek klikt u op een van de volgende links (Google Doc / .docx / .pdf), of klikt u op een van de volgende links voor teamnotitieboeken (Google Doc / .docx / .pdf).

Hier is een voorbeeldoplossing:

// Begin projectcode
event ScreenButtons = event();

void HasScreenButtons() {
  Brain.Screen.setFillColor(groen);
  Brain.Screen.drawRectangle(0, 0, 240, 120);
  Brain.Screen.setFillColor(paars);
  Brain.Screen.drawRectangle(240, 0, 480, 120);
  Brain.Screen.setFillColor(oranje);
  Brain.Screen.drawRectangle(0, 120, 240, 240);
  Brain.Screen.setFillColor(cyaan);
  Brain.Screen.drawRectangle(240, 120, 480, 240);
  wait(1, seconden);
}

int main() {
  // Robotconfiguratie initialiseren. NIET VERWIJDEREN!
  vexcodeInit();

  ScreenButtons(HasScreenButtons);

  while (true) {
    ScreenButtons.broadcast();

    if (Brain.Screen.pressing()) {

      if (Brain.Screen.xPosition() < 240) {

        if (Brain.Screen.yPosition() < 120) {
          ClawMotor.spin(forward);
          waitUntil(!Brain.Screen.pressing());

        } else {
          ClawMotor.spin(reverse);
          waitUntil(!Brain.Screen.pressing());
        }
        
      } else {
        if (Brain.Screen.yPosition() < 120) {
          ArmMotor.spin(forward);
          waitUntil(!Brain.Screen.pressing());

        } anders {
          ArmMotor.spin(omgekeerd);
          waitUntil(!Brain.Screen.pressing());
        }
      }
      ClawMotor.stop();
      ArmMotor.stop();
    }
    wait(5, msec);
  }  
}  

Voor een extra professioneel realistische ervaring, laat leerlingen hun klasgenoten om feedback vragen over hun twee kleurkeuzes.
Wekken de gekozen kleuren interesse in het gebruik van de interface, of welke kleuren zouden zij als gebruikers het liefst gebruiken?
Onderdeel van het ontwikkelen van een geweldige gebruikersinterface is het verzamelen van gegevens over de gebruikerservaring, en zelfs esthetische voorkeuren.