diff --git a/docs/robot/lekce10/index.md b/docs/robot/lekce10/index.md index 04ca4f08..39e9c453 100644 --- a/docs/robot/lekce10/index.md +++ b/docs/robot/lekce10/index.md @@ -1,9 +1,6 @@ # Lekce 10 - servo -Na ELKS jsou k dispozici dva jednoduché servo porty na levé straně ELSKu. - -- `SER0` - pin 35 -- `SER1` - pin 40 +Na Robůtkovi je připojené servo na pinu 38 ## Začátek @@ -12,7 +9,7 @@ Abychom mohli používat servo musíme ho získat příkazem `#!ts const servo = ```ts import { Servo } from "./libs/servo.js" -const SERVO_PIN = 35; +const SERVO_PIN = 38; const servo = new Servo(SERVO_PIN, 1, 3); ``` @@ -23,41 +20,49 @@ servo.write(512); // 90° servo.write(1023); // 180° ``` -## Dvě serva +## Kreslení tužkou -Pokud chceme používat dvě serva, musíme změnít kanál v konfiguraci druhého serva. +Na servo se dá připojit tužka. Abychom mohli tužku ovládat musíme ji získat příkazem `#!ts cosnt pen = new Pen(<číslo pinu>)`. Robůtek má 4 předdefinované konstaty pro ovládání `UP`, `DOWN`, `MIDDLE` a `UNLOAD`. ```ts -import { Servo } from "./libs/servo.js" +import { Pen } from "./libs/robot.js" + +const SERVO_PIN = 38; + +const pen = new Pen(SERVO_PIN); +``` + +Na nastavení pozice tužky použijeme funkci `#!ts pen.move()` a do závorek zadejte číslo on 0 od 1023 nebo jednu z konstant `Pen.UP`, `Pen.DOWN`, `Pen.MIDDLE` a `Pen.UNLOAD`. -const SERVO_PIN_0 = 35; -const SERVO_PIN_1 = 40; -const servo_0 = new Servo(SERVO_PIN_0, 1, 3); -const servo_1 = new Servo(SERVO_PIN_1, 1, 4); +```ts +pen.move(Pen.DOWN); // Začne kreslit +pen.move(Pen.UP); // Přestane kreslit +pen.move(Pen.UNLOAD); // Vytáhne tužku ``` ## Zadání A -Vytvořte program který bude číst data z joysticku a zapisovat je do dvou serv. +Vytvořte program, který při zmáčknutí tlačítka zasune pero a druhé tlačítko, které ho vysune. ??? note "Řešení" ```ts - import * as adc from "adc"; - import { Servo } from "./libs/servo.js" + import { Pen } from "./libs/robot.js" + import * as gpio from "gpio" + + const SERVO_PIN = 38; + const LBTN_PIN = 2; + const RBTN_PIN = 0; - const SERVO_PIN_0 = 35; - const SERVO_PIN_1 = 40; - const POT_PIN_X = 9; - const POT_PIN_Y = 10; + gpio.pinMode(LBTN_PIN, gpio.PinMode.INPUT); + gpio.pinMode(RBTN_PIN, gpio.PinMode.INPUT); - adc.configure(POT_PIN_X); - adc.configure(POT_PIN_Y); + const pen = new Pen(SERVO_PIN); - const servo_0 = new Servo(SERVO_PIN_0, 1, 3); - const servo_1 = new Servo(SERVO_PIN_1, 1, 4); + gpio.on("falling", LBTN_PIN, () => { + pen.move(Pen.DOWN); + }); - setInterval(() => { - servo_0.write(adc.read(POT_PIN_X)); - servo_0.write(adc.read(POT_PIN_Y)); - }, 25); + gpio.on("falling", RBTN_PIN, () => { + pen.move(Pen.UP); + }); ``` \ No newline at end of file diff --git a/docs/robot/lekce6/index.md b/docs/robot/lekce6/index.md index 4aeb218c..257856f5 100644 --- a/docs/robot/lekce6/index.md +++ b/docs/robot/lekce6/index.md @@ -10,23 +10,23 @@ Své řešení opět můžeme psát do souborů z předchozích cvičení, nebo Nejprve se naučíme, jak číst data z jednoho senzoru ze senzorů kolem kol a vypisovat je na monitoru: - ```ts - import * as gpio from "gpio"; - import * as adc from "adc"; +```ts +import * as gpio from "gpio"; +import * as adc from "adc"; - const SENSOR_PIN: number = 4; // pin levého předního senzoru u kola z pohledu zvrchu - const LIGHTN_PIN: number = 47; // pin na zapnutí podsvícení pro senzory +const SENSOR_PIN: number = 4; // pin levého předního senzoru u kola z pohledu zvrchu +const LIGHTN_PIN: number = 47; // pin na zapnutí podsvícení pro senzory - adc.configure(SENSOR_PIN, adc.Attenuation.Db0); // pin senzoru nakonfigurujeme s útlumem nastaveným na 0 +adc.configure(SENSOR_PIN); // nakonfigurujeme pin senzoru - gpio.pinMode(LIGHTN_PIN, gpio.PinMode.OUTPUT); // nastavíme mód pinu podsvícení na output - gpio.write(LIGHTN_PIN, 1); // zapneme podsvícení robůtka +gpio.pinMode(LIGHTN_PIN, gpio.PinMode.OUTPUT); // nastavíme mód pinu podsvícení na output +gpio.write(LIGHTN_PIN, 1); // zapneme podsvícení robůtka - setInterval(() => { // každých 100 ms vyčteme data a vypíšeme je do konzole - const value = adc.read(SENSOR_PIN); // pomocí funkce read čteme data z SENZOR_PIN - console.log(value); //vypisujeme hodnotu do konzole - }, 100); - ``` +setInterval(() => { // každých 100 ms vyčteme data a vypíšeme je do konzole + const value = adc.read(SENSOR_PIN); // pomocí funkce read čteme data z SENZOR_PIN + console.log(value); //vypisujeme hodnotu do konzole +}, 100); +``` ## Zadání A @@ -48,7 +48,7 @@ Proto musíme data takzvaně přemapovat na jiný číselný rozsah, k čemuž s const SENSOR_PIN: number = 4; // pin levého předního senzoru u kola z pohledu zvrchu const LIGHTN_PIN: number = 47; // pin na zapnutí podsvícení pro senzory - adc.configure(SENSOR_PIN, adc.Attenuation.Db0); // pin senzoru nakonfigurujeme s útlumem nastaveným na 0 + adc.configure(SENSOR_PIN); // nakonfigurujeme pin senzoru gpio.pinMode(LIGHTN_PIN, gpio.PinMode.OUTPUT); // nastavíme mód pinu podsvícení na output gpio.write(LIGHTN_PIN, 1); // zapneme podsvícení robůtka @@ -81,7 +81,7 @@ Napíšeme program, který bude pomocí dat z senzoru kolem kol měnit jas RGB L } const ledStrip: SmartLed = new SmartLed(LED_PIN, LED_COUNT, LED_WS2812); // připojí pásek na pin LED_PIN, s LED_COUT ledkami a typem WS2812 - adc.configure(SENSOR_PIN, adc.Attenuation.Db0); // pin senzoru nakonfigurujeme s útlumem nastaveným na 0 + adc.configure(SENSOR_PIN); // nakonfigurujeme pin senzoru gpio.pinMode(LIGHTN_PIN, gpio.PinMode.OUTPUT); // nastavíme mód pinu podsvícení na output gpio.write(LIGHTN_PIN, 1); // zapneme podsvícení robůtka @@ -111,7 +111,7 @@ Senzorů čáry a senzorů kolem kol je dohromady 8, ale pro zmenšení počtu v const LIGHTN_PIN: number = 47; // pin na zapnutí podsvícení pro senzory const SENSOR_SWITCH_PIN: number = 8; // pin na přepnutí mezi senzory u kola a senzory čáry - adc.configure(SENSOR_PIN, adc.Attenuation.Db0); // pin senzoru nakonfigurujeme s útlumem nastaveným na 0 + adc.configure(SENSOR_PIN); // nakonfigurujeme pin senzoru gpio.pinMode(LIGHTN_PIN, gpio.PinMode.OUTPUT); // nastavíme mód pinu podsvícení na output gpio.pinMode(SENSOR_SWITCH_PIN, gpio.PinMode.OUTPUT); diff --git a/docs/robot/lekce7/index.md b/docs/robot/lekce7/index.md index 94f9e4ea..5602374d 100644 --- a/docs/robot/lekce7/index.md +++ b/docs/robot/lekce7/index.md @@ -45,36 +45,37 @@ Složku si můžete rozbalit jako project7. ## Zadání A -Opět navážeme na předchozí lekce, a budeme do pole ukládat hodnoty z potenciometru. -Vytvoříme si pole, které při stisku vybraného tlačítka přidá aktuální hodnotu z `POT 0`. +Opět navážeme na předchozí lekce, a budeme do pole ukládat hodnoty ze sensoru. +Vytvoříme si pole, které při stisku vybraného tlačítka přidá aktuální hodnotu z ADC převodníku. Druhé tlačítko z tohoto pole poslední hodnotu smaže. Stav pole si můžeme po každé změně vypsat pomocí `#!ts console.log(pole)`. ??? note "Řešení" ```ts - import { SmartLed, LED_WS2812 } from "smartled"; - import * as colors from "./libs/colors.js"; import * as adc from "adc"; import * as gpio from "gpio"; - const INPUT_PIN : number = 2; - const LED_PIN : number = 21; - const LED_COUNT : number = 8; - const BTN_PIN : number = 18; - const MBTN_PIN : number = 16; + const SENSOR_PIN: number = 4; // pin levého předního senzoru u kola z pohledu zvrchu + const LIGHTN_PIN: number = 47; // pin na zapnutí podsvícení pro senzory - const ledStrip = new SmartLed(LED_PIN, LED_COUNT); // Nastavíme LED pásek - gpio.pinMode(BTN_PIN, gpio.PinMode.INPUT); // Nastavíme levé tlačítko - gpio.pinMode(MBTN_PIN, gpio.PinMode.INPUT); // Nastavíme střední tlačítko - adc.configure(INPUT_PIN); // Nastavíme vstup z POT0 + const LBTN_PIN : number = 2; // pin levého tlačítka + const RBTN_PIN : number = 0; // pin pravého tlačítka + + gpio.pinMode(LBTN_PIN, gpio.PinMode.INPUT); // nastavíme levé tlačítko + gpio.pinMode(RBTN_PIN, gpio.PinMode.INPUT); // nastavíme pravé tlačítko + + adc.configure(SENSOR_PIN); // nakonfigurujeme pin senzoru + + gpio.pinMode(LIGHTN_PIN, gpio.PinMode.OUTPUT); // nastavíme mód pinu podsvícení na output + gpio.write(LIGHTN_PIN, 1); // zapneme podsvícení robůtka let arr : number[] = []; - gpio.on("falling", BTN_PIN, () => { // Při stisknutí levého tlačítka - arr.push(adc.read(INPUT_PIN)); // Přidáme do pole naměřenou hodnotu + gpio.on("falling", LBTN_PIN, () => { // Při stisknutí levého tlačítka + arr.push(adc.read(SENSOR_PIN)); // Přidáme do pole naměřenou hodnotu console.log(arr); // Vypíšeme nový stav }); - gpio.on("falling", MBTN_PIN, () => { // Při stisknutí středního tlačítka + gpio.on("falling", RBTN_PIN, () => { // Při stisknutí pravého tlačítka arr.pop(); // Odebereme z pole poslední hodnotu console.log(arr); // Vypíšeme nový stav }); @@ -83,12 +84,12 @@ Stav pole si můžeme po každé změně vypsat pomocí `#!ts console.log(pole)` ## Výchozí úkol V1 Tentokrát si vytvoříme o něco rozsáhlejší program, který naváže na předchozí úkol. -Vytvoříme si pole čísel, do kterého pomocí prvního tlačítka načteme naměřené hodnoty z potenciometru. +Vytvoříme si pole čísel, do kterého pomocí prvního tlačítka načteme naměřené hodnoty z ADC převodníku. Při stisku prvního tlačítka kontrolujeme, jestli už pole má délku 8. Pokud už je délka 8, další hodnoty nepřidáváme a stisk tlačítka pole nezmění. Druhé tlačítko smaže poslední prvek -- zde kontrolujeme, jestli tam nějaký prvek je. -Třetí tlačítko na základě hodnot v poli rozsvítí LED pásek podle naměřených hodnot. +Při každé změně hodnot v poli se rozsvítí LED pásek podle naměřených hodnot. Všechny hodnoty v poli převedeme na rozsah `colors.rainbow` (tedy 0-360) a rozsvítíme LED -na odpovídajícím indexu naměřenou hodnotou. +na odpovídajícím indexu naměřenou hodnotou. \ No newline at end of file diff --git a/docs/robot/lekce8/index.md b/docs/robot/lekce8/index.md index d839db70..b7014cc4 100644 --- a/docs/robot/lekce8/index.md +++ b/docs/robot/lekce8/index.md @@ -1,4 +1,4 @@ -# Lekce 8 - Řetězce +# Lekce 8 - řetězce Zatím jsme se zařízením po nahrání programu komunikovali jednostranně: pomocí `#!ts console.log()` jsme vypisovali různé věci na výstup, a ten jsme sledovali pomocí příkazu `Monitor`. @@ -59,24 +59,27 @@ Tato funkce bere jako argument řetězec; pokud argument není řetězec, přede Jako první úkol si vyzkoušíme spojit řetězec a číslo s tím, co už známe: -Napíšeme program, který při stisku tlačítka vypíše na výstup `"Potenciometr naměřil X."`, kde X je aktuální hodnota naměřená z `POT0`. +Napíšeme program, který při stisku tlačítka vypíše na výstup `"Senzor naměřil X."`, kde X je aktuální hodnota naměřená z ADC převodníku. ??? note "Řešení" ```ts import * as gpio from "gpio"; import * as adc from "adc"; + const BTN_LEFT = 2; - const BTN_LEFT = 18; - - const POT0_PIN = 2; + const SENSOR_PIN: number = 4; + const LIGHTN_PIN: number = 47; gpio.pinMode(BTN_LEFT, gpio.PinMode.INPUT); - adc.configure(POT0_PIN); + adc.configure(SENSOR_PIN); + + gpio.pinMode(LIGHTN_PIN, gpio.PinMode.OUTPUT); + gpio.write(LIGHTN_PIN, 1); gpio.on("falling", BTN_LEFT, () => { - console.log("Potenciometr naměřil " + adc.read(POT0_PIN) + "."); + console.log("Senzor naměřil " + adc.read(SENSOR_PIN) + "."); }); ``` diff --git a/docs/robot/lekce9/index.md b/docs/robot/lekce9/index.md index 81ae5ff3..863bc974 100644 --- a/docs/robot/lekce9/index.md +++ b/docs/robot/lekce9/index.md @@ -1,6 +1,6 @@ # Lekce 9 - radio -Na ELKS je k dispozici jednoduchá bezdrátová komunikace na vzdálenost jednotek metrů. +Na ELKSRobůtkovi je k dispozici jednoduchá bezdrátová komunikace na vzdálenost jednotek metrů. - Až 16 "skupin", všechny desky ve stejné skupině přijmají zprávy od všech ostatních zároveň - Podporuje tři datové typy: @@ -113,12 +113,12 @@ radio.off("keyvalue"); ## Zadání A -Vytvořte program, který pomocí klíč-hodnota bude přes rádio odesílat stav tří tlačítek na desce +Vytvořte program, který pomocí klíč-hodnota bude přes rádio odesílat stav dvou tlačítek na desce (stisknuto == `1`, nestisknuto == `0`). -Zároveň bude reagovat na příchozí hodnoty a rosvicovat první 3 LED na desce podle příchozího stavu. +Zároveň bude reagovat na příchozí hodnoty a rosvicovat první 2 LED na LED pásku podle příchozího stavu. -Jako klíče použijte `sw0`, `sw1` a `sw2`. Vždy, když přijde klíč `sw0` s hodnotou 1, rozsvítíte LED-G, a když 0, tak ji zhasnete, -a stejně tak pro další dvě tlačítka a LED. +Jako klíče použijte `IO0` a `IO2`. Vždy, když přijde klíč `IO0` s hodnotou 1, rozsvítíte LED na indexu 1, a když 0, tak ji zhasnete, +a stejně tak pro další tlačítko a LED. Najděte kamaráda, abyste si mohli navzájem zkusit, zda program funguje (jeden vysílá, druhý přijmá). @@ -126,64 +126,52 @@ Najděte kamaráda, abyste si mohli navzájem zkusit, zda program funguje (jeden ```ts import * as radio from "simpleradio"; import * as gpio from "gpio"; + import { SmartLed, LED_WS2812 } from "smartled"; + import * as colors from "./libs/colors.js"; radio.begin(5); // skupina 5 - const PIN_SW0 = 18; - const PIN_SW1 = 16; - const PIN_SW2 = 42; + const PIN_BTN_LEFT = 2; + const PIN_BTN_RIGHT = 0; - const PIN_LED0 = 17; - const PIN_LED1 = 15; - const PIN_LED2 = 45; + const LED_PIN = 48; + const LED_COUNT = 3; // Nastavíme tlačítka jako vstupy - gpio.pinMode(PIN_SW0, gpio.PinMode.INPUT); - gpio.pinMode(PIN_SW1, gpio.PinMode.INPUT); - gpio.pinMode(PIN_SW2, gpio.PinMode.INPUT); + gpio.pinMode(PIN_BTN_LEFT, gpio.PinMode.INPUT); + gpio.pinMode(PIN_BTN_RIGHT, gpio.PinMode.INPUT); - gpio.on("falling", PIN_SW0, () => { - // Při stisknutí tlačítka 0 - radio.sendKeyValue("sw0", 1); // odešleme hodnotu 1 s klíčem sw0 + gpio.on("falling", PIN_BTN_LEFT, () => { + // Při stisknutí tlačítka 0 + radio.sendKeyValue("IO2", 1); // odešleme hodnotu 1 s klíčem sw0 }); - gpio.on("rising", PIN_SW0, () => { - // Při uvolnění tlačítka 0 - radio.sendKeyValue("sw0", 0); // odešleme hodnotu 0 s klíčem sw0 + gpio.on("rising", PIN_BTN_LEFT, () => { + // Při uvolnění tlačítka 0 + radio.sendKeyValue("IO2", 0); // odešleme hodnotu 0 s klíčem sw0 }); - gpio.on("falling", PIN_SW1, () => { - radio.sendKeyValue("sw1", 1); + gpio.on("falling", PIN_BTN_RIGHT, () => { + radio.sendKeyValue("IO0", 1); }); - gpio.on("rising", PIN_SW1, () => { - radio.sendKeyValue("sw1", 0); + gpio.on("rising", PIN_BTN_RIGHT, () => { + radio.sendKeyValue("IO0", 0); }); - gpio.on("falling", PIN_SW2, () => { - radio.sendKeyValue("sw2", 1); - }); - gpio.on("rising", PIN_SW2, () => { - radio.sendKeyValue("sw2", 0); - }); - - - // Nastavíme LED piny jako výstupy - gpio.pinMode(PIN_LED0, gpio.PinMode.OUTPUT); - gpio.pinMode(PIN_LED1, gpio.PinMode.OUTPUT); - gpio.pinMode(PIN_LED2, gpio.PinMode.OUTPUT); + const strip = new SmartLed(LED_PIN, LED_COUNT); // Zpracování příchozích správ radio.on("keyvalue", (klic, hodnota, info) => { - if (klic === "sw0") { - gpio.write(PIN_LED0, hodnota); - } else if (klic === "sw1") { - gpio.write(PIN_LED1, hodnota); - } else if (klic === "sw2") { - gpio.write(PIN_LED2, hodnota); - } + if (klic === "IO0") { + strip.set(1, colors.rainbow(0, hodnota * 10)) + } else if (klic === "IO2") { + strip.set(2, colors.rainbow(150, hodnota * 10)) + } + + strip.show(); }); ``` ## Výchozí úkol V1 -Změňtě program ze zadání A tak, aby místo tlačítek vyčítal potenciometr, a místo ledek rozsvicoval LED pásek. Je na vás, zda vzládnete rozsvicovat a pohybovat duhou, nebo pouze jednou z LED podle toho, jak se natočí potenciometr na vysílači. +Změňtě program ze zadání A tak, aby místo tlačítek vyčítal ADC převodník. Na LED pásku se bude zobrazovat hondota z ADC.