Tento workshop nejde projít jen tak z domu – je potřeba speciální příprava. Pokyny pro organizátory najdeš na podstránce.

Vítej na workshopu MicroPythonu! Dnes si ukážeme, jak programovat – jak říkat počítači, co má dělat. Aktivita je určena lidem, kteří nikdy předtím neprogramovali.

K programování použijeme programovací jazyk. To je způsob, jak počítačům zadávat příkazy – jazyk, kterému rozumí jak počítače, tak lidé (programátoři).

Konkrétně dnes použijeme MicroPython – variantu jazyka Python přizpůsobenou na ovládání malých zařízení.

Laptop použijeme vlastně jen kvůli klávesnici a monitoru; všechno zajímavé se bude dít na té malé destičce, kterou vidíš vedle sebe a ze které vede spousta drátů. (Pro úplnost: je to deska NodeMCU s mikroprocesorem ESP8266.)

Dost povídání, pojďme na to!

Otevření příkazové řádky

Klikni na Activities; potom vyber z levého panelu Terminal (ikonka černého okýnka).

Objeví se příkazová řádka – černé okýnko s bílým textem, kam můžeš zadávat příkazy.

Otevření komunikačního kanálu

V příkazové řádce by měl být řádek končící dolarem. Za ten dolar napiš:

picocom -b 115200 /dev/ttyUSB0

Opisuj opatrně, každé písmenko má smysl! Pak zmáčkni Enter. Měl by se objevit následující výpis:

picocom v1.7

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv
imap is        : 
omap is        : 
emap is        : crcrlf,delbs,

Terminal ready

Pak stiskni Enter. Měly by se objevit tři zobáčky, kterými MicroPython prosí o instrukce:

>>>

Kalkulačka

Za tři zobáčky můžeš zadat nějaký matematický příklad. MicroPython ho spočítá. Zkus třeba tyhle (zobáčky nepiš, ty vypíše sám MicroPython:

>>> 1 + 1

>>> 1 - 5

>>> 3 * 3

>>> 1 / 4

>>> (84 + 5) * 100

Poznáš co dělá hvězdička nebo lomítko? Tipneš si, proč programátoři používají tyhle symboly, a ne třeba 3 × 3 nebo ¼?

Věděl/a jsi, že v Americe používají desetinnou tečku místo čárky? Většina programovacích jazyků ji používá taky.

Světýlko

MicroPython na našich destičkách má připravený objekt led, jehož metodou value jde ovládat svítící dioda. Stačí jen zadat správné příkazy:

>>> led.value(1)
>>> led.value(0)

Tlačítko

K destičce je připojeno i tlačítko. Metodou btn.value() se zeptáš, jestli je právě zmáčknuté, nebo ne.

>>> btn.value()

Zkus tenhle příkaz zadat, zatímco tlačítko držíš.

Výrazy

Informace o tom, jestli je tlačítko zmáčknuté – btn.value() – je číslo: buď 0, nebo 1. Výraz btn.value() můžeš použít kdekoliv, kde se objevuje číslo 0, nebo 1 – třeba pro rozsvícení nebo zhasnutí diody:

>>> led.value(btn.value())

Cyklus

Existuje způsob, jak nechat MicroPython něco opakovat stále dokola: takzvaný nekonečný cyklus. Na jeden řádek napiš while True: (s velkým T a dvojtečkou na konci) a potom tělo cyklu – příkaz, který se má provést. MicroPython tělo cyklu automaticky odsadí – přidá na začátek řádku mezery. Ty mezery nemaž.

Nakonec několikrát stiskni Enter, dokud se program nespustí.

>>> while True:
...     led.value(btn.value())
...
...

Nekonečný cyklus se opakuje donekonečna. Je ale způsob jak ho přerušit, až tě omrzí: zmáčkni Ctrl+C.

Motorek

Další objekt, který můžeš použít, je servo. Ten ovládá servomotor, který můžeš nastavit na konkrétní úhel. Třeba:

>>> servo.duty(120)
>>> servo.duty(40)

... nebo něco mezi tím.

Nepoužívej prosím čísla menší než 40 nebo větší než 120, motorek se tím může ničit.

Matematika

Před chvílí jsme si ukázali tento kód:

>>> led.value(btn.value())

Hodnota btn.value() může být buď 1, nebo 0. Pojďme ji použít pro motorek: chceme, aby se natočil buď na 40 nebo na 120, podle toho, jestli je tlačítko zmáčknuté.

Na to, abys z 0 nebo 1 udělal/a 40 nebo 120, je potřeba znát trochu matematiky:

  • X + 0 × Y = 40
  • X + 1 × Y = 120

Jistě zvládneš vypočítat, že X = 40 a Y = 80. Tyhle hodnoty doplnit do kódu:

>>> servo.duty(40 + btn.value() * 80)

Změníš program tak, aby se natáčel na 50 nebo 90?

Dokážeš výsledek dát do cyklu, aby program na zmáčknutí či puštění tlačítka reagoval automaticky?

Barvy

Poslední věc připojená k destičce je LED pásek s několika světýlky. Každé z nich se dá nastavit na nějakou barvu. Zkus si to:

>>> strip[0] = RED
>>> strip[1] = GREEN
>>> strip[2] = BLUE
>>> strip.write()

První tři příkazy připravují jednotlivé barvy a poslední všechno připravené pošle do LED pásku. Až budeš experimentovat, nezapomeň na strip.write() – bez toho se barvy neukážou.

Program

Teď si přestaneme jen tak hrát a začneme psát program.

Spusť editor: Klikni na Activities; potom vyber z levého panelu Text Editor (ikonka zápisníku s tužkou).

Objeví se bílé okýnko, do kterého napiš:

strip[0] = WHITE
strip[1] = OFF
strip[2] = OFF
strip.write()

Soubor ulož (Save) pod jménem main.py.

Potom se vrať k příkazové řádce a ukonči picocom: stiskni Ctrl+A a pak Ctrl+Q. Měl by se objevit řádek končící dolarem.

Za dolar napiš:

ampy -p /dev/ttyUSB0 run main.py

... a stiskni Enter. Tento příkaz soubor s programem do zařízení nahraje a rovnou spustí.

Zkus v editoru nastavit jiné barvy a program znovu uložit (Ctrl+S).

Potom v příkazové řádce zmáčkni šipku nahoru . Tím se vrátíš k předchozímu příkazu (ampy) a můžeš znovu stisknout Enter a program spustit.

Blikání

Tady je program, který rozbliká LED pásek. Ukazuje větší cyklus, a navíc funkci sleep, která MicroPython na chvíli zdrží: sleep(1/4) čeká čtvrtinu sekundy.

Při přepisování dávej pozor na odsazení – řádky vevnitř v cyklu musí být všechny odsazené o čtyři mezery.

strip[0] = OFF
strip[1] = OFF
strip[2] = OFF

while True:
    strip[0] = RED
    strip[1] = OFF
    strip.write()
    sleep(1/4)

    strip[0] = OFF
    strip[1] = RED
    strip.write()
    sleep(1/4)

Semafor

Dokážeš naprogramovat semafor?

Se závorou?

Cyklus s podmínkou

Cykly nemusí být jen nekonečné. Tady je cyklus, který čeká dokud není stisknuté tlačítko.

Potom se rozsvítí světlo – všimni si, že příkaz led.value(1) už není odsazený. Není součást cyklu.

led.value(0)

while btn.value():
    sleep(1/100)

led.value(1)

Alarm

Polož na tlačítko nějaký těžší předmět (třeba myš) tak, aby bylo zmáčknuté. Když někdo předmět vezme, tlačítko přestane být zmáčknuté.

Napiš program, který na to bude čekat a jakmile někdo myš ukradne, LED pásek začne zuřivě blikat.

Konec?

Tím dnešní krátká exkurze do světa MicroPythonu končí. Jestli tě programování zaujalo a chceš v něm pokračovat, dej nám vědět!

Nebo pak z klidu domova napiš Petrovi na pviktori@redhat.com.

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2017/rh-openschool-micropython:workshop:0",
      "title": "Workshop MicroPythonu",
      "html": "\n          \n    \n\n    <div class=\"admonition note\"><p>Tento workshop nejde proj&#xED;t jen tak z&#xA0;domu &#x2013; je pot&#x159;eba speci&#xE1;ln&#xED; p&#x159;&#xED;prava.\nPokyny pro organiz&#xE1;tory najde&#x161;\nna <a href=\"/2017/rh-openschool-micropython/micropython/mini-workshop/organizers/\">podstr&#xE1;nce</a>.</p>\n</div><p>V&#xED;tej na workshopu MicroPythonu!\nDnes si uk&#xE1;&#x17E;eme, jak programovat &#x2013; jak &#x159;&#xED;kat po&#x10D;&#xED;ta&#x10D;i, co m&#xE1; d&#x11B;lat.\nAktivita je ur&#x10D;ena lidem, kte&#x159;&#xED; nikdy p&#x159;edt&#xED;m neprogramovali.</p>\n<p>K&#xA0;programov&#xE1;n&#xED; pou&#x17E;ijeme <em>programovac&#xED; jazyk</em>.\nTo je zp&#x16F;sob, jak po&#x10D;&#xED;ta&#x10D;&#x16F;m zad&#xE1;vat p&#x159;&#xED;kazy &#x2013; jazyk, kter&#xE9;mu\nrozum&#xED; jak po&#x10D;&#xED;ta&#x10D;e, tak lid&#xE9; (program&#xE1;to&#x159;i).</p>\n<p>Konkr&#xE9;tn&#x11B; dnes pou&#x17E;ijeme MicroPython &#x2013; variantu jazyka Python p&#x159;izp&#x16F;sobenou na\novl&#xE1;d&#xE1;n&#xED; mal&#xFD;ch za&#x159;&#xED;zen&#xED;.</p>\n<p>Laptop pou&#x17E;ijeme vlastn&#x11B; jen kv&#x16F;li kl&#xE1;vesnici a monitoru; v&#x161;echno zaj&#xED;mav&#xE9;\nse bude d&#xED;t na t&#xE9; mal&#xE9; desti&#x10D;ce, kterou vid&#xED;&#x161; vedle sebe a ze kter&#xE9; vede\nspousta dr&#xE1;t&#x16F;.\n(Pro &#xFA;plnost: je to deska <em>NodeMCU</em> s&#xA0;mikroprocesorem <em>ESP8266</em>.)</p>\n<p>Dost pov&#xED;d&#xE1;n&#xED;, poj&#x10F;me na to!</p>\n<h2>Otev&#x159;en&#xED; p&#x159;&#xED;kazov&#xE9; &#x159;&#xE1;dky</h2>\n<p><img src=\"/2017/rh-openschool-micropython/micropython/mini-workshop/static/icon_terminal.png\" style=\"float:right;height:5em;\"></p>\n<p>Klikni na <em>Activities</em>; potom vyber z lev&#xE9;ho panelu <em>Terminal</em> (ikonka\n&#x10D;ern&#xE9;ho ok&#xFD;nka).</p>\n<p>Objev&#xED; se <em>p&#x159;&#xED;kazov&#xE1; &#x159;&#xE1;dka</em> &#x2013; &#x10D;ern&#xE9; ok&#xFD;nko s b&#xED;l&#xFD;m textem,\nkam m&#x16F;&#x17E;e&#x161; zad&#xE1;vat p&#x159;&#xED;kazy.</p>\n<h2>Otev&#x159;en&#xED; komunika&#x10D;n&#xED;ho kan&#xE1;lu</h2>\n<p>V p&#x159;&#xED;kazov&#xE9; &#x159;&#xE1;dce by m&#x11B;l b&#xFD;t &#x159;&#xE1;dek kon&#x10D;&#xED;c&#xED; dolarem.\nZa ten dolar napi&#x161;:</p>\n<div class=\"highlight\"><pre><span></span>picocom -b <span class=\"m\">115200</span> /dev/ttyUSB0\n</pre></div><p>Opisuj opatrn&#x11B;, ka&#x17E;d&#xE9; p&#xED;smenko m&#xE1; smysl!\nPak zm&#xE1;&#x10D;kni Enter.\nM&#x11B;l by se objevit n&#xE1;sleduj&#xED;c&#xED; v&#xFD;pis:</p>\n<div class=\"highlight\"><pre><code>picocom v1.7\n\nport is        : /dev/ttyUSB0\nflowcontrol    : none\nbaudrate is    : 115200\nparity is      : none\ndatabits are   : 8\nescape is      : C-a\nlocal echo is  : no\nnoinit is      : no\nnoreset is     : no\nnolock is      : no\nsend_cmd is    : sz -vv\nreceive_cmd is : rz -vv\nimap is        : \nomap is        : \nemap is        : crcrlf,delbs,\n\nTerminal ready</code></pre></div><p>Pak stiskni Enter.\nM&#x11B;ly by se objevit t&#x159;i zob&#xE1;&#x10D;ky, kter&#xFD;mi MicroPython pros&#xED; o instrukce:</p>\n<div class=\"highlight\"><pre><code>&gt;&gt;&gt;</code></pre></div><div style=\"page-break-after: always;\"></div><h2>Kalkula&#x10D;ka</h2>\n<p>Za t&#x159;i zob&#xE1;&#x10D;ky m&#x16F;&#x17E;e&#x161; zadat n&#x11B;jak&#xFD; matematick&#xFD; p&#x159;&#xED;klad. MicroPython ho spo&#x10D;&#xED;t&#xE1;.\nZkus t&#x159;eba tyhle (zob&#xE1;&#x10D;ky nepi&#x161;, ty vyp&#xED;&#x161;e s&#xE1;m MicroPython:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">1</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"mi\">5</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"mi\">3</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">1</span> <span class=\"o\">/</span> <span class=\"mi\">4</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">(</span><span class=\"mi\">84</span> <span class=\"o\">+</span> <span class=\"mi\">5</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">100</span>\n</pre></div><p>Pozn&#xE1;&#x161; co d&#x11B;l&#xE1; hv&#x11B;zdi&#x10D;ka nebo lom&#xED;tko?\nTipne&#x161; si, pro&#x10D; program&#xE1;to&#x159;i pou&#x17E;&#xED;vaj&#xED; tyhle symboly, a ne t&#x159;eba\n<code>3 &#xD7; 3</code> nebo <code>&#xBC;</code>?</p>\n<p>V&#x11B;d&#x11B;l/a jsi, &#x17E;e v&#xA0;Americe pou&#x17E;&#xED;vaj&#xED; desetinnou te&#x10D;ku m&#xED;sto &#x10D;&#xE1;rky?\nV&#x11B;t&#x161;ina programovac&#xED;ch jazyk&#x16F; ji pou&#x17E;&#xED;v&#xE1; taky.</p>\n<h2>Sv&#x11B;t&#xFD;lko</h2>\n<p>MicroPython na na&#x161;ich desti&#x10D;k&#xE1;ch m&#xE1; p&#x159;ipraven&#xFD; objekt <code>led</code>, jeho&#x17E; metodou\n<code>value</code> jde ovl&#xE1;dat sv&#xED;t&#xED;c&#xED; dioda.\nSta&#x10D;&#xED; jen zadat spr&#xE1;vn&#xE9; p&#x159;&#xED;kazy:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">led</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">led</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</pre></div><h2>Tla&#x10D;&#xED;tko</h2>\n<p>K desti&#x10D;ce je p&#x159;ipojeno i tla&#x10D;&#xED;tko.\nMetodou <code>btn.value()</code> se zept&#xE1;&#x161;, jestli je pr&#xE1;v&#x11B; zm&#xE1;&#x10D;knut&#xE9;, nebo ne.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">btn</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">()</span>\n</pre></div><p>Zkus tenhle p&#x159;&#xED;kaz zadat, zat&#xED;mco tla&#x10D;&#xED;tko dr&#x17E;&#xED;&#x161;.</p>\n<h2>V&#xFD;razy</h2>\n<p>Informace o tom, jestli je tla&#x10D;&#xED;tko zm&#xE1;&#x10D;knut&#xE9; &#x2013; <code>btn.value()</code> &#x2013; je &#x10D;&#xED;slo:\nbu&#x10F; 0, nebo 1.\nV&#xFD;raz <code>btn.value()</code> m&#x16F;&#x17E;e&#x161; pou&#x17E;&#xED;t kdekoliv, kde se objevuje &#x10D;&#xED;slo\n0, nebo 1 &#x2013; t&#x159;eba pro rozsv&#xED;cen&#xED; nebo zhasnut&#xED; diody:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">led</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"n\">btn</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">())</span>\n</pre></div><h2>Cyklus</h2>\n<p>Existuje zp&#x16F;sob, jak nechat MicroPython n&#x11B;co opakovat st&#xE1;le dokola:\ntakzvan&#xFD; <em>nekone&#x10D;n&#xFD; cyklus</em>.\nNa jeden &#x159;&#xE1;dek napi&#x161; <code>while True:</code> (s velk&#xFD;m T a dvojte&#x10D;kou na konci)\na potom <em>t&#x11B;lo cyklu</em> &#x2013; p&#x159;&#xED;kaz, kter&#xFD; se m&#xE1; prov&#xE9;st.\nMicroPython t&#x11B;lo cyklu automaticky <em>odsad&#xED;</em> &#x2013; p&#x159;id&#xE1; na za&#x10D;&#xE1;tek &#x159;&#xE1;dku\nmezery. Ty mezery nema&#x17E;.</p>\n<p>Nakonec n&#x11B;kolikr&#xE1;t stiskni Enter, dokud se program nespust&#xED;.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">while</span> <span class=\"bp\">True</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"n\">led</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"n\">btn</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">())</span>\n<span class=\"gp\">...\n</span><span class=\"gp\">...\n</span></pre></div><p>Nekone&#x10D;n&#xFD; cyklus se opakuje donekone&#x10D;na.\nJe ale zp&#x16F;sob jak ho p&#x159;eru&#x161;it, a&#x17E; t&#x11B; omrz&#xED;: zm&#xE1;&#x10D;kni\n<kbd>Ctrl</kbd>+<kbd>C</kbd>.</p>\n<div style=\"page-break-after: always;\"></div><h2>Motorek</h2>\n<p>Dal&#x161;&#xED; objekt, kter&#xFD; m&#x16F;&#x17E;e&#x161; pou&#x17E;&#xED;t, je <code>servo</code>.\nTen ovl&#xE1;d&#xE1; servomotor, kter&#xFD; m&#x16F;&#x17E;e&#x161; nastavit na konkr&#xE9;tn&#xED; &#xFA;hel. T&#x159;eba:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">servo</span><span class=\"o\">.</span><span class=\"n\">duty</span><span class=\"p\">(</span><span class=\"mi\">120</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">servo</span><span class=\"o\">.</span><span class=\"n\">duty</span><span class=\"p\">(</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n</pre></div><p>... nebo n&#x11B;co mezi t&#xED;m.</p>\n<p>Nepou&#x17E;&#xED;vej pros&#xED;m &#x10D;&#xED;sla men&#x161;&#xED; ne&#x17E; 40 nebo v&#x11B;t&#x161;&#xED; ne&#x17E; 120, motorek se t&#xED;m m&#x16F;&#x17E;e\nni&#x10D;it.</p>\n<h2>Matematika</h2>\n<p>P&#x159;ed chv&#xED;l&#xED; jsme si uk&#xE1;zali tento k&#xF3;d:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">led</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"n\">btn</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">())</span>\n</pre></div><p>Hodnota <code>btn.value()</code> m&#x16F;&#x17E;e b&#xFD;t bu&#x10F; 1, nebo 0.\nPoj&#x10F;me ji pou&#x17E;&#xED;t pro motorek: chceme, aby se nato&#x10D;il bu&#x10F; na 40 nebo na\n120, podle toho, jestli je tla&#x10D;&#xED;tko zm&#xE1;&#x10D;knut&#xE9;.</p>\n<p>Na to, abys z&#xA0;0 nebo 1 ud&#x11B;lal/a 40 nebo 120, je pot&#x159;eba zn&#xE1;t\ntrochu matematiky:</p>\n<ul>\n<li><var>X</var> + <code>0</code> &#xD7; <var>Y</var> = <code>40</code></li>\n<li><var>X</var> + <code>1</code> &#xD7; <var>Y</var> = <code>120</code></li>\n</ul>\n<p>Jist&#x11B; zvl&#xE1;dne&#x161; vypo&#x10D;&#xED;tat, &#x17E;e <var>X</var> = 40 a <var>Y</var> = 80.\nTyhle hodnoty doplnit do k&#xF3;du:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">servo</span><span class=\"o\">.</span><span class=\"n\">duty</span><span class=\"p\">(</span><span class=\"mi\">40</span> <span class=\"o\">+</span> <span class=\"n\">btn</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">()</span> <span class=\"o\">*</span> <span class=\"mi\">80</span><span class=\"p\">)</span>\n</pre></div><p>Zm&#x11B;n&#xED;&#x161; program tak, aby se nat&#xE1;&#x10D;el na <code>50</code> nebo <code>90</code>?</p>\n<p>Dok&#xE1;&#x17E;e&#x161; v&#xFD;sledek d&#xE1;t do cyklu, aby program na zm&#xE1;&#x10D;knut&#xED; &#x10D;i pu&#x161;t&#x11B;n&#xED; tla&#x10D;&#xED;tka\nreagoval automaticky?</p>\n<h2>Barvy</h2>\n<p>Posledn&#xED; v&#x11B;c p&#x159;ipojen&#xE1; k desti&#x10D;ce je LED p&#xE1;sek s <em>n&#x11B;kolika</em> sv&#x11B;t&#xFD;lky.\nKa&#x17E;d&#xE9; z nich se d&#xE1; nastavit na n&#x11B;jakou barvu.\nZkus si to:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">RED</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">GREEN</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">BLUE</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">strip</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">()</span>\n</pre></div><p>Prvn&#xED; t&#x159;i p&#x159;&#xED;kazy p&#x159;ipravuj&#xED; jednotliv&#xE9; barvy a posledn&#xED; v&#x161;echno p&#x159;ipraven&#xE9;\npo&#x161;le do LED p&#xE1;sku.\nA&#x17E; bude&#x161; experimentovat, nezapome&#x148; na <code>strip.write()</code> &#x2013; bez toho\nse barvy neuk&#xE1;&#x17E;ou.</p>\n<div style=\"page-break-after: always;\"></div><h2>Program</h2>\n<p><img src=\"/2017/rh-openschool-micropython/micropython/mini-workshop/static/icon_gedit.png\" style=\"float:right;height:5em;\"></p>\n<p>Te&#x10F; si p&#x159;estaneme jen tak hr&#xE1;t a za&#x10D;neme ps&#xE1;t program.</p>\n<p>Spus&#x165; <em>editor</em>: Klikni na <em>Activities</em>; potom vyber z lev&#xE9;ho panelu\n<em>Text Editor</em> (ikonka z&#xE1;pisn&#xED;ku s tu&#x17E;kou).</p>\n<p>Objev&#xED; se b&#xED;l&#xE9; ok&#xFD;nko, do kter&#xE9;ho napi&#x161;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">WHITE</span>\n<span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">OFF</span>\n<span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">OFF</span>\n<span class=\"n\">strip</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">()</span>\n</pre></div><p>Soubor ulo&#x17E; (<em>Save</em>) pod jm&#xE9;nem <code>main.py</code>.</p>\n<p>Potom se vra&#x165; k p&#x159;&#xED;kazov&#xE9; &#x159;&#xE1;dce a ukon&#x10D;i <code>picocom</code>:\nstiskni <kbd>Ctrl</kbd>+<kbd>A</kbd> a pak <kbd>Ctrl</kbd>+<kbd>Q</kbd>.\nM&#x11B;l by se objevit &#x159;&#xE1;dek kon&#x10D;&#xED;c&#xED; dolarem.</p>\n<p>Za dolar napi&#x161;:</p>\n<div class=\"highlight\"><pre><span></span>ampy -p /dev/ttyUSB0 run main.py\n</pre></div><p>... a stiskni <kbd>Enter</kbd>.\nTento p&#x159;&#xED;kaz soubor s&#xA0;programem do za&#x159;&#xED;zen&#xED; nahraje a rovnou spust&#xED;.</p>\n<p>Zkus v editoru nastavit jin&#xE9; barvy a program znovu ulo&#x17E;it\n(<kbd>Ctrl</kbd>+<kbd>S</kbd>).</p>\n<p>Potom v p&#x159;&#xED;kazov&#xE9; &#x159;&#xE1;dce zm&#xE1;&#x10D;kni <em>&#x161;ipku nahoru</em> <kbd>&#x2191;</kbd>.\nT&#xED;m se vr&#xE1;t&#xED;&#x161; k p&#x159;edchoz&#xED;mu p&#x159;&#xED;kazu (<code>ampy</code>) a m&#x16F;&#x17E;e&#x161; znovu stisknout\n<kbd>Enter</kbd> a program spustit.</p>\n<h2>Blik&#xE1;n&#xED;</h2>\n<p>Tady je program, kter&#xFD; rozblik&#xE1; LED p&#xE1;sek.\nUkazuje v&#x11B;t&#x161;&#xED; cyklus, a nav&#xED;c funkci <code>sleep</code>, kter&#xE1; MicroPython na chv&#xED;li\nzdr&#x17E;&#xED;: <code>sleep(1/4)</code> &#x10D;ek&#xE1; &#x10D;tvrtinu sekundy.</p>\n<p>P&#x159;i p&#x159;episov&#xE1;n&#xED; d&#xE1;vej pozor na odsazen&#xED; &#x2013; &#x159;&#xE1;dky vevnit&#x159; v cyklu mus&#xED; b&#xFD;t\nv&#x161;echny odsazen&#xE9; o &#x10D;ty&#x159;i mezery.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">OFF</span>\n<span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">OFF</span>\n<span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">OFF</span>\n\n<span class=\"k\">while</span> <span class=\"bp\">True</span><span class=\"p\">:</span>\n    <span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">RED</span>\n    <span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">OFF</span>\n    <span class=\"n\">strip</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">()</span>\n    <span class=\"n\">sleep</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"o\">/</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">OFF</span>\n    <span class=\"n\">strip</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">RED</span>\n    <span class=\"n\">strip</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">()</span>\n    <span class=\"n\">sleep</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"o\">/</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n</pre></div><h2>Semafor</h2>\n<p><img src=\"/2017/rh-openschool-micropython/micropython/mini-workshop/static/semafor.gif\" style=\"float:right;height:5em;\"></p>\n<p>Dok&#xE1;&#x17E;e&#x161; naprogramovat semafor?</p>\n<p>Se z&#xE1;vorou?</p>\n<h2>Cyklus s podm&#xED;nkou</h2>\n<p>Cykly nemus&#xED; b&#xFD;t jen nekone&#x10D;n&#xE9;.\nTady je cyklus, kter&#xFD; &#x10D;ek&#xE1; dokud nen&#xED; stisknut&#xE9; tla&#x10D;&#xED;tko.</p>\n<p>Potom se rozsv&#xED;t&#xED; sv&#x11B;tlo &#x2013; v&#x161;imni si, &#x17E;e p&#x159;&#xED;kaz <code>led.value(1)</code> u&#x17E; nen&#xED;\nodsazen&#xFD;. Nen&#xED; sou&#x10D;&#xE1;st cyklu.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">led</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n<span class=\"k\">while</span> <span class=\"n\">btn</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">():</span>\n    <span class=\"n\">sleep</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"o\">/</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n<span class=\"n\">led</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</pre></div><h2>Alarm</h2>\n<p>Polo&#x17E; na tla&#x10D;&#xED;tko n&#x11B;jak&#xFD; t&#x11B;&#x17E;&#x161;&#xED; p&#x159;edm&#x11B;t (t&#x159;eba my&#x161;) tak, aby bylo zm&#xE1;&#x10D;knut&#xE9;.\nKdy&#x17E; n&#x11B;kdo p&#x159;edm&#x11B;t vezme, tla&#x10D;&#xED;tko p&#x159;estane b&#xFD;t zm&#xE1;&#x10D;knut&#xE9;.</p>\n<p>Napi&#x161; program, kter&#xFD; na to bude &#x10D;ekat a jakmile n&#x11B;kdo my&#x161; ukradne,\nLED p&#xE1;sek za&#x10D;ne zu&#x159;iv&#x11B; blikat.</p>\n<h2>Konec?</h2>\n<p>T&#xED;m dne&#x161;n&#xED; kr&#xE1;tk&#xE1; exkurze do sv&#x11B;ta MicroPythonu kon&#x10D;&#xED;.\nJestli t&#x11B; programov&#xE1;n&#xED; zaujalo a chce&#x161; v n&#x11B;m pokra&#x10D;ovat, dej n&#xE1;m v&#x11B;d&#x11B;t!</p>\n<p>Nebo pak z klidu domova napi&#x161; Petrovi na pviktori@redhat.com.</p>\n\n\n        "
    }
  }
}