Přidání druhého tlačítka na obrazovku mozku - C++
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.
| 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 |
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.

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.

- 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.
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.
Krok 2: Programování pro dvě tlačítka.
- UložteStopOrDrivejako projektLeftOrRight.
- 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.

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

- Dělejte si poznámky do svého technického poznámkového bloku o tom, jak tlačítka ovládají pohyby Clawbota.
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.
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í.
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);
}
}
}
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.

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.
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.