Programování robota Edison 3 – EdPy

Máme za sebou dva díly grafického programování, ošoupanou myš a chtěli bychom nyní konečně program textovat. Dobrá zpráva i pro robota Edison máme k dispozici jeden klasický programovací jazyk a to Python ve verzi EdPy.

Počítejte s tím, že se jedná opravdu o podmnožinu Pythonu, ať občas nejste překvapeni, že některé konstrukce, které znáte nefungují.

Například příkaz for, má pouze jednu variantu syntaxe:

for x in range(5):

ve významu pro x od 0 do 4.

Editor je opět pouze online na adrese https://edpy.app, Po zobrazení jste dotázáni, zda máte Edisona ve verzi 1 nebo 2. Určitě máte verzi 2, verze 1 se u nás neprodává. Doporučuji založit si účet, můžete si tak své programy ukládat v cloudu. Po otevření stránky vidíte minimální kód, který by měl váš program obsahovat:

#-------------Setup----------------
import Ed
Ed.EdisonVersion = Ed.V2
Ed.DistanceUnits = Ed.CM
Ed.Tempo = Ed.TEMPO_MEDIUM
#--------Your code below-----------

Význam je následující:

  • import Ed – načtení knihovny pro Edisona
  • Ed.EdisonVersion=Ed.V2 – máme verzi Edison 2
  • Ed.DistanceUnits = Ed.CM – jednotky v povelech jsou centimetry (alternativy jsou INCH a TIME (v milisekundách))
  • Ed.Tempo = Ed.TEMPO_MEDIUM – rychlost přehrávání hudby

Pro začátek jsou výborným materiálem pro naučení se programování Edisona v EdPy ukázkové příklady. Možná jste již pochopili, že se jedná o příklady, které jsou v Edisonu uložené a můžeme je zvolit načtením čárového kódu – viz díl jedna.

Programování v EdPy je velmi jednoduché, ukážeme si nyní některé možnosti. Začneme u toho co děti více baví – u výstupů videa a zvuku.

Blikání diody a zvuk

Pro práci s diodou máme následující dvě metody Ed.LeftLed() a Ed.RightLed() s jedním parametrem, který může nabývat dvou hodnot Ed.ON a Ed.OFF. Použití je asi jasné slouží jako přepínač stavu levé a pravé diody.

Při psaní se možná setkáte s jednou (alespoň pro mne) nepříjemnou vlastností. Editor se Vám neustále snaží podstrčit vhodnou syntaxi a často to vede k přepisům a překlepům typu Ed.Ed.ON, které je pak problém v textu najít. (Nebo spíše vidět, program vám špatnou řádku ukáže.)

Pro výstup zvuku máme k dispozici dvě metody. První z nich Ed.PlayBeep() prostě přehraje pípnutí a druhá se syntaxí ve tvaru Ed.PlayTone(Ed.NOTE_B_6,Ed.NOTE_HALF) zahraje notu o dané výšce a délce. Podrobnosti ke všem příkazům včetně ukázkového kódu naleznete v nápovědě vpravo, stačí vybrat  požadovanou metodu nebo objekt.

Jízda robota

Pro jízdu máme metodu Ed.Drive se syntaxí Ed.Drive(Ed.FORWARD,Ed.SPEED_5,8). První parametr nám říká jakým směrem se vydáváme – vpřed/vzad nebo vlevo,vpravo, následuje rychlost a posledním parametrem je vzdálenost (cm, palce nebo sekundy, dle toho co jsme nastavili) popřípadě úhel (ve stupních), dle toho co má smysl.

Události

Při programování Edisona, můžeme počítat s následujícími událostmi

  • Tlesknutí . Dotaz na něj zprostředkuje funkce Ed.ReadClapSensor, která vrací hodnotu 1 (Ed.CLAP_DETECTED) nebo 0 (Ed.CLAP_NOT_DETECTED)
  • Překážka. Před prvním použitím na začátku programu je třeba inicializovat systém detekce překážek pomocí metody Ed.ObstacleDetectionBeam(Ed.ON) a pak použijeme funkci Ed.ReadObstacleDetection() vracející možnosti Ed.OBSTACLE_AHEAD, Ed.OBSTACLE_NONE, Ed.OBSTACLE_LEFT a Ed.OBSTACLE_RIGHT.
  • Jízda po čáře. Opět musíme sensor nejprve inicializovat příkazem Ed.LineTrackerLed(Ed.ON) a poté  můžeme používat funkci Ed.ReadLineState(), která vrací stav Ed.LINE_ON_BLACK nebo Ed.LINE_ON_WHITE.

Máme k dispozici rovněž funkci pro obsluhu událostí Ed.RegisterEventHandler(událost, „jméno volané funkce“). Možné události si najděte v nápovědě.
Příklad z minulých dílů tak může vypadat v EdPy nějak takto:

import Ed

Ed.EdisonVersion = Ed.V2
Ed.DistanceUnits = Ed.CM
Ed.Tempo = Ed.TEMPO_MEDIUM
Ed.ObstacleDetectionBeam(Ed.ON)

def zatoc():
    Ed.LeftLed(Ed.ON)
    Ed.RightLed(Ed.ON)
    Ed.PlayBeep()
    Ed.Drive(Ed.SPIN_RIGHT, 9, 90)
    Ed.LeftLed(Ed.OFF)
    Ed.RightLed(Ed.OFF)
    Ed.PlayBeep()

Ed.RegisterEventHandler(Ed.EVENT_OBSTACLE_ANY, "zatoc")

while (True):
    Ed.Drive(Ed.FORWARD, Ed.SPEED_5, Ed.DISTANCE_UNLIMITED)

Kód již známým způsobem nahrajeme do Edisona a tentokrát by neměl být problém v žádném operačním systému.
Doufám, že se mi podařilo těmito články představit zajímavý typ současného výukového robota. Pokud máte na něco jiný nebo naopak obdobný názor anebo nějaké zkušenosti, podělte se nimi na fóru nebo FaceBooku.