Motory

Motory jsou jednou ze základních komponent robota a proto s nimi začneme. Nejprve je potřeba vytvořit si instanci motorů:

ev3cxx::Motor motor(ev3cxx::MotorPort::A, ev3cxx::MotorType::LARGE);

Vytvořili jsme objekt motor, který je nastaven na port A a typ LARGE.

K dispozici máme všechny motorové porty na Bricku : A, B, C a D. U typů máme 3 volby, které odpovídají stejným blokům v originálním LEGO Softwaru: UNREGULATED, MEDIUM a LARGE.

_images/lego-soft_motor-unregulated.png _images/lego-soft_motor-medium.png _images/lego-soft_motor-large.png
  • neregulované motory (UNREGULATED): u motorů se nastavuje jen výkon, změny zatížení (jízda do kopce) budou značně ovlivňovat rychlost
  • regulované motory střední a velké (MEDIUM a LARGE): u motorů se nastavuje rychlost a motor se tuto rychlost snaží udržovat, upravuje tak výkon v závislosti na okolním prostředí (nerovnosti, překážky, atd.)

Při inicializaci je potřeba se rozhodnout v jakém režimu budete chtít s motorem pracovat.

Poznámka

Pokud nebude řečeno jinak:
  • při zadání parametru mimo rozsah se automaticky nastavuje maximální/minimální povolená hodnota.
  • výchozí hodnoty metod odpovídají standardním hodnotám v LEGO Softwaru.
Příklad:
Rozsah povolených hodnot je v rozmezí od -100 do 100. Při zadání hodnoty -101, dojde k ořezání na hodnotu -100. Při zadání hodnoty 101, dojde k ořezání na hodnotu 100.

Výkon a rychlost

Poznámka

Parametry při nastavování rychlosti a výkonu.

  • speed: rychlost motoru při jízdě; rozsah od -100 do 100
  • brake: brzdění; true - motor brzdí, false - motor lze volně protáčet

off()

_images/lego-soft_motor-medium-off.png
void off(bool brake = true)

Metoda off() zastavuje motor. Nastavuje rychlost nebo výkon (v závislosti na daném režimu) na 0. Jako parametr se předává zda má motor zároveň brzdit (true) nebo se volně protáčet (false). Ve výchozím stavu brzdí (true).

Použití: motor.off();

on()

_images/lego-soft_motor-medium.png
void on(int power = 50)

Metoda on() nastavuje rychlost motoru. Jako parametr se předává požadovaná rychlost v rozsahu -100 až 100. Ve výchozím stavu je hodnota 50.

Použití: motor.on(50);

Čas a otáčky

Poznámka

Nové parametry při nastavování otáček.

  • speed: rychlost motoru při běhu; rozsah od -100 do 100
  • time_ms: čas v milisekundách, po který se bude motor točit;
  • degrees: počet stupňů, o které se má motor otočit; lze otáčet i o více než +- 360 stupňů
  • rotations: počet otáček, které má motor udělat; lze zadávat i desetinná čísla
  • brake: brzdění po otočení o daný počet stupňů; true - motor po dotočení brzdí, false - motor lze volně protáčet
  • blocking: když true - metoda blokuje další provádění programu, dokud nedokončí svůj úkol
  • wait_after_ms: parametr, který nastavuje čekání po ukončení dané akce (jen v případě blocking = true); nechte výchozí hodnotu

onForSeconds()

_images/lego-soft_motor-medium-onForSeconds.png
void onForSeconds(int speed = 50,
                  unsigned int time_ms = 1000,
                  bool brake = true)

Metoda onForSeconds() nastavuje čas, jak dlouho se má motor točit. Jako parametry se předávají: speed, time_ms, brake.

Použití: motor.onForSeconds(50, 1000);

Poznámka

LEGO pracuje se sekundami a desetinnými čísly, EV3CXX používá milisekundy a celá čísla

Varování

Metoda je vždy blokující. Další příkazy v programu se začnou vykonávat až metoda skončí.

onForDegrees()

_images/lego-soft_motor-medium-onForDegrees.png
void onForDegrees(int speed = 50,
                  int degrees = 360,
                  bool brake = true,
                  bool blocking = true,
                  unsigned int wait_after_ms = 60)

Metoda onForDegrees() nastavuje počet stupňů, o které se má motor otočit. Jedna otáčka motoru odpovídá 360 stupňům. Jako parametry se předávají: speed, degrees, brake, blocking, wait_after_ms.

Použití: motor.onForDegrees(50, 360);

onForRotations()

_images/lego-soft_motor-medium-onForRotations.png
void onForRotations(int speed = 50,
                    float rotations = 1,
                    bool brake = true,
                    bool blocking = true,
                    unsigned int wait_after_ms = 60)

Metoda onForRotations() nastavuje počet otáček, o které se má motor otočit. Jako parametry se předávají: speed, rotations, brake, blocking, wait_after_ms.

Použití: motor.onForRotations(50, 1);

Čtení polohy a rychlosti

degrees()

_images/lego-soft_motor-degrees.png
int degrees()

Metoda degrees() vrací polohu motoru ve stupních.

Použití: motor.degrees();

rotations()

_images/lego-soft_motor-rotations.png
float rotations()

Metoda rotations() vrací polohu motoru v otáčkách (float = desetinné číslo).

Použití: motor.rotations();

resetPosition()

_images/lego-soft_motor-resetPosition.png
void resetPosition()

Metoda resetPosition() vyresetuje pozici motoru (ovlivní metodu degrees() a rotations()).

Použití: motor.resetPosition();

currentPower()

_images/lego-soft_motor-currentPower.png
int currentPower()

Metoda currentPower() vrací aktuální rychlost motoru.

Použití: motor.currentPower();

Dostupné metody

Po vytvoření objektu motor lze na něm volat metody:

  • off() - vypne motory a začne brzdit
  • on() - nastaví rychlost na motorech
  • onForSeconds() - jede po zadanou dobu
  • onForDegrees() - otočí se o daný počet stupňů
  • onForRotations() - otočí se o daný počet otáček
  • degrees() - vrátí aktuální počet stupňů na motoru
  • rotations() - vrátí aktuální počet otáček na motoru
  • resetPosition() - vyresetuje pozici motoru (ovlivní metodu degrees() a rotations())
  • currentPower() - vrátí aktuální rychlost motoru
  • getType() - vrátí aktuálně nastavený typ motoru na daném portu v systému EV3RT