Skip to main content

Přidání druhého tlačítka na obrazovku mozku - C++

Ikona sady nástrojů pro učitele Sada nástrojů této aktivity

Nyní, když mají studenti zkušenosti s tím, jak zacházet s obrazovkou mozku jako s jedním velkým tlačítkem, mohou obrazovku proměnit ve dvě tlačítka. Tato aktivita seznámí studenty s používáním vnořených příkazů typuif then elsepro lepší správu podmíněných příkazů a se základní logikou, která je v tomto procesu použita. Studenti jsou nejprve proveditá sestavením projektu, kde sítotiskové lisy otáčejí robota doleva nebo doprava. Pak jsou ale požádáni, aby přepnuli tlačítka tak, aby to, co robota otočilo doleva, ho nyní otočilo doprava a naopak.

Více informací o příkazechif thenaif then elsenebo dalších použitých v této aktivitě naleznete v nápovědě k VEXcode V5. Více informací o tomto vestavěném nástroji nápovědy naleznete v článcích o nápovědě v jazyceC++.

Následuje přehled toho, co budou vaši studenti v této aktivitě dělat:

  • Prozkoumání projektuStopOrDrivea rozvržení obrazovky mozku v pixelech.

  • Vytváření nového projektuLeftOrRights průvodcem procesem programování.

  • Úprava projektu tak, aby tlačítka na obrazovce fungovala opačně.

  • Rozšiřte si učení: Rozdělení obrazovky na dvě tlačítka, která po stisknutí otáčejí robotem doleva nebo doprava.

Ujistěte se, že máte potřebný hardware, technický notebook a VEXcode V5 připraven.

Požadované materiály:
Množství Potřebný materiál
1

VEX V5 Classroom Starter Kit (s aktuálním firmwarem)

1

VEXcode V5 (nejnovější verze, Windows, macOS)

1

Technický poznámkový blok

1

Projekt StopOrDrive z předchozí stránky Play

Ikona sady nástrojů pro učitele Sada nástrojů pro učitele

Návrhy na strategie výuky pro tuto sekci naleznete v sloupci Výkon v Průvodci tempem úkolů, které je třeba udělat, či nikoliv! dokumentů Google .docx )

Obrazovka mozku může mít více než jedno tlačítko.

Tato aktivita vám umožní naprogramovat robota tak, aby jel vpřed a zatáčel doleva nebo doprava v závislosti na tom, která strana obrazovky mozku je stisknuta.

Během této aktivity budete potřebovat tři další typy instrukcí:

  • Drivetrain.turn(vpravo);
  • číslo< 50
  • Brain.Screen.xPosition();

Informace o pokynech najdete v nápovědě VEXcode V5.

VEXcode V5 s jednotkou pro příkaz napsanou v pracovním prostoru vlevo a informace nápovědy se otevřou vpravo. Nápověda zobrazuje definici příkazu a informace o tom, jak je používán.

Krok 1: Začněme přezkoumáním projektu StopOrDrive.

Začněme přezkoumáním projektu StopOrDrive.

V projektu StopOrDrive se Clawbot zastavil při stisknutí obrazovky, jinak se pohyboval vpřed.
Celá obrazovka byla jedno velké tlačítko, ale v tomto dalším projektu chceme, aby polovina obrazovky byla jedno tlačítko a druhá polovina druhé.

// Start project code
int main() {
  // Inicializace konfigurace robota. NEODSTRAŇUJTE!
  vexcodeInit();

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

Abychom mohli obrazovku rozdělit na dvě tlačítka, musíme se dozvědět více o rozložení obrazovky.

Pixelová mřížka obrazovky V5 Brain zobrazuje 12 očíslovaných řádků podél levé strany, přičemž horní řádek je označen jako Řádek 1 a spodní řádek je označen jako Řádek 12. V horní části je 48 očíslovaných sloupců, přičemž sloupec 1 je označen úplně vlevo a sloupec 48 je označen úplně vpravo. Celková velikost pixelů je 480 pixelů široká a 240 pixelů vysoká.

  • Všimněte si, že se počet sloupců zleva doprava zvyšuje. Počet sloupců je 48 a obrazovka je široká 480 pixelů.
  • Do technického poznámkového bloku si zapište, že hodnota x na obrazovce se rovná počtu pixelů naměřených zleva doprava.
  • Jaká je hodnota x středu obrazovky? Pro tuto aktivitu se můžete soustředit pouze na osu x, protože potřebujete pouze levé a pravé tlačítko.

Ikona sady nástrojů pro učitele Sada nástrojů pro učitele – odpověď

Hodnota x ve středu obrazovky se rovná polovině šířky obrazovky v pixelech. Takže hodnota x středového bodu je 240. Studenti budou toto číslo potřebovat k naprogramování podmínky pro to, zda se obrazovka stiskne vlevo nebo vpravo. Proto si nezapomeňte ověřit, zda všechny mají správnou hodnotu.

V rámci Výzvy uživatelského rozhraní v sekci Přehodnocení budou studenti muset aplikovat své znalosti k vytvoření čtyř tlačítek na obrazovce. Takže k tomu budou potřebovat hodnoty x i y.

Ikona tipů pro učitele Tipy pro učitele

Další pomoc naleznete v doplňujících článcích nápovědy v knihovně.

Krok 2: Programování pro dvě tlačítka.

  • UložteStopOrDrivejako projektLeftOrRight.

Dialogové okno Název projektu v panelu nástrojů VEXcode V5 čte vlevo nebo vpravo a ukazuje, že je vybrán slot 2.

  • Sestavte níže uvedený projekt. Při stisknutí obrazovky se bude Clawbot otáčet doleva nebo doprava v závislosti na straně, na které je stisknut.

 

// Start project code
int main() {
  // Inicializace konfigurace robota. NEODSTRAŇUJTE!
  vexcodeInit();

  while (true) {
    if (Brain.Screen.pressing()) {
      if (Brain.Screen.xPosition() < 240) {
        Drivetrain.turn(left);
        waitUntil(!Brain.Screen.pressing());
      } else {
        Drivetrain.turn(vpravo);
        waitUntil(!Brain.Screen.pressing());
      }
    } else {
      Drivetrain.drive(forward);
    }
  }  
}  
  • Pojďme se podívat, co tento projekt dělá.

    Neustále kontroluje, zda je stisknuta obrazovka. Pokud obrazovka není stisknuta, jede dopředu, ale pokud ano, kontroluje, kde je obrazovka stisknuta.

    Pokud byl stisk na levé straně (méně než 240), otočí se doleva. V opačném případě se otočí doprava. Nepotřebujeme další podmínku, když je hodnota x větší než 240, protože pokud není menší než 240 (odbočit vlevo), musí být větší (otočit vpravo). Máme se starat jen o dvě tlačítka.

    Tlačítkočeká doŘídicí instrukce po každém tahu nutí projekt čekat, dokud se obrazovka již netlačí, než bude pokračovat.

Levý nebo pravý projekt je zobrazen s příkazy označenými jejich funkčností. Zatímco pravda a první, pokud jsou příkazy označeny jako Udržuje kontrolu, pokud je stisknuta obrazovka. Další vnořený, pokud je příkaz označen při stisknutí obrazovky, zkontroluje, zda je vlevo nebo vpravo. Příkaz Next Turn je označen, pokud bylo stisknuto tlačítko vlevo (méně než 240, otočí se vlevo), poté je před pokračováním označen příkaz Wait until Command Wait until Screen is no longer pressed. Příští příkaz odbočení vpravo ve větvi else je označen, pokud stisknutí nebylo vlevo (méně než 240), otočí se vpravo a čekání, dokud není příkaz označen, čeká, dokud není obrazovka již stisknuta, než bude pokračovat. Vnější větev else je označena, obrazovka není stisknuta, jede dopředu.

  • Nyní, když je projekt hotový, jej stáhněte a spusťte, abyste otestovali, jak funguje.

Panel nástrojů VEXcode V5 s červeným rámečkem kolem ikony Stáhnout. Zobrazené ikony čtou zleva doprava, Controller, Brain, Download, Run, Stop a Share.

  • Dělejte si poznámky do svého technického poznámkového bloku o tom, jak tlačítka ovládají pohyby Clawbota.

Ikona tipů pro učitele Tipy pro učitele

Během testování by si studenti měli uvědomit, že uživatelské rozhraní, pokud je používáno zpoza Clawbota, funguje zdánlivě obráceně. Z pohledu uživatele se Clawbot odvrací od strany, na kterou uživatel tlačí. To není optimální uživatelská zkušenost.

Krok 3: Upravte projekt pro lepší uživatelský zážitek.

Při stisknutí tlačítek obrazovky zpoza Clawbota, když jel dopředu, jste stiskli na pravé straně obrazovky, abyste se otočili doleva, a na levé straně obrazovky, abyste se otočili doprava. To není dobrá uživatelská zkušenost. Uživatelská zkušenost je to, jak dobře může uživatel komunikovat s uživatelským rozhraním pro ovládání počítačového systému. Více informací o uživatelských rozhraních naleznete v části Aplikace tohoto cvičení.

V tomto případě musíme vylepšit uživatelské rozhraní, abychom zlepšili uživatelskou zkušenost.

  • Zkontrolujte projekt LeftOrRight a upravte jej tak, aby se při stisknutí tlačítek zpoza Clawbota robot otočil doprava, když uživatel stiskne levou stranu obrazovky. Nebo Clawbot zahne doleva.
// Start project code
int main() {
  // Inicializace konfigurace robota. NEODSTRAŇUJTE!
  vexcodeInit();

  while (true) {
    if (Brain.Screen.pressing()) {
      if (Brain.Screen.xPosition() < 240) {
        Drivetrain.turn(left);
        waitUntil(!Brain.Screen.pressing());
      } else {
        Drivetrain.turn(vpravo);
        waitUntil(!Brain.Screen.pressing());
      }
    } else {
      Drivetrain.drive(forward);
    }
  }  
}  
  • Naplánujte, otestujte a opakujte tento projekt ve svém technickém notebooku tak, aby projekt přiměl Clawbota otočit se směrem ke straně obrazovky, kterou uživatel tlačí zpoza Clawbota.

Ikona sady nástrojů pro učitele Sada nástrojů pro učitele

Studenti by měli tyto změny v projektu plánovat, testovat a vylepšovat a zároveň je dokumentovat ve svých technických sešitech. Pro individuální rubriku technických sešitů klikněte na jeden z následujících odkazů (Google Doc / .docx / .pdf) nebo klikněte na jeden z následujících odkazů pro týmové sešity (Google Doc / .docx / .pdf). Než začnou pracovat, nezapomeňte studentům vysvětlit bodování.

Ikona sady nástrojů pro učitele Sada nástrojů

Existují dva možné způsoby, jak vyřešit výše uvedený problém. První způsob je ten, který je napsán v instrukcích: Zkontrolujte projekt LeftOrRight a upravte ho tak, aby se robot při stisknutí tlačítek za Clawbotem otočil doprava, když uživatel stiskne levou stranu obrazovky. Nebo se Clawbot otočí doleva.

// Začátek projektu kód
int main() {
  // Inicializace konfigurace robota. NEODSTRAŇUJTE!
  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);
    }
  }  
}  

Druhým řešením je přepnout instrukci Operator tak, aby se Clawbot otočil doleva, když je hodnota x větší než 240.

// Začátek projektu kód
int main() {
  // Inicializace konfigurace robota. NEODSTRAŇUJTE!
  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);
    }
  }  
}  

Ikona motivační diskuse Motivovat diskusi

Při programování podmíněného příkazu pro situaci, kdy byla hodnota x menší než 240 (levá strana obrazovky), jste potřebovali použít souřadnice ze souřadnicové roviny. Aby se na obrazovce mozku zobrazovala vizuální tlačítka, museli byste také použít souřadnice.
Vraťte se ke kroku 2, kde jste viděli souřadnice obrazovky robotického mozku V5.

Pixelová mřížka obrazovky V5 Brain zobrazuje 12 očíslovaných řádků podél levé strany, přičemž horní řádek je označen jako Řádek 1 a spodní jako Řádek 12. V horní části je 48 očíslovaných sloupců, přičemž sloupec 1 je označen úplně vlevo a sloupec 48 je označen úplně vpravo. Celkové rozměry v pixelech jsou 480 pixelů na šířku a 240 pixelů na výšku.

Otázka:Jaká je hodnota x na pravém okraji obrazovky?
Odpověď:Hodnota x se zvyšuje od 0 na levém okraji do 480 na pravém okraji.

Otázka:Rozsah hodnoty x je tedy 480 (0 až 480). Jaký je rozsah hodnoty y?
A:Rozsah hodnoty y je 240 (0 až 240).

Q:Kde je počátek (0, 0) této souřadnicové roviny?
A:Počátek je v levém horním rohu.

Q:Jste v horní části obrazovky, když je hodnota y rovna 0. Proč je to neobvyklé?
A:Obvykle se hodnota y zvyšuje s pohybem nahoru, ale na obrazovce V5 se hodnota y zvyšuje s pohybem dolů. Můžete si to ale představit jako rostoucí hodnotu y, když se vzdalujete od počátku (0, 0) v levém horním rohu obrazovky.

Ikona Rozšiřte si učení Rozšiřte si své znalosti

V rámci Výzvy uživatelského rozhraní v sekci Přehodnocení budou studenti požádáni o vytvoření projektu, který na obrazovce vytvoří čtyři tlačítka pro ovládání drápu a paže Clawbota. Pro tuto výzvu jsou také požádáni, aby si na obrazovce zobrazili tato čtyři tlačítka. Tato příručka „Rozšíření znalostí“, stejně jako na předchozích stránkách, jim pomůže připravit se na danou výzvu, protože tato výzva má čtyři tlačítka k naprogramování a tato má pouze dvě.

Nechte studenty přidat do programu událost, aby se na obrazovce při spuštění projektu vykreslila dvě viditelná tlačítka. Doporučte studentům, aby pro informace o událostech (Events), zejména o instrukcidraw retitch, použili funkci Nápověda ve VEXcode V5. Nechte studenty zopakovat, jak je obrazovka mozku uspořádána do souřadnicového systému na základě počtu pixelů při použití v blokunakreslení obdélníku. Budou to muset pochopit, aby mohli v daném bloku nastavit parametry. Kromě toho budou muset pochopit, jak vysílat události. V tomto případě se jedná o kreslení tlačítek.

Studenti by měli tyto změny v projektu naplánovat, otestovat a vylepšit a zároveň je zdokumentovat ve svých technických sešitech. Pro individuální rubriku technických sešitů klikněte na jeden z následujících odkazů (Google Doc / .docx / .pdf) nebo klikněte na jeden z následujících odkazů pro týmové sešity (Google Doc / .docx / .pdf).

Zde je příklad řešení:

// Začátek projektu kód
event ScreenButtons = event();

void HasScreenButtons() {
  Brain.Screen.setFillColor(green);
  Brain.Screen.drawRectangle(0, 0, 240, 120);
  Brain.Screen.setFillColor(purple);
  Brain.Screen.drawRectangle(240, 0, 480, 120);
  Brain.Screen.setFillColor(orange);
  Brain.Screen.drawRectangle(0, 120, 240, 240);
  Brain.Screen.setFillColor(cyan);
  Brain.Screen.drawRectangle(240, 120, 480, 240);
  wait(1, sekundy);
}

int main() {
  // Inicializace konfigurace robota. NEODSTRAŇUJTE!
  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());

        } else {
          ArmMotor.spin(reverse);
          waitUntil(!Brain.Screen.pressing());
        }
      }
      ClawMotor.stop();
      ArmMotor.stop();
    }
    wait(5, ms);
  }  
}  

Pro ještě realističtější zážitek z praxe požádejte studenty, aby se zeptali spolužáků na jejich výběr dvou barev.
Vzbuzují ve vás vybrané barvy touhu používat rozhraní, nebo které barvy by jako uživatelé preferovali?
Součástí vývoje skvělého uživatelského rozhraní je shromažďování dat o uživatelské zkušenosti, a to i o estetických preferencích.