KURZ: Dotykový senzor
- Podrobnosti
- Mgr. Jan Baťko
- Aktualizováno: 07.09.2017
- Zobrazení: 12936
KAPITOLY
Dotykový senzor je prostředek, který jak v robotické stavebnici LEGO MINDSTORMS NXT tak i v EV3 plní funkci tlačítka. Jeho hlavní funkcí je vracet pomocí stisku tlačítka logickou hodnotu True nebo False (Pravda nebo Nepravda). K řídící jednotce je senzor připojen kabelem do libovolného vstupního portu (1-4). Senzor je někdy také nazýván tlakový. Dokáže ovšem pouze zjišťovat, zda je tlačítko stisknuto či nikoliv. Úroveň stlačení rozeznat nedokáže.
Použití v programovacích prostředích
NXT-G
BLOK PRO práci s dotykovým senzorem
Rozcestník
Umístění bloku
Programový blok, který umožňuje nastavení a ovládání dotykového senzoru nalezneme pod názvem Touch Sensor v paletě Complete > Sensor
Popis bloku
Při práci s programovým blokem dotykového senzoru máme k dispozici pět následujících konektorů:
Port - určuje, ke kterému ze čtyř vstupních portů je senzor připojen (1-4).
Action - volba značící, která ze tří možností akce dotykového senzoru je zvolena.
Yes/No - hodnota logického datového typu vyjadřující výsledek porovnání.
Raw Value - udává čistou, neškálovanou hodnotu snímanou senzorem na stupnici (0-1023).
Logical Number - výstupní hodnota logického datového typu.
Číslo v pravém horním rohu bloku značí, ke kterému vstupnímu portu je momentálně senzor připojen. Ikonka signalizuje jakou akci aktuálně dotykový senzor detekuje (v příkladu na obrázku - stisknutí a opětovné uvolnění tlačítka).
Parametry bloku
Jelikož možnosti dotykového senzoru jsou značně omezené, obsahuje jeho blok pouze dva parametry.
Port: udává, ke kterému vstupnímu portu je senzor připojen (1-4).
Action: umožňuje volit ze tří možných akcí, které mohou být s tlačítkem dotykového senzoru provedeny.
Jedná se o následující možnosti:
- Pressed - stisknutí tlačítka senzoru,
- Released - uvolnění stisknutého tlačítka senzoru,
- Bumped - stiknutí a opětovné uvolnění tlačítka senzoru.
RobotC
Příkazy pro ovládání dotykového senzoru
Při ovládání dotykového senzoru budeme nejčastěji používat příkazy pro rozlišení stisku či uvolnění tlačítka senzoru. Před každým použitím budeme muset senzor nakonfigurovat. V programovacím prostředí RobotC je také možné pracovat s hodnotou senzoru nazývanou RAW.
Rozcestník
Nastavení senzoru
Ještě než začneme v programovacím prostředí RobotC pracovat s dotykovým senzorem, je nutné ho nakonfigurovat. Zápis konfigurace je uveden níže. Skládá se z klíčového slova #pragma a příkazu config(), který obsahuje čtyři parametry. První parametr značí, o jaký druh zařízení se jedná. V našem případě je to senzor (Sensor). Další parametr označuje, do jakého portu řídící jednotky je senzor připojen (S1 = port 1). Následuje volitelný název senzoru (dotykovy). Posledním parametrem je druh senzoru (sensorTouch = dotykový senzor). Tato deklarace je v úvodu každého programu, kde budeme pracovat se senzory nezbytná.
#pragma config(Sensor, S1, dotykovy, sensorTouch) // Kod je automaticky generovan pruvodcem konfiguraci RobotC
Poznámka: Konfiguraci lze provést ručním zapsáním deklarace v příkladu nebo v menu programovacího prostředí RobotC. Postup konfigurace je uveden v kapitole Konfigurace motorů a senzorů.
Detekce stisku tlacitka
Při práci s dotykovým senzorem budeme nejčastěji používat příkaz, který vyjadřuje, zda je tlačítko senzoru stisknuté či není. S touto logickou hodnotou pracuje příkaz SensorValue(). Používá se v situacích, kdy v závislosti na stisku tlačítka následuje nějaká akce. Jestliže je hodnota vyjadřovaná příkazem rovna 0, jedná se o nestisknuté tlačítko. Pokud je rovna 1, jedná se o situaci, kdy je tlačítko stisknuté.
SensorValue(dotykovy) == 0; // Vyjadruje nestisknute tlaciko dotykoveho senzoru. SensorValue(dotykovy) == 1; // Vyjadruje stisknuti tlacitka dotykoveho senzoru.
Možnosti využití hodnoty RAW
K vyjádření stavu tlačítka dotykového senzoru lze použít také hodnotu vyjádřenou jako RAW, což je neškálovaná hodnota přečtená senzorem. Jelikož ale dotykový senzor rozlišuje pouze dva stavy, musí být rozsah hodnoty v RAW rozdělen na polovinu. Můžeme tedy proces stisku tlačítka vyjádřit jako hodnotu větší než 512 a uvolnění tlačítka jako hodnotu menší než 512 pomocí příkazu SensorRaw[], jehož parametrem je typ název senzoru.
SensorRaw[dotykovy] < 512; // Hodnota ve formatu RAW mensi nez 512 vyjadruje uvolneni tlacitka. SensorRaw[dotykovy] > 512; // Hodnota ve formatu RAW vetsi nez 512 vyjadruje stisknuti tlacitka.
EV3
Blok pro práci s dotykovým senzorem
Rozcestník
Umístění bloku pro práci s dotykovým senzorem
Programový blok Touch Sensor je umístěn v paletě Sensor.
Změna režimu
Programový blok Touch Sensor můžeme využívat ve dvou základních režimech. Přepínání mezi nimi se provádí pomocí tlačítka v levé spodní části bloku (červeně zvýrazněno).
Přidání vstupního portu
Kliknutím do pole pro výběr vstupního portu v pravém horním rohu programového bloku a vybráním možnosti Wired přidáme do programového bloku nový vstupní port Port (červeně zvýrazněno).
Režimy programového bloku
Measure State (zjištění stavu)
Režim, který slouží k zjištění toho, zda je tlačítko dotykového senzoru stisknuté či nikoliv. Programový blok v tomto režimu obsahuje jeden výstupní port.
State - výstupní hodnotou tohoto portu je True v případě, že je tlačítko stisknuto, v opačném případě je návratová hodnota rovna False.
Compare State (testování stavu senzoru)
Režim sloužící ke zjištění, jaký úkon byl s tlačítkem senzoru proveden. Programový blok obsahuje v tomto režimu jeden vstupní a dva výstupní porty.
State - vstupní port sloužící je zjištění, zda bylo tlačítko dotykového senzoru uvolněno (návratová hodnota 0), stisknuto (návratová hodnota 1) nebo stisknuto a uvolněno (návratová hodnota 2).
Compare Result - výstupní port vracející logickou návratovou hodnotu podle toho, zda byl testovaný stav detekován (True) nebo nikoliv (False).
Measured Value - výstupní port vracející návratovou hodnotu v závislosti na tom, jakého stavu senzoru bylo dosaženo (0 uvolněno, 1 stisknuto, 2 stisknuto a uvolněno).