Button void waitforpress() Čeká se dokud se nezmáčkne tlačítko. LCD void drawstring(string str,



Podobné dokumenty
Využití robota Lego Mindstorms Návrh a realizace speciálních úloh. Usage of the Lego Minstorms Robots Design and realization of the special tasks

- mikrokontrolér pro začátečníky a snadné použití

Pracovní postupy pozemního šetření NIL2

SIMPLY CLEVER. ŠkodaOctavia RADIONAVIGAČNÍ SYSTÉM NEXUS

PREZENTACE PROGRAM MS PowerPoint

Indikace polohy. ELGO-Electric spol. s r.o. Kourimská 103, CZ Kolín 1 tel/fax : 0321/ elgo@elgo.cz

US/GB RC RUNNING COMPUTER SPEED DISTANCE Lap Count.

První spuštění programu BuildingDesign Úvodní okno při prvním spuštění programu je na následujícím obrázku.

Dokumentace programu ATENA Část 4-1. Průvodce programem ATENA 2D. Napsali: Jan Červenka, Václav Veselý

VIKLAN - Základ. Uživatelská příručka. Program pro návrh pružného uložení průmyslových zařízení. pro seznámení se základními možnostmi programu

Střední odborná škola a Střední odborné učiliště strojírenské a elektrotechnické Trnkova 113, BRNO. AutoCAD LT

VYŠŠÍ ODBORNÁ ŠKOLA A STŘEDNÍ PRŮMYSLOVÁ ŠKOLA DOPRAVNÍ, PRAHA 1, MASNÁ 18 Praha 1, Masná 18 - PSČ Vyšší odborné studium ABSOLVENTSKÁ PRÁCE

Základy MS Excelu 2007 jednoduše

1 Postup tvorby konstrukčních

LT-32A60BU LT-32A60SU LT-26A60BU LT-26A60SU

Shark 20. Automatický nabíječ 1. ZÁKLADNÍ FUNKCE A TECHNICKÉ ÚDAJE. Základní technické údaje

SPY 11. Automobilový zabezpečovací systém

Metody měření expozice Jak lze změřit jas objektu

Vlákna v C# Překlad Threading in C# od Josepha Albahari. Jakub Kottnauer. Z původního seriálu vydaného na Programujte.com

Referenční příručka pro zařízení TomTom Start řady 20

DIGITÁLNÍ SYSTÉM 1082

SPIN11 KCE verze SNA1/A

SPIRIT 11 Nové funkce

Návod k použití kamery Mobius Action Cam Wide angle lens

Dakota 10 a 20 návod k obsluze

GSM MODUL VT 20. Manuál

9 Užitečné funkce ALL RESET (Obnova původních hodnot)

Základy programování v GNU Octave pro předmět PPAŘ

Systémy WAVE Bioreactor 2/10 a 20/50

Mars 11. dálkový startér motoru s externím ovládáním NÁVOD K MONTÁŽI

Transkript:

1 Nejdůležitější metody 2 Základní příkazy 2.1 Několik základních příkazů Třída Jméno metody Poznámka Button void waitforpress() Čeká se dokud se nezmáčkne tlačítko. LCD void drawstring(string str, Vykreslí řetězec na displej na určenou pozici. int x, int y) Motor void backward() Spustí motor, který se bude točit dozadu. void changedirection() Obratí směr chodu motoru. void forward() Spustí motor, který se bude točit void setspeed(int speed) void stop() void rotate(float angle) dopředu. Nastaví rychlost pohybu (úhlových stupňů za vteřinu) motoru. Maximum je přibližně 900 při plné baterii. Vypne motor. Otočí motor o úhel (ve stupních). Tabulka 1: Základní příkazy 2.1.1 Ukázka použití příkazů Motor.A.setSpeed(200); Tímto příkazem vybereme třídu Motor. Specifikujeme, že chceme používat motor na pozici A a vybereme metodu setspeed se vstupním parametrem 200. Výsledkem bude, že motor A se začne točit rychlostí 200 úhlových stupňů za vteřinu. 2.2 Příklad Robot pojede dopředu, dokud se nestiskne tlačítko. Poté zrychlí a po druhém stisknutí tlačítka začne jezdit dokola. Po třetím stisknutí tlačítka se vypne. p u b l i c c l a s s Example { // S pusti se motory A a C, vypise se t e x t na LCD a ceka se 1

// dokud se nezmackne t l a c i t k o Motor.A. setspeed (200) ; Motor.C. setspeed (200) ; Motor.A. forward ( ) ; Motor.C. forward ( ) ; LCD. drawstring ( DOPREDU, 0, 0) ; Button. waitforpress ( ) ; // Z r y c h l i se Motor.A. setspeed (500) ; Motor.C. setspeed (500) ; LCD. drawstring ( RYCHLEJI, 0, 1) ; Button. waitforpress ( ) ; // Zacne j e z d i t v kruhu Motor.A. setspeed (500) ; Motor.C. setspeed (200) ; LCD. drawstring ( DOKOLA, 0, 2) ; Button. waitforpress ( ) ; // Z a s t a v i se motory Motor.A. stop ( ) ; Motor.C. stop ( ) ; 3 Pokročilejší příkazy 3.1 Několik pokročilejších příkazů Jedna z výhod používání programovacího jazyku JAVA je možnost použít předdefinovaných tříd a metod. Jedním z velmi užitečných prostředků je interface Pilot. Interface Pilot se používá pro robota typu vozidlo. Tedy takového robota, který má dva nezávislé motory, které pohánějí kola. Ukážeme si použití třídy TachoPilot, která interface Pilot implementuje. Do konstruktoru této třídy zadáme průměr a rozkol poháněných kol a pozice, na kterých jsou motory připojeny. Poté již můžeme využívat pokročilejších funkcí. Konstruktory třídy Pilot: TachoPilot(float wheeldiameter, float trackwidth,motor leftmotor, Motor rightmotor) TachoPilot(float wheeldiameter, float trackwidth,motor leftmotor, Motor rightmotor, boolean reverse) Hodnoty parametrů můžeme zadávat v libovolných jednotkách. Důležité je, abychom ve všech metodách používali stejné jednotky, jaké jsme zadali do konstruktoru. 2

Rovněž velmi užitečná je třída SimpleNavigator. Tato třída poskytuje hrubý odhad polohy. Funguje tak, že na počátku programu umístí robota do polohy {0,0. Postupně jak se vykonávají příkazy, tak se přepočítává a zaznamenává aktuální poloha. Takto udržíme přehled o tom, kde se robot pohybuje. Konstruktor třídy SimpleNavigator: SimpleNavigator(Pilot pilot) SimpleNavigator(float wheeldiameter, float trackwidth,motor leftmotor, Motor rightmotor) SimpleNavigator(float wheeldiameter, float trackwidth,motor leftmotor, Motor rightmotor, boolean reverse) Příklad použití: Můj robot-vozítko má průměr kola (napsáno na pneumatice) 81.6mm, rozkol kol je přibližně 110mm a motory mám zapojeny na výstupy A a C. Konstruktory pro tuto situaci bude vypadat takto: Pilot pilot = new TachoPilot(81.6f, 110f, Motor.A, Motor.C); SimpleNavigator navigator = new SimpleNavigator(pilot); 3

Metody třídy Pilot: Jméno metody void arc(float radius); void arc(float radius, float angle) void backward() void forward() float getangle() void setmove- Speed(float speed) void steer(float turnrate); void steer(float turnrate, float angle) void travel(float distance) void travelarc(float radius, float distance) float gettraveldistance() Poznámka Robot pojede po oblouku. Hodnota radius určuje poloměr zatáčky. Pokud je radius > 0, tak se robot začne otáčet doleva, pokud je radius < 0, tak doprava. angle je hodnota úhlu ve stupních o kterou se robot otočí Robot se začne pohybovat zpět. Robot se začne pohybovat dopředu. Metoda vrátí hodnotu úhlu ve stupních, kterou robot urazil od začátku běhu. Nastaví rychlost pohybu (hodnota proměnné speed za vteřinu). Robot pojede po zakřivené dráze. Hodnota turn- Rate může být -200 až 200. turnrate = 100... levé kolo stojí, pravé se točí dopředu ostrá levé zatáčka turnrate = 200... levé kolo se točí dozadu, pravé se točí dopředu otočení doleva na místě Pokud před hodnotu dopíšeme minus, tak se robot bude otáčet doprava. angle je hodnota úhlu ve stupních o kterou se robot otočí Robot pojede dopředu (pokud je hodnota distance záporná, tak dozadu), dokud neurazí hodnotu proměnné distance. Robot pojede po oblouku. Hodnota radius určuje poloměr zatáčky. Pokud je radius > 0, tak se robot začne otáčet doleva, pokud je radius < 0, tak doprava. hodnota distance je dráha, kterou robot urazí. Metoda vrátí vzdálenost, kterou robot urazil od začátku běhu. Tabulka 2: Přehled nejdůležitějších metod třídy Pilot 4

Metody třídy SimpleNavigator: Jméno metody float angleto(float x, float y) float distanceto(float x, float y) float getangle(float x, float y) float getx() float gety() void goto(float x, float y) void setpose(float x, float y, float heading) Poznámka Metoda vrátí hodnotu úhlu ve stupních mezi aktuální pozicí a zadaným bodem {x,y Metoda vrátí vzdálenost k zadanému bodu {x,y Metoda vrátí hodnotu úhlu ve stupních mezi směrem, kam robot směřuje, a směrem, kam robot směřoval na začátku. Metoda vrátí souřadnici x aktuální pozice. Metoda vrátí souřadnici y aktuální pozice. Metoda zařídí, aby robot dojel na určenou pozici {x,y Nastaví nové hodnoty jako výchozí bod. Tabulka 3: Přehled nejdůležitějších příkazů třídy SimpleNavigator 3.2 Příklady Robot pojede po přímé dráze a udělá zatáčku o 180. Takto bude jezdit, dokud se nestiskne tlačítko Escape. Robot tedy bude jezdit po dráze, která má tvar stadionu. import l e j o s. r o b o t i c s. n a v i g a t i o n. P i l o t ; import l e j o s. r o b o t i c s. n a v i g a t i o n. TachoPilot ; p u b l i c c l a s s Example2 { P i l o t p i l o t = new TachoPilot ( 8 1. 6 f, 120 f, Motor.A, Motor.C) ; boolean stop = f a l s e ; p u b l i c void go ( ) { / Vytvorim l i s t e n e r a na t l a c i t k o CANCEL > pote co ho stisknu, tak se hodnota stop zmeni na true / ButtonListener l i s t e n = new ButtonListener ( ) { p u b l i c void buttonpressed ( Button b ) { stop = true ; ; / ButtonListener j e i n t e r f a c e, proto musim napsat vsechny jeho tridy, i ty k t e r e n e p o u z i j i / p u b l i c void buttonreleased ( Button b ) { / l i s t e n e r a i n i c i a l i z u j i / Button.ESCAPE. addbuttonlistener ( l i s t e n ) ; 5

/ Jedu, dokud s e nezmeni hodnota stop, tu prubezne k o n t r o l u j i. / while ( stop == f a l s e ) { i f ( stop == f a l s e ) { p i l o t. t r a v e l (250) ; i f ( stop == f a l s e ) { p i l o t. s t e e r (100, 180) ; // S pusti se metoda go ( ) Example2 exam = new Example2 ( ) ; exam. go ( ) ; 4 Příkazy ovládající senzory Nyní uvedeme příkazy, kterými budeme obsluhovat jednotlivé senzory. 4.1 Dotykový senzor 4.1.1 Konstruktor TouchSensor(ADSensorPort port) 4.1.2 Metoda Pro dotykový senzor máme k dispozici metodu boolean ispressed() Metoda zkontroluje, jestli senzor sepnul (nastal dotyk). Pokud ano, tak navrací true, jinak false. 4.1.3 Příklad Dokud nesepne dotykový senzor, tak motory na pozicích A a C budou v chodu. p u b l i c c l a s s Example { // Senzor j e na vstupu c i s l o 1 6

TouchSensor s e n s o r = new TouchSensor ( SensorPort. S1 ) ; while ( s e n s o r. i s P r e s s e d ( ) == f a l s e ) { Motor.A. forward ( ) ; Motor.C. forward ( ) ; 4.2 Světelný senzor 4.2.1 Konstruktory LightSensor(ADSensorPort port) LightSensor(ADSensorPort port, boolean floodlight) Hodnotou proměnné floodlight říkáme, zda chceme použít červenou LED diodu pro osvícení povrchu. Pokud použijeme konstruktor bez této proměnné (ten první), tak se dioda rozsvítí automaticky. Tedy LightSensor(SensorPort.S1) je ekvivalentní LightSensor(SensorPort.S1,true) Konstruktorem LightSensor(SensorPort.S1,false) zajistíme, že se dioda nerozsvítí. 4.2.2 Metody int readnormalizedvalue() Metoda vrátí normalizovanou hodnotu jasu v rozsahu od 0 (úplná tma) do 1023 (intenzivní světlo). int readvalue() Metoda vrátí hodnotu jasu v procentech podle nastavené kalibrace. void setfloodlight(boolean floodlight) Touto metodou můžeme rozsvítit nebo zhasnout červenou LED diodu. void sethigh(int high) Tato metoda provede kalibraci horní hranice senzoru. Metoda readvalue poté bude pro hodnotu high vracet hodnotu 100%. void setlow(int low) Tato metoda provede kalibraci spodní hranice senzoru. Metoda readvalue poté bude pro 7

hodnotu low vracet hodnotu 0%. 4.2.3 Příklad Robot reagující na světlo. Pokud robota osvítíme světlem, tak pojede do té doby, než světlo zhasne. Jeho rychlost bude úměrná intenzitě světla. p u b l i c c l a s s Example { LightSensor s e n s o r = new LightSensor ( SensorPort. S1, f a l s e ) ; // Program se ukonci pote co se s t i s k n e t l a c i t k o u ESCAPE. while ( Button.ESCAPE. i s P r e s s e d ( ) == f a l s e ) { i n t l i g h t = s e n s o r. readnormalizedvalue ( ) ; / Pokud j e uroven j a s u v i c e jak 180, tak se motory s p u s t i a j e j i c h r y c h l o s t se n a s t a v i na zmerenou hodnotu j a s u. Hodnota 180 byla experimentalne nastavena. / i f ( l i g h t >= 180) { Motor.A. setspeed ( l i g h t ) ; Motor.C. setspeed ( l i g h t ) ; Motor.A. forward ( ) ; Motor.C. forward ( ) ; // Pokud ne, tak se motory z a s t a v i e l s e { Motor.A. stop ( ) ; Motor.C. stop ( ) ; 4.3 Ultrazvukový senzor 4.3.1 Konstruktor UltrasonicSensor(I2CPort port) 4.3.2 Metody U ultrazvukového senzoru je nejdůležitější metoda float getrange() Metoda vrátí vzdálenost v centimetrech k nejbližšímu objektu. Funguje spolehlivě v rozsahu přibližně 5cm až 190cm. 8

4.3.3 Příklad Dokud nestisknu tlačítko Escape, bude se na displej vypisovat vzdálenost k nejbližšímu objektu. p u b l i c c l a s s Example { // Senzor j e na vstupu c i s l o 1 U l t r a s o n i c S e n s o r s e n s o r = new U l t r a s o n i c S e n s o r ( SensorPort. S1 ) ; // Program se ukonci pote co se s t i s k n e t l a c i t k o u ESCAPE. while ( Button.ESCAPE. i s P r e s s e d ( ) == f a l s e ) { LCD. drawstring ( +s e n s o r. getrange ( ), 0, 0) ; 4.4 Zvukový senzor 4.4.1 Konstruktory SoundSensor(ADSensorPort port) SoundSensor(ADSensorPort port, boolean dba) Proměnnou dba nastavujeme režim senzoru. Pokud je dba true, tak bude senzor nastaven do režimu dba, jinak bude v režimu db. 4.4.2 Metody int readvalue() Metoda vrátí hodnotu naměřenou senzorem v db. void setdba(boolean dba) Nastavuje režim senzoru stejným způsobem, jaký je vysvětlen u konstruktoru. 4.4.3 Příklad Dokud nestisknu tlačítko Escape, bude se na displej vypisovat velikost hluku. p u b l i c c l a s s Example { 9

// Senzor j e na vstupu c i s l o 1, rezim dba SoundSensor s e n s o r = new SoundSensor ( SensorPort. S1, true ) ; // Program se ukonci pote co se s t i s k n e t l a c i t k o u ESCAPE. while ( Button.ESCAPE. i s P r e s s e d ( ) == f a l s e ) { LCD. drawstring ( +s e n s o r. readvalue ( ), 0, 0) ; 10