{"id":3298,"date":"2026-04-16T11:28:45","date_gmt":"2026-04-16T08:28:45","guid":{"rendered":"https:\/\/blog.edu.turku.fi\/allu\/?page_id=3298"},"modified":"2026-05-15T11:55:37","modified_gmt":"2026-05-15T08:55:37","slug":"robotti-ohjelmointi","status":"publish","type":"page","link":"https:\/\/blog.edu.turku.fi\/allu\/sivu-2\/robotti-ohjelmointi\/","title":{"rendered":"Robottiohjelmointi"},"content":{"rendered":"\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-black-color has-text-color has-background has-link-color wp-element-button\" href=\"https:\/\/blog.edu.turku.fi\/allu\/sivu-2\/\" style=\"background-color:#e6f3b7\">Palaa takaisin<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:30px\"><strong>Robottiohjelmointi &#8211; Lego Spike Prime<\/strong><\/h2>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-style-default\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0\"><img loading=\"lazy\" decoding=\"async\" width=\"573\" height=\"510\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/1-1.png\" alt=\"\" class=\"wp-image-3440\" style=\"object-fit:cover\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/1-1.png 573w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/1-1-300x267.png 300w\" sizes=\"auto, (max-width: 573px) 100vw, 573px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0\"><img loading=\"lazy\" decoding=\"async\" width=\"577\" height=\"510\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/2-1.png\" alt=\"\" class=\"wp-image-3441\" style=\"object-fit:cover\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/2-1.png 577w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/2-1-300x265.png 300w\" sizes=\"auto, (max-width: 577px) 100vw, 577px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0\"><img loading=\"lazy\" decoding=\"async\" width=\"475\" height=\"510\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/3-1.png\" alt=\"\" class=\"wp-image-3442\" style=\"object-fit:cover\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/3-1.png 475w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/3-1-279x300.png 279w\" sizes=\"auto, (max-width: 475px) 100vw, 475px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"510\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2.png\" alt=\"\" class=\"wp-image-3443\" style=\"object-fit:cover\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2.png 512w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2-300x300.png 300w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2-150x150.png 150w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2-270x270.png 270w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2-230x230.png 230w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-1&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-1-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-1\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Ohje: Kurssin toteutus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-1\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-1-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Lego-yleisohje-2.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Tiedoston Lego yleisohje upotus.\"><\/object><a id=\"wp-block-file--media-da71a6a2-df7a-4091-ad78-8b1209949942\" href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Lego-yleisohje-2.pdf\">Lego yleisohje<\/a><a href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Lego-yleisohje-2.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-da71a6a2-df7a-4091-ad78-8b1209949942\">Lataa<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-2&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-black-color has-text-color has-background has-link-color has-medium-font-size wp-elements-3218f6a990a82094b3149d5540578240\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-2-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-2\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Ohje: Lego Spike Prime k\u00e4ytt\u00f6\u00f6n<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-2\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-2-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/LEGO-ohjelmointitehtavien-ohje.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Tiedoston LEGO-ohjelmointiteht\u00e4vien ohje upotus.\"><\/object><a id=\"wp-block-file--media-74e92134-6366-4569-90cd-61ffa4adb9e1\" href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/LEGO-ohjelmointitehtavien-ohje.pdf\">LEGO-ohjelmointiteht\u00e4vien ohje<\/a><a href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/LEGO-ohjelmointitehtavien-ohje.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-74e92134-6366-4569-90cd-61ffa4adb9e1\">Lataa<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:25px\"><strong>1. Perusteht\u00e4v\u00e4t<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" style=\"font-size:20px\"><strong>Liike<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 1.<\/strong> Liikkuminen eteen- ja taaksep\u00e4in<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3579e122e2731badf355ef7a54aa5001\">Kirjoita koodi, jonka avulla robotti liikkuu ensin suoraan eteenp\u00e4in ja sitten taaksep\u00e4in, eli palaa alkupisteeseen.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-3&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-black-color has-text-color has-background has-link-color has-medium-font-size wp-elements-76f8bc8c1ad1ca46f0118695b9766ad1\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-3-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-3\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-3\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-3-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port \nimport runloop \nimport motor_pair \n\nasync def main(): \n\u202f \u202f #alustetaan moottoripari \n\u202f \u202f motor_pair.pair(motor_pair.PAIR_1, port.C, port.D) \n\n\u202f \u202f #Ajetaan suoraan \u202f10s asetetulla nopeudella. \n\u202f \u202f await motor_pair.move_for_time(motor_pair.PAIR_1, 5000, 0, velocity=500) \n\n\u202f \u202f #Ajetaan suoraan10s asetetulla nopeudella. \n\u202f \u202f await motor_pair.move_for_time(motor_pair.PAIR_1, 5000, 0, velocity=-500) \n\nrunloop.run(main()) <\/code><\/pre>\n\n\n\n<p>Ratkaisun voi toteuttaa my\u00f6s palikoita k\u00e4ytt\u00e4en seuraavasti:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"355\" height=\"266\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-6.png\" alt=\"\" class=\"wp-image-3315\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-6.png 355w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-6-300x225.png 300w\" sizes=\"auto, (max-width: 355px) 100vw, 355px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 2.<\/strong> K\u00e4\u00e4ntyminen<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-b41c24bd3f5ae3fee357190571aa9438\">Kirjoita koodi, joka k\u00e4\u00e4nt\u00e4\u00e4 robotin paikallaan ensin oikealle ja sitten vasemmalle.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-4&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-4-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-4\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-4\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-4-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port \nimport runloop \nimport motor_pair \n\nasync def main(): \n\u202f \u202f # alustetaan moottoripari \n\u202f \u202f motor_pair.pair(motor_pair.PAIR_1, port.C, port.D) \n\n\u202f \u202f #k\u00e4\u00e4nny oikealle \n\u202f \u202f await motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, 180, 1000, 0) \n\n\u202f \u202f #k\u00e4\u00e4nny vasemmalle \n\u202f \u202f await motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, 180, 0, 1000) \n\nrunloop.run(main()) <\/code><\/pre>\n\n\n\n<p>Ratkaisun voi toteuttaa my\u00f6s palikoita k\u00e4ytt\u00e4en seuraavasti:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"256\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-7.png\" alt=\"\" class=\"wp-image-3320\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-7.png 387w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-7-300x198.png 300w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 3. <\/strong>Liikkuminen + k\u00e4\u00e4ntyminen<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-edbe0a234577790bbe52c57135a91184\">Aja robotilla aluksi suoraan taaksep\u00e4in ja sitten k\u00e4\u00e4nny oikealle. Aja lopuksi viel\u00e4 eteenp\u00e4in.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-5&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-5-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-5\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-5\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-5-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port\nimport runloop\nimport motor_pair\n\nasync def main(): \n\u202f \u202f # alustetaan moottoripari \n\u202f \u202f motor_pair.pair(motor_pair.PAIR_1, port.C, port.D)\n\n\u202f \u202f #suoraan taaksep\u00e4in\n\u202f \u202f await motor_pair.move_for_time(motor_pair.PAIR_1, 5000, 0, velocity=-500)\n\n\u202f \u202f #k\u00e4\u00e4ntyminen oikealle\n\u202f \u202f await motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, 180, 0, 1000)\n\n\u202f \u202f #suoraan eteenp\u00e4in\n\u202f \u202f await motor_pair.move_for_time(motor_pair.PAIR_1, 5000, 0, velocity=500)\n\nrunloop.run(main())<\/code><\/pre>\n\n\n\n<p>Ratkaisun voi toteuttaa my\u00f6s palikoita k\u00e4ytt\u00e4en seuraavasti:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"389\" height=\"316\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-9.png\" alt=\"\" class=\"wp-image-3329\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-9.png 389w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-9-300x244.png 300w\" sizes=\"auto, (max-width: 389px) 100vw, 389px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>Anturit<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 4.<\/strong> Valomatriisi<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-5bdf8222bacb1b6fe13f1433d0a310c2\"><strong>a)<\/strong> <strong> <\/strong>Teksti valomatriisiin. Tulosta robotin valomatriisiin teksti.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-6&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-6-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-6\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-6\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-6-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix\n\n#n\u00e4ytt\u00e4\u00e4 Terve!-tekstin robotin valomatriisilla\nlight_matrix.write(\"Terve!\")<\/code><\/pre>\n\n\n\n<p>Ratkaisun voi toteuttaa my\u00f6s palikoita k\u00e4ytt\u00e4en seuraavasti:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"252\" height=\"141\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-8.png\" alt=\"\" class=\"wp-image-3327\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>b)<\/strong> Kuva valomatriisiin. Tulosta robotin valomatriisiin kuva ja vaihda robotin k\u00e4ynnistyspainikkeen v\u00e4ri haluamaksesi.<\/h5>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-7&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-7-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-7\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-7\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-7-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light, light_matrix\nimport color\n\n#N\u00e4ytt\u00e4\u00e4 kirahvin kuvan robotin valomatriisilla\nlight_matrix.show_image(light_matrix.IMAGE_GIRAFFE)\n\n#V\u00e4rj\u00e4\u00e4 k\u00e4ynnistyspainikkeen violetiksi\nlight.color(light.POWER, color.PURPLE)<\/code><\/pre>\n\n\n\n<p>Ratkaisun voi toteuttaa my\u00f6s palikoita k\u00e4ytt\u00e4en seuraavasti:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"402\" height=\"198\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-10.png\" alt=\"\" class=\"wp-image-3332\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-10.png 402w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-10-300x148.png 300w\" sizes=\"auto, (max-width: 402px) 100vw, 402px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 5. <\/strong>V\u00e4ri- ja valosensori<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-ed2abdee68b8cd1f8111e7b5be6a84c4\">Tulosta tietokoneen n\u00e4yt\u00f6lle, ett\u00e4 asettamasi v\u00e4ri on havaittu.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-8&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-8-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-8\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-8\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-8-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import color_sensor\nfrom hub import port\nimport color\n\nif color_sensor.color(port.B) == color.YELLOW:\n    print(\"Keltainen havaittu\")<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 6. <\/strong>Gyroanturi<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-053b765291afa361a26fc49530988aa8\"><strong>a)<\/strong> K\u00e4\u00e4nn\u00e4 robottia komennolla n. 90 astetta k\u00e4ytt\u00e4en liikeanturia (motion_sensor-moduuli). K\u00e4\u00e4nn\u00e4 sitten robotti takaisin alkuasentoon.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-793bde1607887b010300b5587aeb3e7e\">Arvot voivat vaihdella, sill\u00e4 robotit ovat yksil\u00f6llisi\u00e4.&nbsp;<br>K\u00e4ytet\u00e4\u00e4n yksitt\u00e4isi\u00e4 moottoreita, my\u00f6s tankkik\u00e4\u00e4nn\u00f6s kenties mahdollinen.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-9&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-9-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-9\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-9\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-9-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port, motion_sensor as ms\nimport runloop, motor \n\nmoottori1 = port.C\nmoottori2 = port.D \n\nasync def main():\n    ms.reset_yaw(0)\n    motor.run(moottori1, 300)\n    motor.run(moottori2, 300)\n    while ms.tilt_angles()&#091;0] &lt; 850:\n        await runloop.sleep_ms(5)\n    motor.stop(moottori1)\n    motor.stop(moottori2)\n\n    await runloop.sleep_ms(600)\n\n    motor.run(moottori1, -300)\n    motor.run(moottori2, -300)\n    ms.reset_yaw(0)\n    while ms.tilt_angles()&#091;0] &gt; -850:\n        await runloop.sleep_ms(5)\n    motor.stop(moottori1)\n    motor.stop(moottori2)\n\nrunloop.run(main())<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>b)<\/strong> Robotti on t\u00e4ss\u00e4 teht\u00e4v\u00e4ss\u00e4 oikein p\u00e4in, kun valomatriisi on kohti kattoa. Kirjoita koodi, joka havaitsee robotin kolmiulotteisen asennon ja n\u00e4ytt\u00e4\u00e4 valomatriisilla oikeanlaisen kuvion. Jos robotti on oikein p\u00e4in, matriisilla n\u00e4ytet\u00e4\u00e4n hymi\u00f6. Jos se on v\u00e4\u00e4rinp\u00e4in, n\u00e4ytet\u00e4\u00e4n surunaama. Muuten n\u00e4ytet\u00e4\u00e4n se suunta, johon robottia olisi k\u00e4\u00e4nnett\u00e4v\u00e4, jotta se olisi oikein p\u00e4in.&nbsp;<\/h5>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-10&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-10-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-10\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-10\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-10-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix, motion_sensor\nimport orientation, runloop\n\nasync def main():\n\u202f \u202f while True:\n\u202f \u202f \u202f \u202f side = motion_sensor.up_face()\n\n\u202f \u202f \u202f \u202f # Oikein p\u00e4in\n\u202f \u202f \u202f \u202f if side == motion_sensor.TOP:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_HAPPY)\n\n\u202f \u202f \u202f \u202f # Yl\u00f6salaisin\n\u202f \u202f \u202f \u202f elif side == motion_sensor.BOTTOM:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_SAD)\n\n\u202f \u202f \u202f \u202f # Kaiutin yl\u00f6sp\u00e4in \u2192 k\u00e4\u00e4nn\u00e4 taakse\n\u202f \u202f \u202f \u202f elif side == motion_sensor.FRONT:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.set_orientation(orientation.DOWN)\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_ARROW_N)\n\n\u202f \u202f \u202f \u202f # USB-portti yl\u00f6sp\u00e4in \u2192 k\u00e4\u00e4nn\u00e4 eteen \n\u202f \u202f \u202f \u202f elif side == motion_sensor.BACK:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.set_orientation(orientation.UP)\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_ARROW_N)\n\n\u202f \u202f \u202f \u202f # Vasen sivu yl\u00f6sp\u00e4in \u2192 k\u00e4\u00e4nn\u00e4 oikealle\n\u202f \u202f \u202f \u202f elif side == motion_sensor.LEFT:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.set_orientation(orientation.LEFT)\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_ARROW_N) \n\n\u202f \u202f \u202f \u202f # Oikea sivu yl\u00f6sp\u00e4in \u2192 k\u00e4\u00e4nn\u00e4 vasemmalle \n\u202f \u202f \u202f \u202f elif side == motion_sensor.RIGHT:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.set_orientation(orientation.RIGHT)\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_ARROW_N)\n\n\u202f \u202f \u202f \u202f await runloop.sleep_ms(100)\n\nrunloop.run(main())<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 7. <\/strong>Et\u00e4isyysanturi<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-8836b9d3c93c15eaf9c2e02f92e86f3f\">Aja robotilla eteenp\u00e4in, kunnes robotti n\u00e4kee sein\u00e4n. Sein\u00e4n havaittuaan robotti peruuttaa v\u00e4h\u00e4n matkaa (esim. sekunnin) ja n\u00e4ytt\u00e4\u00e4 et\u00e4isyysanturilla mitatun et\u00e4isyyden n\u00e4yt\u00f6ll\u00e4.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-11&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-11-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-11\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-11\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-11-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix, port\nimport runloop, distance_sensor as ds, motor, time\n\nmoottori1 = port.C\nmoottori2 = port.D\n\nasync def main():\n    while True:\n\n        et\u00e4isyys = ds.distance(port.A)\n        motor.run(moottori1, -600)\n        motor.run(moottori2, 600)\n\n        if et\u00e4isyys &gt; 200 or et\u00e4isyys == -1 or et\u00e4isyys is None:\n            time.sleep_ms(100)\n\n        else:\n            motor.run(moottori1, 600)\n            motor.run(moottori2, -600)\n            time.sleep_ms(1000)\n            motor.stop(moottori1)\n            motor.stop(moottori2)\n            break\n\n    await light_matrix.write(str(et\u00e4isyys))\n\nrunloop.run(main())<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 8. <\/strong>Voima-anturi<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f62f7a952d9975793b2e7181f77c333e\">Toteuta voimapeli, johon voi osallistua 1\u20135 pelaajaa. Jokainen pelaaja painaa vuorollaan voima-anturia t\u00e4ysill\u00e4. T\u00e4m\u00e4 tehd\u00e4\u00e4n kolme kertaa ja korkein tulos j\u00e4\u00e4 voimaan. Korkeimman tuloksen saanut pelaaja voittaa.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-12&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-12-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-12\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-12\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-12-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import button, port\nimport force_sensor\nimport time\n\nplayers = 1\nmin_players = 1\nmax_players = 5\n\nprint(\"Valitse kilpailijoiden m\u00e4\u00e4r\u00e4\")\nprint(\"Oikea = lis\u00e4\u00e4, vasen = aloittaa pelin\")\nprint(\"Kilpailijoita:\", players)\n\nwhile True:\n    if button.pressed(button.RIGHT):\n        if players &lt; max_players:\n            players += 1\n            print(\"Kilpailijoita:\", players)\n        time.sleep(0.3)\n\n    if button.pressed(button.LEFT):\n        print(\"\\nKISA ALKAA!\")\n        time.sleep(0.5)\n        break\n\n    time.sleep(0.05)\n\nall_results = &#091;]\n\nfor player in range(1, players + 1):\n    print(\"\\nKILPAILIJA\", player)\n    results = &#091;]\n\n    for press in range(1, 4):\n        max_force = 0\n        print(\"Painallus\", press, \": paina anturia\")\n\n        # Odota painalluksen alkua\n        while force_sensor.force(port.E) == 0:\n            time.sleep(0.01) \n\n        # Mittaa painalluksen ajan\n        while force_sensor.force(port.E) &gt; 0:\n            f = force_sensor.force(port.E)\n            if f &gt; max_force:\n                max_force = f\n            time.sleep(0.01)\n\n        results.append(max_force)\n        print(\"\u2192 Tulos:\", max_force, \"%\\n\")\n        time.sleep(0.5)\n\n    best = max(results)\n    all_results.append(best)\n\n    print(\"Kilpailijan\", player, \"paras tulos:\", best, \"%\")\n\n# VOITTAJA\n\nprint(\"\\nLOPPUTULOKSET\")\nfor i, score in enumerate(all_results):\n    print(\"Kilpailija\", i + 1, \":\", score, \"%\")\n\nwinner_force = max(all_results)\nwinner_index = all_results.index(winner_force) + 1\n\nprint(\"\\nVOITTAJA\")\nprint(\"Kilpailija\", winner_index, \"voitti voimalla\", winner_force, \"%\") <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 9. <\/strong>\u00c4\u00e4ni<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-0d01801459d698a27f1824c4d4735dec\">Laita robotti soittamaan Ukko Nooa -laulun alku. Pyyd\u00e4 kappaleen alun s\u00e4velten taajuudet hertsein\u00e4 esimerkiksi teko\u00e4lylt\u00e4, \u00e4l\u00e4 kuitenkaan kopioi koko koodia.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-13&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-13-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-13\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-13\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-13-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import sound\nimport time\n\nsound.beep(440, 300, 100)\ntime.sleep_ms(300)\nsound.beep(440, 300, 100)\ntime.sleep_ms(300)\nsound.beep(440, 300, 100)\ntime.sleep_ms(300)\nsound.beep(555, 300, 100)\ntime.sleep_ms(300)\nsound.beep(494, 300, 100)\ntime.sleep_ms(300)\nsound.beep(494, 300, 100)\ntime.sleep_ms(300)\nsound.beep(494, 300, 100)\ntime.sleep_ms(300)\nsound.beep(587, 300, 100)\ntime.sleep_ms(300)\nsound.beep(555, 300, 100)\ntime.sleep_ms(300)\nsound.beep(555, 300, 100)\ntime.sleep_ms(300)\nsound.beep(494, 300, 100)\ntime.sleep_ms(300)\nsound.beep(494, 300, 100)\ntime.sleep_ms(300)\nsound.beep(440, 300, 100)\ntime.sleep_ms(600)<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Ratkaistavissa my\u00f6s palikoilla:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"272\" height=\"529\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-11.png\" alt=\"\" class=\"wp-image-3347\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-11.png 272w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-11-154x300.png 154w\" sizes=\"auto, (max-width: 272px) 100vw, 272px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 10. <\/strong>Painikkeet<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f469efba1a17d7b9de17f90812011776\">Toteuta koodi, jossa oikeaa painiketta painamalla robotti k\u00e4\u00e4ntyy oikealle ja vasenta painiketta painamalla vasemmalle.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-14&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-14-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-14\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-14\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-14-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import button, port\nimport motor_pair\nimport runloop\n\nasync def main():\n    motor_pair.pair(motor_pair.PAIR_1, port.C, port.D)\n     \n    while True:\n        if button.pressed(button.LEFT):\n            motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, 180, 1000, 0)\n\n        elif button.pressed(button.RIGHT):\n            motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, 180, 0, 1000)\n        await runloop.sleep_ms(10)\n\nrunloop.run(main())<\/code><\/pre>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"591\" height=\"241\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-12.png\" alt=\"\" class=\"wp-image-3350\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-12.png 591w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-12-300x122.png 300w\" sizes=\"auto, (max-width: 591px) 100vw, 591px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>Ohjelmoinnin perusominaisuudet<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 11. <\/strong>Silmukat<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-859fda5d7492c8ed0acd42cf2ae387e6\">Ohjelmoi robotti ajamaan ymp\u00e4ri siten, ett\u00e4 se p\u00e4\u00e4tyy suurin piirtein samaan aloitusasemaan ja -asentoon. K\u00e4\u00e4nn\u00f6ksi\u00e4 voi olla vapaavalintainen m\u00e4\u00e4r\u00e4. Robotti voi ajaa esim. neli\u00f6n mallisesti, kuten esimerkiss\u00e4. Esimerkki on tehty k\u00e4ytt\u00e4en robotin asentoanturia.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-15&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-15-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-15\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-15\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-15-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix, port, motion_sensor as ms\nimport runloop, motor\n\nmoottori1 = port.C\nmoottori2 = port.D\n\nasync def main():\n\n    for i in range(8):\n        print(i)\n        ms.reset_yaw(0)\n\n        motor.run(moottori1, 300)\n        motor.run(moottori2, 300)\n\n        while ms.tilt_angles()&#091;0] &lt; 700:\n            await runloop.sleep_ms(5)\n        motor.stop(moottori1)\n        motor.stop(moottori2)\n\n        print(i)\n\n        motor.run(moottori1, -500)\n        motor.run(moottori2, 500)\n        await runloop.sleep_ms(500)\n\n        motor.stop(moottori1)\n        motor.stop(moottori2)\n\n    await light_matrix.write(\"Ymp\u00e4ri\")\n\nrunloop.run(main())<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 12. <\/strong>Ehdot<\/h2>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c29eba998c44267f178edbb452b19eb2\">Toteuta koodi, jonka avulla havaitaan, mink\u00e4 v\u00e4rinen objekti on n\u00e4ytetty v\u00e4rianturille. Valomatriisille tulostetaan teksti ja k\u00e4ynnistyspainikkeen v\u00e4ri vaihtuu n\u00e4ytetyn objektin v\u00e4rin mukaisesti. Jos v\u00e4rianturille n\u00e4ytet\u00e4\u00e4n esim. punainen palikka, valomatriisille tulee tulostaa PUNAINEN ja k\u00e4ynnistyspainikkeen v\u00e4ri muuttuu punaiseksi.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-e0495fbc2f7a4a0ae259a684af5550ef\">Koodissa tulee huomioida kaikki v\u00e4rianturin tunnistamat v\u00e4rit.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-16&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-16-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-16\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-16\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-16-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port, light_matrix, light\nimport color_sensor\nimport color\n\nwhile True:\n    if color_sensor.color(port.F) == color.RED:\n        light_matrix.write(\"PUNAINEN\")\n        light.color(light.POWER, color.RED)\n    elif color_sensor.color(port.F) == color.GREEN:\n        light_matrix.write(\"VIHRE\u00c4\")\n        light.color(light.POWER, color.GREEN)\n    elif color_sensor.color(port.F) == color.BLUE:\n        light_matrix.write(\"SININEN\")\n        light.color(light.POWER, color.BLUE)\n    elif color_sensor.color(port.F) == color.MAGENTA:\n        light_matrix.write(\"MAGENTA\")\n        light.color(light.POWER, color.MAGENTA)\n    elif color_sensor.color(port.F) == color.YELLOW:\n        light_matrix.write(\"KELTAINEN\")\n        light.color(light.POWER, color.YELLOW)\n    elif color_sensor.color(port.F) == color.ORANGE:\n        light_matrix.write(\"ORANSSI\")\n        light.color(light.POWER, color.ORANGE)\n    elif color_sensor.color(port.F) == color.AZURE:\n        light_matrix.write(\"TAIVAANSININEN\")\n        light.color(light.POWER, color.AZURE)\n    elif color_sensor.color(port.F) == color.BLACK:\n        light_matrix.write(\"MUSTA\")\n        light.color(light.POWER, color.BLACK)\n    elif color_sensor.color(port.F) == color.WHITE:\n        light_matrix.write(\"VALKOINEN\")\n        light.color(light.POWER, color.WHITE)\n    else:\n        pass<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 13. <\/strong>Muuttujat<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-75af2ba0fcc955bdfc84fd3e28498161\">N\u00e4yt\u00e4 luvut 1\u201310 robotin valomatriisilla sekunnin v\u00e4lein.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-17&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-17-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-17\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-17\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-17-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix as lm\nimport runloop\n\nasync def main():\n    for i in range(1,11):\n        await runloop.sleep_ms(1000)\n        lm.write(str(i))\n\nrunloop.run(main())\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 14. <\/strong>Yhdistelm\u00e4<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-424ed160c0c1c39461f8ec73251800cc\">Yhdistet\u00e4\u00e4np\u00e4 hieman edellisiss\u00e4 teht\u00e4viss\u00e4 mainittuja asioita. Luo ohjelma, jossa asetetaan erisuuruiset arvot kahdelle muuttujalle. Lis\u00e4ksi ohjelmassa tulee olla silmukka, jossa v\u00e4hennet\u00e4\u00e4n suuremman muuttujan arvosta, kunnes sen arvo on toisen muuttujan arvoa pienempi. Robotin tulee liikkua sek\u00e4 n\u00e4ytt\u00e4\u00e4 valomatriisilla jokin kuvio silmukan suorituksen ajan. Kun silmukan suoritus p\u00e4\u00e4ttyy, robotin tulee pys\u00e4hty\u00e4 ja valomatriisilla n\u00e4ytett\u00e4v\u00e4n kuvion vaihtua.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-18&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-18-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-18\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-18\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-18-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix, port\nimport runloop, motor_pair\n\nmotor_pair.pair(motor_pair.PAIR_1, port.C, port.D)\n\nasync def main():\n    var1 = 1\n    var2 = 4\n    while var1 &lt; var2:\n        var2 -= 1\n        await light_matrix.write(\"M\")\n        motor_pair.move(motor_pair.PAIR_1, 0, velocity=500)\n        await runloop.sleep_ms(1000)\n\n    motor_pair.stop(motor_pair.PAIR_1)\n    await light_matrix.write(\"S\")\n\nrunloop.run(main())\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 15. <\/strong>Funktiot<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-337e003ce0fb5c5b630ca30722c857d9\">Ohjelmoi robotti ajamaan siksakkia annetuin parametrein (pituus, k\u00e4\u00e4ntymiskulma). Pituuden tai kulman yksikk\u00f6\u00e4 ei tarvitse olla m\u00e4\u00e4riteltyn\u00e4. Mahdollista my\u00f6s pidemm\u00e4n siksakin ajaminen hy\u00f6dynt\u00e4m\u00e4ll\u00e4 funktiokutsuja, jotta siksakin ajaminen voidaan tarvittaessa toistaa.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-19&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-19-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-19\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-19\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-19-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port, motion_sensor as ms\nimport runloop, motor\n\nmoottori1 = port.C\nmoottori2 = port.D\n\nasync def suorita_siksakki(matka, k\u00e4\u00e4nn\u00f6s):\n\n    motor.run(moottori1, -500)\n    motor.run(moottori2, 500)\n\n    await runloop.sleep_ms(matka)\n\n    ms.reset_yaw(0)\n\n    motor.run(moottori1, 300)\n    motor.run(moottori2, 300)\n\n    while ms.tilt_angles()&#091;0] &lt; k\u00e4\u00e4nn\u00f6s:\n        await runloop.sleep_ms(5)\n    motor.stop(moottori1)\n    motor.stop(moottori2)\n\n    motor.run(moottori1, -500)\n    motor.run(moottori2, 500)\n\n    await runloop.sleep_ms(matka)\n\n    ms.reset_yaw(0)\n\n    motor.run(moottori1, -300)\n    motor.run(moottori2, -300)\n\n    while ms.tilt_angles()&#091;0] &gt; -k\u00e4\u00e4nn\u00f6s:\n        await runloop.sleep_ms(5)\n\n    motor.stop(moottori1)\n    motor.stop(moottori2)\n\nasync def main():\n\n    for i in range(3):\n        await suorita_siksakki(500, 700)\n\nrunloop.run(main())<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 16. <\/strong>Ajastus<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-6d2018353fc887af2a3d416efcc52359\">Kirjoita ohjelma, joka toteuttaa seuraavat toiminnot j\u00e4rjestyksess\u00e4:&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-71a398b61cad308b684a0c3d8c0e64c9\">&#8211; Ohjelma alkaa viisi sekuntia k\u00e4ynnistyksen j\u00e4lkeen.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d8d206d1d51aca1cd42ce30c484425a2\">&#8211; Robotti liikkuu suoraan eteenp\u00e4in viiden sekunnin ajan.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d73985b415017e8a6468a975c82e18f5\">&#8211; Sitten robotti odottaa j\u00e4lleen viisi sekuntia.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a4ed75e32dda4b9d587032e60dee6a13\">&#8211; Robotti tekee seuraavaksi viisi sekuntia kest\u00e4v\u00e4n tankkik\u00e4\u00e4nn\u00f6ksen.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-7803120db14a4b5cee1292764b9bf906\">&#8211; Robotti odottaa viiden sekunnin ajan, mink\u00e4 j\u00e4lkeen se tekee viisi sekuntia kest\u00e4v\u00e4n \u00e4\u00e4nen.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-20&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-20-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-20\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-20\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-20-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port, sound\nimport motor_pair\nimport runloop\nimport time\n\nasync def main():\n    motor_pair.pair(motor_pair.PAIR_1, port.C, port.D)\n    time.sleep_ms(5000)\n    motor_pair.move_tank_for_time(motor_pair.PAIR_1, 5000, 5000, 5000)\n    time.sleep_ms(5000)\n    motor_pair.move_tank_for_time(motor_pair.PAIR_1, 5000, -5000, 5000)\n    time.sleep_ms(5000)\n    sound.beep(500, 5000, 100)\n\nrunloop.run(main())<\/code><\/pre>\n\n\n\n<p>Voi luoda vastaavan my\u00f6s ohjelmointipalikoita k\u00e4ytt\u00e4en.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"395\" height=\"458\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-13.png\" alt=\"\" class=\"wp-image-3363\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-13.png 395w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-13-259x300.png 259w\" sizes=\"auto, (max-width: 395px) 100vw, 395px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:25px\"><strong>2. Lopputy\u00f6<\/strong><\/h3>\n\n\n\n<div style=\"height:23px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a591ce9d7c9dd36205777de29cbf8199\"><strong>Valitse kaksi projektiteht\u00e4v\u00e4\u00e4 tai projektiteht\u00e4v\u00e4 6.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3720f76b3d8b90aefd9220d65247945b\">Mallivideon, malliratkaisujen sek\u00e4 pitkien tekstip\u00e4tkien kopioiminen LEGO SPIKE:n tietokannasta teko\u00e4lylle on kielletty\u00e4 ja rikkoo tekij\u00e4noikeuslakeja. Muutoin teko\u00e4lyn hy\u00f6dynt\u00e4minen on sallittua. Toteuta koodi, jossa robotti noudattaa seuraavia kriteerej\u00e4.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-21&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-black-color has-text-color has-background has-link-color has-medium-font-size wp-elements-d0d5cb3b3de47c919749df4c038e4f2f\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-21-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-21\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">K\u00e4yt\u00e4nn\u00f6n ohjeita<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-21\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-21-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Jos et\u00e4isyysanturi ei havaitse mit\u00e4\u00e4n, se palauttaa arvon -1. Projektiteht\u00e4viin on sallittua lis\u00e4t\u00e4 omia parannuksia, kuten arvojen tulostamista komentokehotteeseen sek\u00e4 aloitus- ja lopetusehtoja, kunhan kaikki vaaditut asiat toteutuvat. Koodiin on suositeltavaa lis\u00e4t\u00e4 omia selitt\u00e4vi\u00e4 kommentteja #-merkill\u00e4. Pid\u00e4 robotin nopeudet aluksi matalina ja nosta niit\u00e4 vasta siin\u00e4 vaiheessa, kun koodi toimii luotettavasti. Jos akku on v\u00e4hiss\u00e4, robotti toimii huonommin. Liian alhainen nopeus voi kuitenkin tehd\u00e4 robotista tarpeettoman hitaan ja aiheuttaa toiminnallisia ongelmia.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-22&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-black-color has-text-color has-background has-link-color has-medium-font-size wp-elements-d4d89a536751ee06a87c41d46cf7ed31\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-22-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-22\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Arviointikriteerit<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-22\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-22-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Projektiteht\u00e4vien tulee toimia vaadittavien ominaisuuksien mukaisesti. Robotin ei tarvitse toimia t\u00e4ysin virheett\u00f6m\u00e4sti, kunhan sen toiminta on p\u00e4\u00e4osin samankaltainen kuin mallivideolla. Lopullisen koodin tulee ymm\u00e4rt\u00e4\u00e4 riveitt\u00e4in ja osata selitt\u00e4\u00e4, mit\u00e4 kukin koodirivi tekee.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c0db98cbcba4e1fe9ae8cef29d275379\" style=\"font-size:16px\"><strong><strong>Projektiteht\u00e4v\u00e4<\/strong> 1<\/strong>.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3fd7933fd590ac9566aeccbd0e72e468\">Robotti liikkuu automaattisesti suoraan eteenp\u00e4in tasaisella perusnopeudella. Valkoisella paperilla robotin nopeus kasvaa ja se kiihdytt\u00e4\u00e4. Nopeuden kasvulle on asetettu aikaehto, jonka j\u00e4lkeen robotti palaa normaaliin ajonopeuteen, vaikka se olisi edelleen valkoisella paperilla. T\u00e4m\u00e4 ominaisuus ei n\u00e4y mallivideolla. Robotti pys\u00e4htyy havaitessaan edess\u00e4\u00e4n esteen ja k\u00e4\u00e4ntyy sen j\u00e4lkeen 180 astetta. Ajon aikana n\u00e4ytet\u00e4\u00e4n itse toteutettu valomatriisikuvio vapaavalintaisessa kohdassa. Valmiita valomatriiseja ei saa tuoda kirjastoista.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-23&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-23-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-23\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-23\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-23-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Robottiohjelmointi - projektiteht\u00e4v\u00e4 1\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/x5KkvSuQJ24?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a563fa83a72c934d164b0ba11697fc00\" style=\"font-size:16px\"><strong><strong><strong>Projektiteht\u00e4v\u00e4<\/strong><\/strong> 2.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3772b1fc994f3ff945d4af1b1eef0005\">Robotti liikkuu ainoastaan silloin, kun voima-anturia painetaan. Robotin nopeus m\u00e4\u00e4r\u00e4ytyy painamisen voimakkuuden ja v\u00e4riin sidotun nopeuskertoimen tulona. V\u00e4rianturin tulee tunnistaa kolme eri v\u00e4ri\u00e4. K\u00e4yt\u00f6ss\u00e4 on kolme nopeuskerrointa: hidas, keskinopea ja nopea. Suurimman ja pienimm\u00e4n kertoimen v\u00e4lisen eron tulee olla selke\u00e4sti havaittavissa robotin liikkeess\u00e4. Havaittu v\u00e4ri esitet\u00e4\u00e4n palkkikaaviossa. Valitun v\u00e4rin tulee olla sidottu palkkikaavion v\u00e4riin silloin, kun kyseinen v\u00e4ri on palkkikaaviossa k\u00e4ytett\u00e4viss\u00e4. V\u00e4ri valitaan ohjelman alussa. V\u00e4rin valinnan j\u00e4lkeen ei tarvitse tarjota mahdollisuutta muuttaa v\u00e4ri\u00e4 my\u00f6hemmin.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-24&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-24-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-24\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-24\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-24-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Robottiohjelmointi - projektiteht\u00e4v\u00e4 2\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/w3voJzsQHPU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-110b207140946cd6b79b267602efccae\"><strong><strong><strong>Projektiteht\u00e4v\u00e4<\/strong><\/strong> 3.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-08c723601e5f67d1657136ebd9d3b78c\">Piirr\u00e4 A4\u2011paperille mustalla tussilla rata. Puuv\u00e4rej\u00e4 tai lyijykyn\u00e4\u00e4 ei saa k\u00e4ytt\u00e4\u00e4, sill\u00e4 niist\u00e4 irtoava materiaali voi tarttua robotin renkaisiin ja j\u00e4tt\u00e4\u00e4 paperiin j\u00e4lki\u00e4, joita robotti voi virheellisesti seurata. Radassa tulee olla loiva kaari, 90 asteen kulma sek\u00e4 S\u2011mutka, jossa on selke\u00e4sti kaartuvat osuudet. Robotti seuraa mustaa viivaa. Se voi hetkellisesti etsi\u00e4 viivaa, mutta ei saa selke\u00e4sti poiketa radalta ja sattumalta palata takaisin mustalle viivalle. L\u00e4ht\u00f6viivan p\u00e4\u00e4lt\u00e4 aloittaminen on sallittua. &nbsp;V\u00e4rianturin n\u00e4kem\u00e4t arvot tulostetaan viivakaaviona. Robotin pit\u00e4\u00e4 l\u00e4p\u00e4ist\u00e4 rata molempiin suuntiin. Eli l\u00e4ht\u00f6piste vaihdetaan ensimm\u00e4isen ajon j\u00e4lkeen.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-25&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-25-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-25\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-25\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-25-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Robottiohjelmointi - projektiteht\u00e4v\u00e4 3\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/MN-3cQzlPX0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-77027c7279bfca10bbac8f1285cdc556\"><strong><strong><strong>Projektiteht\u00e4v\u00e4<\/strong><\/strong> 4<\/strong>.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-af0c360395decf2b6447e1d4166ae540\">Ajo k\u00e4ynnistyy painamalla vasenta painiketta. Robotti havaitsee esteen ja kiert\u00e4\u00e4 sen. T\u00e4m\u00e4n j\u00e4lkeen robotti jatkaa etenemist\u00e4 samaan suuntaan kuin ennen estett\u00e4. Kun robotti k\u00e4\u00e4nnet\u00e4\u00e4n yl\u00f6salaisin, valomatriisiin ilmestyy surunaama. Toteutuksen tarvitsee toimia vain tietyn ennalta m\u00e4\u00e4ritellyn esteen kanssa, eik\u00e4 sen tarvitse olla yleiskelpoinen muihin esteisiin.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-26&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-26-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-26\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-26\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-26-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Robottiohjelmointi - projektiteht\u00e4v\u00e4 4\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/VQHjWRFXlCA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-bcf20653d7467f1321d15c7d32bd9928\"><strong><strong><strong>Projektiteht\u00e4v\u00e4<\/strong><\/strong> 5<\/strong>.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-b29f5183b3c53d345a15d0e79d66fb9a\">Kun este esimerkiksi k\u00e4si on l\u00e4hell\u00e4, robotti peruuttaa. Kun k\u00e4si on tietyill\u00e4, hieman kauempana olevilla et\u00e4isyyksill\u00e4, robotti liikkuu eteenp\u00e4in. Jos k\u00e4tt\u00e4 ei havaita lainkaan, robotti pysyy paikoillaan. Sein\u00e4\u00e4n peruuttaessa robotti pys\u00e4htyy, kun voima-anturin painike painautuu alasp\u00e4in sein\u00e4\u00e4n t\u00f6rm\u00e4yksen seurauksena. Robottiin tulee valomatriisiin rasti, kun osuu sein\u00e4\u00e4n. Robotti liikkuu t\u00e4m\u00e4n j\u00e4lkeen hieman eteenp\u00e4in, mink\u00e4 j\u00e4lkeen se ei reagoi hetkeen mihink\u00e4\u00e4n komentoihin. Liikkeen arvot tulee lis\u00e4ksi esitt\u00e4\u00e4 viivakaaviossa siten, ett\u00e4 paikoillaan olemista vastaa arvo 0, peruutusta arvo -1 ja eteenp\u00e4in liikkumista arvo 1.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-27&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-27-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-27\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-27\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-27-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Robottiohjelmointi - projektiteht\u00e4v\u00e4 5\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/gltQ649_z9I?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-515b3b06d39b5096a6597363f3dd37b0\"><strong><strong><strong>Projektiteht\u00e4v\u00e4<\/strong><\/strong> 6.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-76c544d0248b3c9038ca9678409ffcd7\">Toteutus sek\u00e4 ohjelmoinnin ett\u00e4 robotin rakenteen osalta on vapaavalintainen. Ty\u00f6n tulee sis\u00e4lt\u00e4\u00e4 kaikki LEGO Spike -ymp\u00e4rist\u00f6n \u201cAloita\u201d-osion Prime-oppitunneissa k\u00e4ytetyt robottiosat. Kolmen moottorin k\u00e4ytt\u00f6 lasketaan kahdeksi osaksi ja yhden moottoriparin k\u00e4ytt\u00f6 yhdeksi osaksi. Yhden osan voi korvata pylv\u00e4s- tai viivakuvaajan k\u00e4yt\u00f6ll\u00e4 ja toisen osan rakentamalla ymp\u00e4rist\u00f6\u00e4. Ymp\u00e4rist\u00f6 voi olla viivarata, labyrintti, v\u00e4rialueet sek\u00e4 erilaiset rakennetut kokonaisuudet, kuten useista palikoista muodostetut rakenteet. Rakenteella tulee olla selke\u00e4 toiminnallinen tarkoitus, kuten korkeus tai v\u00e4ri, eik\u00e4 se saa olla pelk\u00e4st\u00e4\u00e4n esteettinen.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-0d06f56c3e66b97b242c925f038ff187\">Kaikkien k\u00e4ytett\u00e4vien osien tulee toimia tietyill\u00e4 ehdoilla. Esimerkiksitilanteessa valomatriisi on p\u00e4\u00e4ll\u00e4 kymmenen sekunnin ajan. Lis\u00e4ksi joidenkin robottiosien tulee olla riippuvaisia toisistaan, kuten moottorien pys\u00e4htyminen voima-anturin painalluksesta. Koodissa tulee olla main-funktion lis\u00e4ksi v\u00e4hint\u00e4\u00e4n kolme funktiota. Robotin tulee liikkua v\u00e4hint\u00e4\u00e4n kahteen suuntaan sek\u00e4 reagoida ymp\u00e4rist\u00f6\u00f6n jollakin tavalla.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Robottiohjelmointi &#8211; Lego Spike Prime 1. Perusteht\u00e4v\u00e4t Liike Teht\u00e4v\u00e4 1. Liikkuminen eteen- ja taaksep\u00e4in Kirjoita koodi, jonka avulla robotti liikkuu ensin suoraan eteenp\u00e4in ja sitten taaksep\u00e4in, eli palaa alkupisteeseen.&nbsp; Teht\u00e4v\u00e4 2. K\u00e4\u00e4ntyminen Kirjoita koodi, joka k\u00e4\u00e4nt\u00e4\u00e4 robotin paikallaan ensin oikealle<\/p>\n","protected":false},"author":3745,"featured_media":0,"parent":6,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3298","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3298","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/users\/3745"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/comments?post=3298"}],"version-history":[{"count":97,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3298\/revisions"}],"predecessor-version":[{"id":3878,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3298\/revisions\/3878"}],"up":[{"embeddable":true,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/6"}],"wp:attachment":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/media?parent=3298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}