{"id":82752,"date":"2024-06-24T14:00:57","date_gmt":"2024-06-24T12:00:57","guid":{"rendered":"https:\/\/botland.com.pl\/blog\/?p=82752"},"modified":"2026-04-08T10:55:36","modified_gmt":"2026-04-08T08:55:36","slug":"kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow","status":"publish","type":"post","link":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/","title":{"rendered":"Kurs Raspberry Pi Pico \u2013 #10 \u2013 tablice, struktury i maszyna stan\u00f3w"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania:<\/span> <span class=\"rt-time\"> 16<\/span> <span class=\"rt-label rt-postfix\">min.<\/span><\/span>\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"82752\" class=\"elementor elementor-82752\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-20bcf6e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"20bcf6e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-45eb4ed\" data-id=\"45eb4ed\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-25befc4 elementor-widget elementor-widget-text-editor\" data-id=\"25befc4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">W ostatnim poradniku wsp\u00f3lnymi si\u0142ami uruchomili\u015bmy dobrze ju\u017c znany projekt blink led, jednak pozbawiony by\u0142 on blokuj\u0105cych procesor funkcji sleep_ms. Poza tym po raz pierwszy skorzystali\u015bmy ze wska\u017anik\u00f3w oraz konstrukcji nazywanej struktur\u0105, kt\u00f3r\u0105 tak jak obieca\u0142em ,zajmiemy si\u0119 w tym artykule. Poza tym opowiem wam te\u017c, w jaki spos\u00f3b budowa\u0107 maszyn stan\u00f3w w j\u0119zyku C.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0c30471 elementor-widget elementor-widget-image\" data-id=\"0c30471\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/4Gotowy-Zestaw-do-nauki-programowania-z-Raspberry-Pi-Pico-W.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"4Gotowy Zestaw do nauki programowania z Raspberry Pi Pico W\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6Ijc2MTU2IiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wMVwvNEdvdG93eS1aZXN0YXctZG8tbmF1a2ktcHJvZ3JhbW93YW5pYS16LVJhc3BiZXJyeS1QaS1QaWNvLVcuanBnIn0%3D\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"109\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/4Gotowy-Zestaw-do-nauki-programowania-z-Raspberry-Pi-Pico-W-1024x139.jpg\" class=\"attachment-large size-large wp-image-76156\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/4Gotowy-Zestaw-do-nauki-programowania-z-Raspberry-Pi-Pico-W-1024x139.jpg 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/4Gotowy-Zestaw-do-nauki-programowania-z-Raspberry-Pi-Pico-W-300x41.jpg 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/4Gotowy-Zestaw-do-nauki-programowania-z-Raspberry-Pi-Pico-W-768x104.jpg 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/4Gotowy-Zestaw-do-nauki-programowania-z-Raspberry-Pi-Pico-W.jpg 1429w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-45ccf87 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"45ccf87\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-bd40b19\" data-id=\"bd40b19\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-be82da3 elementor-widget elementor-widget-image\" data-id=\"be82da3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/24136_3.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"24136_3\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6Ijc2MTYwIiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wMVwvMjQxMzZfMy5qcGcifQ%3D%3D\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"300\" height=\"273\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/24136_3-300x273.jpg\" class=\"attachment-medium size-medium wp-image-76160\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/24136_3-300x273.jpg 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/24136_3-1024x933.jpg 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/24136_3-768x700.jpg 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/24136_3.jpg 1080w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-0e6eadf\" data-id=\"0e6eadf\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c1a1e6a elementor-widget elementor-widget-text-editor\" data-id=\"c1a1e6a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: bolder\">Kup zestaw do\u00a0nauki programowania z\u00a0Raspberry Pi\u00a0Pico W\u00a0i\u00a0skorzystaj z\u00a0kursu dost\u0119pnego na\u00a0Blog Botland!<\/span><\/p><p>W\u00a0zestawie: modu\u0142 Raspberry Pi\u00a0Pico W, p\u0142ytka stykowa, przewody, diody LED, rezystory, przyciski, fotorezystory, cyfrowe czujniki \u015bwiat\u0142a, temperatury, wilgotno\u015bci i\u00a0ci\u015bnienia, wy\u015bwietlacz OLED i\u00a0przew\u00f3d USB-microUSB.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1741779 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"1741779\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/botland.com.pl\/moduly-i-zestawy-do-raspberry-pi-pico\/24136-zestaw-do-nauki-programowania-z-raspberry-pi-pico-w.html\" target=\"_blank\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">SPRAWD\u0179 W BOTLAND<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-83366bf elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"83366bf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5bac091 elementor-widget elementor-widget-text-editor\" data-id=\"5bac091\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: bolder;\">Spis tre\u015bci:<\/span><\/p><ol style=\"font-size: 16px; background-color: #ffffff;\"><li style=\"font-size: 16px;\"><a href=\"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-1-zaczynamy\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico &#8211; #1<\/span>\u00a0&#8211; zaczynamy\u00a0<\/a><\/li><li style=\"font-size: 16px;\"><a href=\"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-2-slow-kilka-o-programowaniu\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico &#8211; #2<\/span>\u00a0&#8211; s\u0142\u00f3w kilka o programowaniu<\/a><\/li><li style=\"font-size: 16px;\"><a href=\"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-3-pierwszy-program\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico &#8211; #3<\/span>\u00a0&#8211; pierwszy program<\/a><\/li><li style=\"font-size: 16px;\"><a href=\"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico &#8211; #4<\/span>\u00a0&#8211; zaczynamy programowa\u0107<\/a><\/li><li style=\"font-size: 16px;\"><a href=\"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-5-petle-zmienne-i-instrukcje-warunkowe\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico &#8211; #5<\/span>\u00a0&#8211; p\u0119tle, zmienne i instrukcje warunkowe\u00a0<\/a><\/li><li style=\"font-size: 16px;\"><a href=\"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-6-pwm-adc-i-komunikacja-z-komputerem\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico \u2013 #6<\/span>\u00a0\u2013 PWM, ADC i komunikacja z komputerem<\/a><\/li><li style=\"font-size: 16px;\"><a href=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-7-poprawki-w-kodzie-i-wlasne-funkcje\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico \u2013 #7\u00a0<\/span>\u00a0\u2013 Poprawki w kodzie i w\u0142asne funkcje\u00a0<\/a><\/li><li style=\"font-size: 16px;\"><a href=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-8-przerwania-i-alarmy\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico \u2013 #8<\/span>\u00a0\u2013 Przerwania i alarmy<\/a><\/li><li style=\"font-size: 16px;\"><a href=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-9-teoria-wskaznikow-i-timery\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico \u2013 #9<\/span>\u00a0\u2013 Teoria wska\u017anik\u00f3w i timery<\/a><\/li><li style=\"font-size: 16px;\"><a href=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><strong>Raspberry Pi Pico \u2013 #10<\/strong>\u00a0\u2013 Tablice, struktury i maszyna stan\u00f3w<\/a><\/li><li><a href=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-11-uruchomienie-cyfrowego-czujnik-swiatla-czyli-i2c\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico \u2013 #11<\/span>\u00a0&#8211; Uruchomienie cyfrowego czujnika \u015bwiat\u0142a, czyli I2C<\/a><\/li><li><a href=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-12-przygotowujemy-biblioteke-dla-cyfrowego-czujnika-swiatla-1-2\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><strong>Raspberry Pi Pico \u2013 #12 \u2013<\/strong> Przygotowujemy bibliotek\u0119 dla cyfrowego czujnika \u015bwiat\u0142a 1\/2<\/a><\/li><li><a href=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-13-biblioteka-dla-cyfrowego-czujnika-swiatla-2-2-dma\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><strong>Raspberry Pi Pico \u2013 #13<\/strong> \u2013 Biblioteka dla cyfrowego czujnika \u015bwiat\u0142a 2\/2, DMA<\/a><\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-55e404b elementor-widget elementor-widget-spacer\" data-id=\"55e404b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bebde58 elementor-widget elementor-widget-heading\" data-id=\"bebde58\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Przed wyruszeniem w drog\u0119 nale\u017cy zebra\u0107 dru\u017cyn\u0119<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-507f3f0 elementor-widget elementor-widget-image\" data-id=\"507f3f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/IMG_0647-scaled.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"IMG_0647\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6Ijc0Nzk3IiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wMVwvSU1HXzA2NDctc2NhbGVkLmpwZyJ9\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/IMG_0647-1024x576.jpg\" class=\"attachment-large size-large wp-image-74797\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/IMG_0647-1024x576.jpg 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/IMG_0647-300x169.jpg 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/IMG_0647-768x432.jpg 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/IMG_0647-1536x864.jpg 1536w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/IMG_0647-2048x1152.jpg 2048w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Zestaw element\u00f3w do kursu Raspberry Pi Pico.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0d642c6 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"0d642c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/botland.com.pl\/moduly-i-zestawy-do-raspberry-pi-pico\/24136-zestaw-do-nauki-programowania-z-raspberry-pi-pico-w.html\" target=\"_blank\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">SPRAWD\u0179<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-110cfc2 elementor-widget elementor-widget-text-editor\" data-id=\"110cfc2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Chc\u0105c uczy\u0107 si\u0119 programowania, bazuj\u0105c na rzeczywistych projektach, potrzebny b\u0119dzie oczywi\u015bcie odpowiedni sprz\u0119t, ale bez obaw &#8211; nie musisz teraz skaka\u0107 mi\u0119dzy kolejnymi artyku\u0142ami i przygotowywa\u0107 list\u0119 niezb\u0119dnych elektronicznych element\u00f3w. W sklepie\u00a0<a style=\"background-color: #ffffff\" href=\"https:\/\/botland.com.pl\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder\">Botland<\/span><\/a>\u00a0dost\u0119pny jest\u00a0<a style=\"background-color: #ffffff\" href=\"https:\/\/botland.com.pl\/moduly-i-zestawy-do-raspberry-pi-pico\/24136-zestaw-do-nauki-programowania-z-raspberry-pi-pico-w.html\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder\">gotowy zestaw<\/span><\/a>, zawieraj\u0105cy wszystkie komponenty niezb\u0119dne do wykonania projekt\u00f3w opisanych w serii poradnik\u00f3w o Raspberry Pi Pico.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b5b618 elementor-widget elementor-widget-text-editor\" data-id=\"7b5b618\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>W\u00a0<a href=\"https:\/\/botland.com.pl\/moduly-i-zestawy-do-raspberry-pi-pico\/24136-zestaw-do-nauki-programowania-z-raspberry-pi-pico-w.html\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder\">gotowym zestawie<\/span><\/a>\u00a0element\u00f3w znajdziecie:<\/p><ul style=\"font-size: 16px;background-color: #ffffff\"><li style=\"font-size: 16px\">Raspberry Pi Pico W,<\/li><li style=\"font-size: 16px\">Przew\u00f3d microUSB,<\/li><li style=\"font-size: 16px\">P\u0142ytk\u0119 stykow\u0105,<\/li><li style=\"font-size: 16px\">Zestaw przewod\u00f3w po\u0142\u0105czeniowych w trzech rodzajach,<\/li><li style=\"font-size: 16px\">Zestaw diod LED w trzech kolorach,<\/li><li style=\"font-size: 16px\">Zestaw najczciej stosowanych w elektronice rezystor\u00f3w,<\/li><li style=\"font-size: 16px\">Przyciski Tact Switch,<\/li><li style=\"font-size: 16px\">Fotorezystory,<\/li><li style=\"font-size: 16px\">Cyfrowy czujnik \u015bwiat\u0142a,<\/li><li style=\"font-size: 16px\">Cyfrowy czujnik wilgotno\u015bci, temperatury i ci\u015bnienia,<\/li><li style=\"font-size: 16px\">Wy\u015bwietlacz OLED.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-16cea8f elementor-widget elementor-widget-spacer\" data-id=\"16cea8f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d97ec8b elementor-widget elementor-widget-heading\" data-id=\"d97ec8b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Tablice jedno i wielowymiarowe<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-896be1d elementor-widget elementor-widget-text-editor\" data-id=\"896be1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Na pocz\u0105tek warto by\u0142oby wr\u00f3ci\u0107 do tematu struktur, kt\u00f3re pojawi\u0142y si\u0119 ju\u017c przy okazji ostatnio omawianego projektu. Jednak zanim przejdziemy do tego zagadnienia, spr\u00f3bujemy uruchomi\u0107 kod oparty na nieco prostszych konstrukcjach, czyli tablicach.<\/p><p style=\"font-weight: 400\">Do tej pory do\u015b\u0107 powszechnie korzystali\u015bmy z r\u00f3\u017cnego rodzaju zmiennych, mog\u0142y one przechowywa\u0107 liczby ca\u0142kowite, zmiennoprzecinkowe, jak i stany logiczne. Jednak co warto zauwa\u017cy\u0107, pojedyncza zmienna przechowywa\u0107 mog\u0142a tylko pojedyncz\u0105 dan\u0105. Gdy odczytywali\u015bmy temperatur\u0119 z wbudowanego w RP2040 sensora, w zmiennej zapisana by\u0142a zawsze jej ostatnia warto\u015b\u0107 i nie by\u0142o mo\u017cliwo\u015bci por\u00f3wna\u0107 jej ze wcze\u015bniejszym pomiarem.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b4374c elementor-widget elementor-widget-image\" data-id=\"4b4374c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/zmienna_tablica.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"zmienna_tablica\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6IjgyNzg1IiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wNlwvem1pZW5uYV90YWJsaWNhLnBuZyJ9\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"520\" height=\"295\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/zmienna_tablica.png\" class=\"attachment-large size-large wp-image-82785\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/zmienna_tablica.png 520w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/zmienna_tablica-300x170.png 300w\" sizes=\"(max-width: 520px) 100vw, 520px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Ksi\u0105\u017ckowe por\u00f3wnanie zmiennych i tablic.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e552fc7 elementor-widget elementor-widget-text-editor\" data-id=\"e552fc7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Gdyby\u015bmy przyj\u0119li, \u017ce pojedyncza zmienna mo\u017ce by\u0107 kartk\u0105 papieru, na kt\u00f3rej zapisany tekst jest jej warto\u015bci\u0105, to tablica mog\u0142aby by\u0107 ksi\u0105\u017ck\u0105. Innymi s\u0142owy, tablicami w j\u0119zyku C nazywamy zbiory zmiennych tego samego typu, kt\u00f3rych warto\u015b\u0107 mo\u017ce by\u0107 r\u00f3\u017cna. Stosowanie tablic mo\u017ce by\u0107 ca\u0142kiem przydatne, zw\u0142aszcza gdy potrzebujemy zapisywa\u0107 wiele warto\u015bci tego samego typu, deklarowanie pojedynczych zmiennych w takim przypadku jest po prostu zb\u0119dne i niepotrzebnie komplikuje kod. Poza tym za pomoc\u0105 tablic tworzy\u0107 mo\u017cna tak zwane bufory, szczeg\u00f3lnie przydatne przy okazji r\u00f3\u017cnego rodzaju komunikacji, jak i ci\u0105gi tekstu, tak zwane stringi (od angielskiego string, czyli ci\u0105g). Wspomnie\u0107 trzeba te\u017c, \u017ce tablice mog\u0105 mie\u0107 wiele wymiar\u00f3w, ale tym zagadnieniem zajmiemy si\u0119 za chwil\u0119. Na pierwszy ogie\u0144 we\u017amy prosty program, kt\u00f3ry skorzysta z jednowymiarowej tablicy.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b7d4a8d elementor-widget elementor-widget-image\" data-id=\"b7d4a8d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/obwod-scaled.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"obwod\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6IjgyNzg5IiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wNlwvb2J3b2Qtc2NhbGVkLmpwZyJ9\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/obwod-1024x576.jpg\" class=\"attachment-large size-large wp-image-82789\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/obwod-1024x576.jpg 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/obwod-300x169.jpg 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/obwod-768x432.jpg 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/obwod-1536x864.jpg 1536w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/obwod-2048x1152.jpg 2048w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Obw\u00f3d znany z poprzednich poradnik\u00f3w.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0ef93d0 elementor-widget elementor-widget-text-editor\" data-id=\"0ef93d0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Na ten moment nie musimy zmienia\u0107 przygotowanego wcze\u015bniej obwodu. W pierwszym projekcie, kt\u00f3ry opisa\u0142em jako arrays_test sterowa\u0107 b\u0119dziemy diodami LED. Jednak tym razem o tym, czy dioda b\u0119dzie uruchomiona, czy te\u017c nie decydowa\u0107 b\u0119dzie warto\u015b\u0107 zapisana w tablicy. Poza tym spr\u00f3bujemy te\u017c zmodyfikowa\u0107 konkretn\u0105 warto\u015b\u0107 w tablicy, tak wi\u0119c przejd\u017amy do pierwszego programu.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f70201c elementor-widget elementor-widget-code-highlight\" data-id=\"f70201c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-c line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-c\">\n\t\t\t\t\t<xmp>#include \"pico\/stdlib.h\"\r\n\r\n#define GREEN_LED 0\r\n#define YELLOW_LED 1\r\n#define RED_LED 2\r\n\r\nbool led_state_array[3] = {1, 0, 1}; \/\/ array declaration\r\n\r\nint main() {\r\n    stdio_init_all(); \/\/initialization of the stdio.h library\r\n\r\n    gpio_init(GREEN_LED);\r\n    gpio_init(YELLOW_LED);\r\n    gpio_init(RED_LED);\r\n    gpio_set_dir(GREEN_LED, GPIO_OUT);\r\n    gpio_set_dir(YELLOW_LED, GPIO_OUT);\r\n    gpio_set_dir(RED_LED, GPIO_OUT);\r\n\r\n    while(true) {\r\n\r\n            gpio_put(GREEN_LED, led_state_array[0]);\r\n            gpio_put(YELLOW_LED, led_state_array[1]);\r\n            gpio_put(RED_LED, led_state_array[2]);\r\n\r\n            sleep_ms(3000);\r\n\r\n            led_state_array[0] = 0; \/\/ changing the value of an element with index zero\r\n\r\n    }\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e84bc86 elementor-widget elementor-widget-text-editor\" data-id=\"e84bc86\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">\u00a0Struktura kodu jest w gruncie rzeczy do\u015b\u0107 prosta. Mamy tutaj do\u0142\u0105czon\u0105 bibliotek\u0119 standardow\u0105, definicj\u0119 pin\u00f3w, do kt\u00f3rych pod\u0142\u0105czone s\u0105 diody LED, kt\u00f3re nast\u0119pnie inicjalizowane s\u0105 na pocz\u0105tku g\u0142\u00f3wnej funkcji main. Ca\u0142a magia zwi\u0105zana z tablicami dzieje si\u0119 wewn\u0105trz niesko\u0144czonej p\u0119tli while oraz powy\u017cej funkcji main.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e20294 elementor-widget elementor-widget-image\" data-id=\"9e20294\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/Typ-danych.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"Typ danych\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6IjgyNzkzIiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wNlwvVHlwLWRhbnljaC5wbmcifQ%3D%3D\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/Typ-danych-1024x576.png\" class=\"attachment-large size-large wp-image-82793\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/Typ-danych-1024x576.png 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/Typ-danych-300x169.png 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/Typ-danych-768x432.png 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/Typ-danych-1536x864.png 1536w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/Typ-danych.png 1920w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Deklaracja tablicy.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d04d980 elementor-widget elementor-widget-text-editor\" data-id=\"d04d980\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Na pocz\u0105tek zwr\u00f3\u0107my uwag\u0119 na deklaracj\u0119 samej tablicy. Wygl\u0105da ona bardzo podobnie jak kod, kt\u00f3ry powo\u0142uje do \u017cycia zmienn\u0105. Tutaj r\u00f3wnie\u017c wyr\u00f3\u017cni\u0107 mo\u017cemy typ tablicy, a konkretniej typ danych, jaki znajdowa\u0107 b\u0119dzie si\u0119 w tablicy, w przyk\u0142adzie jest to bool, poniewa\u017c przechowywa\u0107 b\u0119dziemy warto\u015bci logiczne odpowiadaj\u0105ce stanowi, w jakim znajduje si\u0119 dioda LED. Dalej umieszczona zosta\u0142a nazwa tablicy, tutaj jest to po prostu led_state_array. W nawiasie kwadratowym umieszczamy liczb\u0119 odpowiadaj\u0105c\u0105 ilo\u015bci element\u00f3w w tablicy, sterowa\u0107 b\u0119dziemy trzema diodami, dlatego umie\u015bci\u0142em tutaj cyfr\u0119 trzy. Co wa\u017cne, przy deklaracji tablicy nie musimy okre\u015bla\u0107 jej wielko\u015bci, nawias kwadratowy m\u00f3g\u0142by pozosta\u0107 pusty i kompilator sam sprawdzi\u0142by ilo\u015b\u0107 zadeklarowanych p\u00f3\u017aniej element\u00f3w, jednak dobr\u0105 praktyk\u0105 jest samodzielne okre\u015blanie wielko\u015bci tablicy, poniewa\u017c \u201eautomatyczne\u201d tablice potrafi\u0105 by\u0107 zwodnicze. Po znaku r\u00f3wno\u015bci w nawiasach klamrowych umieszczone zosta\u0142y domy\u015blne warto\u015bci wszystkich element\u00f3w w tablicy. Ka\u017cdy z nich okre\u015blany jest indeksem [0], [1] i [2]. Co wa\u017cne, warto\u015b\u0107 indeksu zwi\u0119ksza si\u0119 od lewej strony, co mo\u017ce by\u0107 nieintuicyjne, zw\u0142aszcza dla os\u00f3b, kt\u00f3re mia\u0142y ju\u017c do czynienia z elektronik\u0105 cyfrow\u0105, gdzie najm\u0142odszy bit z indeksem zerowym umieszczany jest zazwyczaj na skrajnej prawej stronie.<\/p><p style=\"font-weight: 400\">Tak zadeklarowana tablica przechowuje trzy zmienne typu bool, kt\u00f3rych warto\u015bci ju\u017c na starcie okre\u015blili\u015bmy.<\/p><p style=\"font-weight: 400\">W p\u0119tli while zobaczy\u0107 mo\u017cemy trzy funkcje, kt\u00f3re steruj\u0105 kolejnymi diodami LED. W tym przypadku stan \u015bwiec\u0105cej konstrukcji okre\u015blamy przez konkretny element tablicy, podaj\u0105c jej nazw\u0119 oraz indeks umieszczony w nawiasie kwadratowym. Tym sposobem stan zielonej diody b\u0119dzie zgodny z pierwszym elementem w tablicy, \u017c\u00f3\u0142ta dioda przyjmie stan drugiego elementu, a do czerwonego LEDa przypisana zostanie warto\u015b\u0107 ostatniego elementu w tablicy. Jak mo\u017cna si\u0119 domy\u015bli\u0107, po uruchomieniu programu za\u015bwieci\u0107 powinny si\u0119 dwie skrajne diody, czyli zielona i czerwona.<\/p><p style=\"font-weight: 400\">Jednak, \u017ceby nie by\u0142o tak prosto, po odczekaniu trzech sekund zmodyfikujemy warto\u015b\u0107 pierwszego elementu w tablicy. Odwo\u0142anie do niego wygl\u0105da identycznie jak w funkcji steruj\u0105cej diod\u0105 LED. Najpierw umieszczamy nazw\u0119 tablicy, a w nawiasie kwadratowym indeks odpowiedniego elementu. Podobnie jak przy zmiennych warto\u015b\u0107 zero przypisujemy dzi\u0119ki znaku r\u00f3wno\u015bci.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6a96197 elementor-widget elementor-widget-video\" data-id=\"6a96197\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/tab1.mov\" controls=\"\" preload=\"metadata\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dc63b92 elementor-widget elementor-widget-text-editor\" data-id=\"dc63b92\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Po uruchomieniu programu zobaczy\u0107 mo\u017cemy efekt, kt\u00f3rego si\u0119 spodziewali\u015bmy. W pierwszym kroku uruchomione zosta\u0142y dwie skrajne diody, czyli zielona i czerwona. Nast\u0119pnie po odczekaniu trzech sekund mikrokontroler zmodyfikowa\u0142\u00a0pierwszy element w tablicy i wr\u00f3ci\u0142 na pocz\u0105tek p\u0119tli while, raz jeszcze wysterowuj\u0105c diody LED. Tym sposobem wy\u0142\u0105czony zosta\u0142 zielony element \u015bwiec\u0105cy, poniewa\u017c to w\u0142a\u015bnie jego stan opisany by\u0142 przez element w tablicy z indeksem zero.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-789994d elementor-widget elementor-widget-image\" data-id=\"789994d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/tablica3d.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"tablica3d\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6IjgyODAxIiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wNlwvdGFibGljYTNkLnBuZyJ9\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/tablica3d-1024x576.png\" class=\"attachment-large size-large wp-image-82801\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/tablica3d-1024x576.png 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/tablica3d-300x169.png 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/tablica3d-768x432.png 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/tablica3d-1536x864.png 1536w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/tablica3d.png 1920w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Deklaracja tablicy dwuwymiarowej. <\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-07c1c9f elementor-widget elementor-widget-text-editor\" data-id=\"07c1c9f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">W pierwszym przyk\u0142adzie skorzystali\u015bmy z tablicy jednowymiarowej. Kolejne dane w niej umieszczone opisywane by\u0142y pojedynczym indeksem, ale warto wiedzie\u0107, \u017ce w j\u0119zyku C tworzy\u0107 mo\u017cna te\u017c tablice wielowymiarowe i taki w\u0142a\u015bnie przypadek przeanalizujemy tym razem. Zanim jednak przejdziemy do programu, zobaczmy w jaki spos\u00f3b deklarowane s\u0105 tego typu tablice, na przyk\u0142adzie, kt\u00f3ry za moment wykorzystamy.<\/p><p style=\"font-weight: 400\">W por\u00f3wnaniu do poprzedniego powo\u0142ania tablicy, struktura tego polecenia uleg\u0142a nieznacznej rozbudowie. Na pocz\u0105tek zauwa\u017cmy, \u017ce po nazwie tablicy znalaz\u0142y si\u0119 dwa nawiasy kwadratowe, w kt\u00f3rych okre\u015blamy wymiary tablicy, innymi s\u0142owy, ilo\u015b\u0107 wierszy i kolumn. W naszym programie nadal b\u0119dziemy sterowa\u0107 trzema diodami LED, dlatego tablica b\u0119dzie mia\u0142a trzy kolumny. Natomiast wierszy b\u0119dzie osiem, tak aby wykorzysta\u0107 wszystkie mo\u017cliwe stany, jakie mo\u017cemy uzyska\u0107 na trzech elementach. Je\u015bli przyjrzycie si\u0119 stanom, w kolejnych wierszach tablicy zauwa\u017cycie, \u017ce odpowiadaj\u0105 one kolejnym liczbom w kodzie binarnym. W tak przygotowanej tablicy, ka\u017cdy z element\u00f3w opisywany jest w\u0142asnym indeksem odpowiadaj\u0105cym wierszowi i kolumnie. Kolumny tak jak wspomnia\u0142em w poprzednim przyk\u0142adzie, okre\u015blamy od lewej do prawej, natomiast wiersze z g\u00f3ry na d\u00f3\u0142.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f85477 elementor-widget elementor-widget-code-highlight\" data-id=\"4f85477\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-c line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-c\">\n\t\t\t\t\t<xmp>#include \"pico\/stdlib.h\"\r\n\r\n#define GREEN_LED 0\r\n#define YELLOW_LED 1\r\n#define RED_LED 2\r\n\r\n\/\/ declaration of a multidimensional array\r\nbool led_state_array[8][3] = {{0, 0, 0},\r\n                              {0, 0, 1},\r\n                              {0, 1, 0},\r\n                              {0, 1, 1},\r\n                              {1, 0, 0},\r\n                              {1, 0, 1},\r\n                              {1, 1, 0},\r\n                              {1, 1, 1}};\r\n\r\nint main() {\r\n    stdio_init_all(); \/\/initialization of the stdio library\r\n\r\n    gpio_init(GREEN_LED);\r\n    gpio_init(YELLOW_LED);\r\n    gpio_init(RED_LED);\r\n    gpio_set_dir(GREEN_LED, GPIO_OUT);\r\n    gpio_set_dir(YELLOW_LED, GPIO_OUT);\r\n    gpio_set_dir(RED_LED, GPIO_OUT);\r\n\r\n    while (true) {\r\n        for (int i = 0; i &lt; 8; i++) {\r\n            \/\/ Set the diode states according to the current row of the table\r\n            gpio_put(GREEN_LED, led_state_array[i][0]);\r\n            gpio_put(YELLOW_LED, led_state_array[i][1]);\r\n            gpio_put(RED_LED, led_state_array[i][2]);\r\n\r\n            \/\/ delay\r\n            sleep_ms(1000);\r\n        }\r\n    }\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-755c803 elementor-widget elementor-widget-text-editor\" data-id=\"755c803\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Tym razem w testowanym kodzie umieszczona zosta\u0142a nowa deklaracja tablicy, kt\u00f3r\u0105 widzieli\u015bcie ju\u017c wcze\u015bniej. Zmianie uleg\u0142a te\u017c niesko\u0144czona p\u0119tla while. W jej wn\u0119trzu znalaz\u0142a si\u0119 p\u0119tla for wykonuj\u0105ca osiem skok\u00f3w, tak aby diody LED wysterowane zosta\u0142y przez element z ka\u017cdego kolejnego wiersza tablicy. P\u0119tla wykona si\u0119 osiem razy, a w jej wn\u0119trzu umieszczone zosta\u0142y polecenia steruj\u0105ce diodami. Za stan ka\u017cdej z diod odpowiada element z tablicy umieszczony pod indeksem [i] oraz [0], [1] i [2]. Za \u201ei\u201d przy ka\u017cdym kolejnym przebiegu p\u0119tli podstawiona zostaje kolejna liczba od zera do o\u015bmiu, tak aby do diod przypisane zosta\u0142y warto\u015bci spod kolejnych wierszy tablicy. Poza tym w kodzie umieszczone zosta\u0142o sekundowe op\u00f3\u017anienie, dzi\u0119ki czemu widoczne b\u0119d\u0105 zmiany \u015bwiecenia diod.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-429287e elementor-widget elementor-widget-video\" data-id=\"429287e\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/swiatla2.mov\" controls=\"\" preload=\"metadata\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5105cf elementor-widget elementor-widget-text-editor\" data-id=\"a5105cf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Po uruchomieniu kodu zobaczy\u0107 mo\u017cemy zmieniaj\u0105ce si\u0119 stany na diodach LED. Je\u015bli przyjrzymy si\u0119 dok\u0142adniej, zauwa\u017cymy, \u017ce s\u0105 one zgodne z warto\u015bciami zapisanymi w tablicy.<\/p><p style=\"font-weight: 400\">Warto wiedzie\u0107, \u017ce w j\u0119zyku C budowa\u0107 mo\u017cemy tablice nie tylko dwu i jedno wymiarowe, nic nie stoi na przeszkodzie, aby zainicjowa\u0107 tablic\u0119 tr\u00f3jwymiarow\u0105, czy nawet czterowymiarow\u0105. Jednak takie przyk\u0142ady s\u0105 ju\u017c nieco bardziej zaawansowane i nie b\u0119dziemy ich tutaj analizowa\u0107. Dwie podstawowe formy tablic na ten moment nam wystarcz\u0105.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-36bd9c4 elementor-widget elementor-widget-heading\" data-id=\"36bd9c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Struktury, czyli pseudo obiektowo\u015b\u0107 w C<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-32704e7 elementor-widget elementor-widget-text-editor\" data-id=\"32704e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Bazuj\u0105c na prostych przyk\u0142adach, poznali\u015bmy tablice, kt\u00f3re opisa\u0107 mo\u017cna jako mniejsze, b\u0105d\u017a wi\u0119ksze zbiory tego samego typu zmiennych, kt\u00f3re mo\u017cemy od siebie odr\u00f3\u017cni\u0107 dzi\u0119ki indeksom. Jednak ograniczeniem tego typu konstrukcji jest w\u0142a\u015bnie wspomniany typ danych. W tablicach nie mamy mo\u017cliwo\u015bci zapisu kilku r\u00f3\u017cnych zmiennych, kt\u00f3re to opisa\u0142yby nieco wi\u0119kszy obiekt. We\u017amy na ten przyk\u0142ad cz\u0142owieka, ma on imi\u0119, wiek oraz wzrost. Imi\u0119 jest ci\u0105giem znak\u00f3w, wiek liczb\u0105 ca\u0142kowit\u0105, natomiast wzrost liczb\u0105 z przecinkiem. Takich danych nijak nie mo\u017cna umie\u015bci\u0107 w tablicy, musieliby\u015bmy stworzy\u0107 trzy odr\u0119bne zmienne i tak w\u0142a\u015bnie zrobimy, ale umie\u015bcimy je wewn\u0105trz struktury. W j\u0119zyku C istnieje pewna z\u0142o\u017cona konstrukcja nazywana w\u0142a\u015bnie struktur\u0105, pozwala ona grupowa\u0107 r\u00f3\u017cne typy zmiennych i dzi\u0119ki nim budowa\u0107 wi\u0119ksze obiekty, kt\u00f3re maj\u0105 wiele atrybut\u00f3w, tak jak wspomniany cz\u0142owiek. W kolejnym przyk\u0142adzie zbudujemy w\u0142a\u015bnie tak\u0105 struktur\u0119 opisuj\u0105c\u0105 cz\u0142owieka, kt\u00f3ra przechowywa\u0107 b\u0119dzie informacj\u0119 o jego imieniu, wieku oraz wzro\u015bcie. Dane te po zapisaniu wy\u015blemy do komputera i wy\u015bwietlimy na monitorze portu szeregowego. Dla tego programu utworzy\u0142em kolejny projekt nazwany struct_test, jednak zanim do niego przejdziemy, przyjrzyjmy si\u0119 bli\u017cej sposobie deklaracji struktury, z kt\u00f3rego za moment skorzystamy.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8ab8478 elementor-widget elementor-widget-image\" data-id=\"8ab8478\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struct.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"struct\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6IjgyODEwIiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wNlwvc3RydWN0LnBuZyJ9\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struct-1024x576.png\" class=\"attachment-large size-large wp-image-82810\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struct-1024x576.png 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struct-300x169.png 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struct-768x432.png 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struct-1536x864.png 1536w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struct.png 1920w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Deklaracja struktury. <\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1e11fc1 elementor-widget elementor-widget-text-editor\" data-id=\"1e11fc1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Struktury w j\u0119zyku C powo\u0142ujemy do \u017cycia w do\u015b\u0107 prosty i intuicyjny spos\u00f3b. Zaczynamy od s\u0142\u00f3w kluczowych \u201etypdef struct\u201d, nast\u0119pnie w nawiasie klamrowym umieszczamy tak zwan\u0105 list\u0119 zmiennych strukturalnych, czyli po prostu list\u0119 element\u00f3w, kt\u00f3re przypisane b\u0119d\u0105 do obiekt\u00f3w bazuj\u0105cych na tej strukturze. W naszym przyk\u0142adzie opisywa\u0107 b\u0119dziemy chcieli cz\u0142owieka, dlatego opiszemy go za pomoc\u0105 tablicy typu char, w kt\u00f3rej zapiszemy imi\u0119, zmiennej uint8_t przechowuj\u0105cej wiek oraz zmiennoprzecinkowego float, kt\u00f3ry odpowiada\u0107 b\u0119dzie za wzrost opisanej osoby. Definicj\u0119 struktury ko\u0144czymy, podaj\u0105c jej nazw\u0119, w tym przypadku b\u0119dzie to po prostu Person.<\/p><p style=\"font-weight: 400\">Tak przygotowana struktura pozwoli nam tworzy\u0107 w kodzie swego rodzaju \u201eobiekty\u201d, ale do tego przejdziemy za moment. Tutaj musz\u0119 tylko wspomnie\u0107, \u017ce tego typu opis nie jest tak naprawd\u0119 zgodny z teori\u0105 j\u0119zyka C. W \u201eczystym\u201d przyk\u0142adzie nie pojawia si\u0119 s\u0142owo kluczowe typedef, a nazwa struktury umieszczona jest zaraz po s\u0142owie struct. Jednak ta nieco rozbudowana definicja struktury, kt\u00f3r\u0105 przedstawi\u0142em, jest zgodna z niespisanymi zasadami j\u0119zyka C. Dzi\u0119ki niej przy powo\u0142ywaniu obiekt\u00f3w nie b\u0119dziemy musieli za ka\u017cdym razem stosowa\u0107 s\u0142owa struct, poniewa\u017c dzi\u0119ki typedef, staje si\u0119 ona swego rodzaju \u201esta\u0142\u0105 definicj\u0105 typu\u201d.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b087d76 elementor-widget elementor-widget-text-editor\" data-id=\"b087d76\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>#include \"pico\/stdlib.h\"<br \/>#include &lt;stdio.h&gt;<br \/><br \/>\/\/ structure declaration<br \/>typedef struct {<br \/>char name[20];<br \/>u_int8_t age;<br \/>float height;<br \/>} Person;<br \/><br \/>int main() {<br \/>stdio_init_all(); \/\/initialization of the stdio library<br \/><br \/>\/\/ Create an instance of the Person structure<br \/>Person Rafal;<br \/>Person Kuba;<br \/><br \/>\/\/ Assigning values to structure fields<br \/>snprintf(Rafal.name, sizeof(Rafal.name), \"Rafal\");<br \/>Rafal.age = 24;<br \/>Rafal.height = 180.5;<br \/><br \/>snprintf(Kuba.name, sizeof(Kuba.name), \"Kuba\");<br \/>Kuba.age = 28;<br \/>Kuba.height = 176.0;<br \/><br \/>while (true) {<br \/>printf(\"Name: %s\\n\", Rafal.name);<br \/>printf(\"Age: %d\\n\", Rafal.age);<br \/>printf(\"Height: %.1f cm\\n\", Rafal.height);<br \/><br \/>printf(\"Name: %s\\n\", Kuba.name);<br \/>printf(\"Age: %d\\n\", Kuba.age);<br \/>printf(\"Height: %.1f cm\\n\", Kuba.height);<br \/><br \/>\/\/ delay<br \/>sleep_ms(1000);<br \/><br \/>}<br \/>}<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9550efc elementor-widget elementor-widget-text-editor\" data-id=\"9550efc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Program, kt\u00f3ry pozwoli nam powo\u0142a\u0107 do \u017cycia obiekty strukturalne, zaczynamy od klasycznej ju\u017c implementacji bibliotek. W drugim kroku definiujemy struktur\u0119, zgodnie z opisanym powy\u017cej przyk\u0142adem, dzi\u0119ki niej mo\u017cliwe b\u0119dzie \u201ewygenerowanie\u201d osoby z w\u0142asnym imieniem, wiekiem oraz wzrostem. W kontek\u015bcie wcze\u015bniej omawianych tablic zwr\u00f3\u0107cie uwag\u0119, \u017ce imi\u0119 jest w\u0142a\u015bnie dwudziestoelementow\u0105 tablic\u0105 znak\u00f3w char, w kt\u00f3rej umie\u015bcimy imi\u0119 b\u0119d\u0105ce z perspektywy mikrokontrolera po prostu ci\u0105giem znak\u00f3w.<\/p><p style=\"font-weight: 400\">W g\u0142\u00f3wnej funkcji main, po inicjalizacji standardowych polece\u0144 biblioteki studio tworzymy obiekty, innymi s\u0142owy, osoby bazuj\u0105ce na opisanej strukturze. B\u0119dzie to Rafa\u0142 i Kuba. Samo utworzenie obiektu strukturalnego jest niezwykle proste i polega na podaniu nazwy struktury \u201ePerson\u201d oraz wymy\u015blonej nazwy obiektu. Gdyby\u015bmy skorzystali z teoretycznej dla j\u0119zyka C metody definicji struktury, bez \u201etypedef\u201d to w\u0142a\u015bnie w tym miejscu musieliby\u015bmy stosowa\u0107 dodatkowe polecenie struct, a tak nie ma takie potrzeby.<\/p><p style=\"font-weight: 400\">Gdy obiekty, czyli osoby zosta\u0142y ju\u017c powo\u0142ane, mo\u017cna przypisa\u0107 im odpowiednie atrybuty, to w\u0142a\u015bnie zadanie zrealizowane zosta\u0142o w kolejnych instrukcjach. Do pojedynczej zmiennej strukturalnej dostajemy si\u0119 poprzez podanie nazwy obiektu i pojedynczej zmiennej w strukturze rozdzielonych kropk\u0105. Tak wi\u0119c, aby doda\u0107 wiek Rafa\u0142a, korzystamy z Rafal.age i dzi\u0119ki operatorowi przypisania w zmiennej \u201eage\u201d obiektu \u201eRafal\u201d umieszczone zostaje 24. W podobny spos\u00f3b dodajemy wzrost, cho\u0107 tutaj mo\u017cemy skorzysta\u0107 z dok\u0142adniejsze liczby, poniewa\u017c ten opisany jest zmienn\u0105 float. Zdecydowanie najbardziej z\u0142o\u017conym procesem jest tutaj przypisanie samego imienia. Cho\u0107 wiemy, \u017ce imi\u0119 jest ci\u0105giem znak\u00f3w to dla mikrokontrolera nie jest to takie oczywiste i nie mo\u017cemy tak po prostu skorzysta\u0107 z przyk\u0142adowo \u201eKuba.name = \u2018\u2019Kuba\u2019\u2019;\u201d. Aby doda\u0107 imi\u0119 skorzystamy z polecenia snprintf, kt\u00f3re stworzy odpowiedni ci\u0105g znak\u00f3w. Funkcja ta wymaga trzech parametr\u00f3w, pierwszym jest miejsce, gdzie umieszczony ma by\u0107 wygenerowany bufor, w naszym przypadku oczekujemy, \u017ce zapisany zostanie w zmiennej strukturalnej odpowiadaj\u0105cej danemu obiektowi, dlatego umieszczamy tutaj Rafal.name oraz Kuba.name. Drugim parametrem jest wielko\u015b\u0107 miejsca, w kt\u00f3rym zapisujemy dane. Mogliby\u015bmy wpisa\u0107 je na sta\u0142e, jako dwadzie\u015bcia, poniewa\u017c w\u0142a\u015bnie takiej wielko\u015bci s\u0105 tablice char, ale lepiej skorzysta\u0107 tutaj z polecenia, kt\u00f3re zrobi to za nas automatycznie. Tak w\u0142a\u015bnie dzia\u0142a sizeof, zwracaj\u0105c wielko\u015b\u0107 elementu podanego w nawiasie. Ostatnim argumentem snprintf jest ci\u0105g znak\u00f3w, kt\u00f3ry umie\u015bcimy w podanym wcze\u015bniej miejscu, czyli po prostu imiona Rafa\u0142 i Kuba zapisane jako ci\u0105gi znak\u00f3w.<\/p><p style=\"font-weight: 400\">W niesko\u0144czonej p\u0119tli while skorzystamy z dobrze ju\u017c znanego printf i w co sekundowym odst\u0119pie b\u0119dziemy wysy\u0142a\u0107 na monitor portu szeregowego informacje zapisane w zmiennych strukturalnych.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bffad8d elementor-widget elementor-widget-image\" data-id=\"bffad8d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struktura-serial-monitor.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"struktura serial monitor\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6IjgyODE0IiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wNlwvc3RydWt0dXJhLXNlcmlhbC1tb25pdG9yLnBuZyJ9\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"123\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struktura-serial-monitor-1024x157.png\" class=\"attachment-large size-large wp-image-82814\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struktura-serial-monitor-1024x157.png 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struktura-serial-monitor-300x46.png 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struktura-serial-monitor-768x118.png 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struktura-serial-monitor-1536x235.png 1536w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/struktura-serial-monitor.png 1732w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Monitor portu szeregowego po uruchomieniu programu. <\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d4a057c elementor-widget elementor-widget-text-editor\" data-id=\"d4a057c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Po wrzuceniu kodu na Raspberry Pi Pico w serial monitorze powinni\u015bmy zobaczy\u0107 opisy utworzonych w kodzie os\u00f3b.<\/p><p style=\"font-weight: 400\">W tym projekcie warto zwr\u00f3ci\u0107 uwag\u0119 na jeden szczeg\u00f3\u0142. Struktura, kt\u00f3r\u0105 utworzyli\u015bmy, jest tylko jedna, natomiast obiekty s\u0105 dwa i odwo\u0142uj\u0105 si\u0119 niejako do tych samych zmiennych i nic nie stoi na przeszkodzie, aby doda\u0107 jeszcze wi\u0119cej obiekt\u00f3w. Na tym w\u0142a\u015bnie polega magia struktur, kt\u00f3re bywaj\u0105 nazywane pseudoobiektowymi konstrukcjami w j\u0119zyku C. Dzieje si\u0119 tak, poniewa\u017c praca z nimi przypomina nieco programowanie znane z j\u0119zyk\u00f3w obiektowych, takich jak C++, czy Python. Struktura pozwala grupowa\u0107 pewne dane w nieco bardziej wyszukane paczki, co bywa ca\u0142kiem przydatne. Wyobra\u017acie sobie, \u017ce pracujemy z dowolnym czujnikiem, (to ju\u017c w kolejnym artykule) jego obs\u0142ug\u0119 mogliby\u015bmy oprze\u0107 na zmiennych, czy te\u017c sta\u0142ych, program dzia\u0142a\u0142by poprawnie, ale wprowadzanie r\u00f3\u017cnego rodzaju zmian mog\u0142oby by\u0107 utrudnione. Znacznie lepiej z takiego czujnika zrobi\u0107 obiekt o w\u0142asnych atrybutach, w\u00f3wczas kod wygl\u0105da znacznie lepiej, jak i sama komunikacja zrealizowana jest lepiej ni\u017c przeci\u0119tnie. Na ten moment jednak wystarczy nam podstawowa wiedza jak utworzy\u0107 i korzysta\u0107 ze struktur, bardziej z\u0142o\u017conymi przyk\u0142adami zajmiemy si\u0119 w przysz\u0142o\u015bci.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-df0f4fc elementor-widget elementor-widget-heading\" data-id=\"df0f4fc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Przekazywanie danych do funkcji przez wska\u017anik <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bf800e7 elementor-widget elementor-widget-text-editor\" data-id=\"bf800e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Tematem, kt\u00f3ry poruszyli\u015bmy ju\u017c wcze\u015bniej, s\u0105 wska\u017aniki. Dotychczas opracowali\u015bmy proste przyk\u0142ady, w kt\u00f3rych odczytywali\u015bmy adresy zapisanych w pami\u0119ci mikrokontrolera zmiennych. Nadszed\u0142 jednak czas, aby przyjrze\u0107 si\u0119 programowi, kt\u00f3ry tak naprawd\u0119 wykorzysta esencj\u0119 tych element\u00f3w j\u0119zyka C, czyli przekazywaniem danych do funkcji poprzez wska\u017anik. Cho\u0107 mo\u017ce brzmie\u0107 to nieco skomplikowanie, proces ten wcale nie jest przesadnie z\u0142o\u017cony, a dzi\u0119ki niemu zyskujemy pewien olbrzymi atut.<\/p><p style=\"font-weight: 400\">Dla tego przyk\u0142adu utworzy\u0142em kolejny projekt o nazwie increase_variable, w kt\u00f3rym napiszemy funkcj\u0119 zwi\u0119kszaj\u0105c\u0105 zmienn\u0105 o jeden przy ka\u017cdorazowym wywo\u0142aniu. B\u0119dzie to proste zadanie, bo zwi\u0119kszanie warto\u015bci o jeden znamy ju\u017c z wcze\u015bniejszych materia\u0142\u00f3w, tym razem jednak zrealizujemy to w nieco bardziej wyrafinowany spos\u00f3b. Tak wi\u0119c przejd\u017amy od razu do kodu.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-232bff0 elementor-widget elementor-widget-text-editor\" data-id=\"232bff0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre>#include &lt;stdio.h&gt;<br \/>#include \"pico\/stdlib.h\"<br \/><br \/>uint8_t number = 0;<br \/><br \/>\/\/ A function that increases the value of the indicated variable by 1<br \/>void increase_variable(uint8_t *num) {<br \/>(*num)++;<br \/>}<br \/><br \/>int main() {<br \/>stdio_init_all();<br \/><br \/>while (true) {<br \/><br \/>printf(\"Before incrementation: %d\\n\", number);<br \/>increase_variable(&amp;number);<br \/>printf(\"After inctementation: %d\\n\", number);<br \/>sleep_ms(500);<br \/>}<br \/><br \/>}<\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-170f18c elementor-widget elementor-widget-text-editor\" data-id=\"170f18c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Program rozpoczynamy standardowo od do\u0142\u0105czenia bibliotek oraz powo\u0142ania zmiennej \u201enumber\u201d, jej warto\u015bci\u0105 pocz\u0105tkow\u0105 b\u0119dzie zero, i to w\u0142a\u015bnie j\u0105 w dalszej cz\u0119\u015bci kodu b\u0119dziemy chcieli modyfikowa\u0107. Dalej utworzy\u0142em funkcj\u0119 increase_variable typu void, tak\u017ce nie b\u0119dzie ona zawraca\u0107 nam \u017cadnej warto\u015bci, natomiast w argumentach oczekiwa\u0107 b\u0119dzie podania wska\u017anika na dane typu uint8_t, kt\u00f3rego dalej okre\u015bla\u0107 b\u0119dziemy jako \u201enum\u201d. Funkcja realizowa\u0107 b\u0119dzie tak naprawd\u0119 tylko jedn\u0105 instrukcj\u0119 inkrementacji warto\u015bci spod podanego w argumencie wska\u017anika. Tak wi\u0119c mo\u017cemy oczekiwa\u0107, \u017ce po wywo\u0142aniu funkcji dana, do kt\u00f3rej podamy wska\u017anik, zostanie zwi\u0119kszona o jeden.<\/p><p style=\"font-weight: 400\">G\u0142\u00f3wna cz\u0119\u015b\u0107 programu umieszczona zosta\u0142a w p\u0119tli while. Wy\u015bwietlimy aktualny stan zmiennej number, nast\u0119pnie wywo\u0142ujemy funkcj\u0119 increase_variable i dzi\u0119ki operatorowi wy\u0142uskania adresu w argumencie podajemy miejsce w pami\u0119ci, w kt\u00f3rym zapisany zosta\u0142 number. Po sko\u0144czeniu tej operacji program ponownie wy\u015ble na serial monitor warto\u015b\u0107 zapisan\u0105 w naszej zmiennej.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f37dd00 elementor-widget elementor-widget-image\" data-id=\"f37dd00\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/wskaznik-funkcja-monitor.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"wskaznik funkcja monitor\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6IjgyODE4IiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wNlwvd3NrYXpuaWstZnVua2NqYS1tb25pdG9yLnBuZyJ9\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"118\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/wskaznik-funkcja-monitor-1024x151.png\" class=\"attachment-large size-large wp-image-82818\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/wskaznik-funkcja-monitor-1024x151.png 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/wskaznik-funkcja-monitor-300x44.png 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/wskaznik-funkcja-monitor-768x113.png 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/wskaznik-funkcja-monitor-1536x227.png 1536w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/wskaznik-funkcja-monitor.png 1706w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Warto\u015bci number widoczne w monitorze portu szeregowego.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b7b90b elementor-widget elementor-widget-text-editor\" data-id=\"2b7b90b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Po uruchomieniu programu na ekranie komputera powinny by\u0107 widoczne kolejne warto\u015bci zmiennej number, zwi\u0119kszaj\u0105ce si\u0119 co p\u00f3\u0142 sekundy o jeden. Tym prostym programem zrealizowali\u015bmy przekazywanie danych do funkcji poprzez wska\u017anik i mog\u0142oby si\u0119 wydawa\u0107, \u017ce to nic szczeg\u00f3lnego, ale najwi\u0119kszym atutem tego rozwi\u0105zania jest co\u015b, czego nie widzimy.<\/p><p style=\"font-weight: 400\">Zastan\u00f3wmy si\u0119, co by si\u0119 sta\u0142o, gdyby\u015bmy zdecydowali si\u0119 umie\u015bci\u0107 w argumencie funkcji zwyczajn\u0105 zmienn\u0105. W takim przypadku po przekazaniu do increase_variable zmiennej generowana by\u0142aby jej kopia, na kt\u00f3rej to wykona\u0142aby si\u0119 operacja inkrementacji. I to dopiero z kopii mogliby\u015bmy wyci\u0105gn\u0105\u0107 zwi\u0119kszan\u0105 o jeden warto\u015b\u0107. My\u015bl\u0119, \u017ce ju\u017c wicie, o co chodzi, w takim przypadku ca\u0142kowicie niepotrzebnie tworzymy sobie dodatkow\u0105 zmienn\u0105, kt\u00f3rej nie widzimy, ale kt\u00f3ra zajmuje miejsce w pami\u0119ci. Dzi\u0119ki wska\u017anikowi mo\u017cemy tego unikn\u0105\u0107, podajemy tylko i wy\u0142\u0105cznie adres, dzi\u0119ki czemu ca\u0142a operacja wykonywana jest na oryginalnej warto\u015bci. Takie rozwi\u0105zanie ma sporo zalet, przede wszystkim mo\u017cemy manipulowa\u0107 warto\u015bciami zmiennych bezpo\u015brednio, co zwi\u0119ksza te\u017c efektywno\u015b\u0107 kodu. Poza tym takie rozwi\u0105zanie jest bezpieczniejsze w przysz\u0142o\u015bci, gdy pisa\u0107 b\u0119dziemy w\u0142asne biblioteki, z kt\u00f3rych korzysta\u0107 b\u0119d\u0105 mogli inni u\u017cytkownicy, uodparniamy si\u0119 na wprowadzone przez nich nieoprawne dane. Nasz kod oczekiwa\u0107 b\u0119dzie tylko adresu, wykonamy w\u0142asne operacje i nie b\u0119dzie nas interesowa\u0107, jak to wp\u0142ynie na kod os\u00f3b trzecich, niejako umywamy r\u0119ce od potencjalnych problem\u00f3w. To czy u\u017cytkownik poda odpowiedni wska\u017anik, zale\u017ce\u0107 b\u0119dzie tylko od niego. Cho\u0107 wspomnie\u0107 musz\u0119 te\u017c, \u017ce w j\u0119zyku C co\u015b takiego jak konflikt typ\u00f3w, kt\u00f3ry mo\u017ce pojawi\u0107 si\u0119 przy okazji przekazywania danych przez wska\u017anik, rozwi\u0105zywany jest przez tak zwane rzutowanie, ale tym tematem zajmiemy si\u0119 kiedy indziej.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-44c156b elementor-widget elementor-widget-heading\" data-id=\"44c156b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Projekt maszyny stan\u00f3w <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6a2d9ca elementor-widget elementor-widget-text-editor\" data-id=\"6a2d9ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Do tej pory nasze programy tworzyli\u015bmy przede wszystkim z my\u015bl\u0105 o przetestowaniu konkretnej funkcjonalno\u015bci, sterowaniu wyprowadzeniami RPI, obs\u0142udze ADC czy te\u017c komunikacji po USB. Kody te analizowali\u015bmy pod wzgl\u0119dem funkcji, ale niekoniecznie dzia\u0142ania jako ca\u0142o\u015bci, dlatego czas to zmieni\u0107. W tym podrozdziale przygotujemy nieco wi\u0119kszy projekt, bazuj\u0105c na znanym w j\u0119zyku C koncepcie maszyny stan\u00f3w. Jako \u017ce do Raspberry Pi Pico pod\u0142\u0105czone s\u0105 trzy diody LED, mo\u017cemy przygotowa\u0107 program symuluj\u0105cy sygnalizator \u015bwietlny. Jednak poza klasyczn\u0105 zmian\u0105 z czerwonego na zielone i odwrotnie zaimplementujemy te\u017c specjalny tryb serwisowy, w kt\u00f3rym pulsowa\u0107 b\u0119dzie tylko \u017c\u00f3\u0142ty sygnalizator. Dla tego \u0107wiczenia przygotowa\u0142em kolejny projekt nazwany state_machine, jednak zanim przejdziemy do kodu, przyjrzyjmy si\u0119 bli\u017cej koncepcji maszyny stan\u00f3w.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-765d8a0 elementor-widget elementor-widget-image\" data-id=\"765d8a0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/stsate-swiatla-diagram.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"stsate swiatla diagram\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6IjgyODIyIiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wNlwvc3RzYXRlLXN3aWF0bGEtZGlhZ3JhbS5wbmcifQ%3D%3D\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"280\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/stsate-swiatla-diagram-1024x359.png\" class=\"attachment-large size-large wp-image-82822\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/stsate-swiatla-diagram-1024x359.png 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/stsate-swiatla-diagram-300x105.png 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/stsate-swiatla-diagram-768x269.png 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/stsate-swiatla-diagram.png 1101w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Graficzna reprezentacja kolejnych stan\u00f3w sygnalizacji \u015bwietlnej.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65301b2 elementor-widget elementor-widget-text-editor\" data-id=\"65301b2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Wed\u0142ug ksi\u0105\u017ckowej definicji maszyn\u0119 stan\u00f3w okre\u015bli\u0107 mo\u017cemy jako matematyczny model obliczeniowy, kt\u00f3ry reprezentuje system poprzez sko\u0144czon\u0105 liczb\u0119 stan\u00f3w, przej\u015b\u0107 mi\u0119dzy nimi oraz dzia\u0142a\u0144 wywo\u0142ywanych w wyniku tych przej\u015b\u0107. Brzmi to nieco skomplikowanie i znacznie lepiej powiedzie\u0107, \u017ce maszyna stan\u00f3w to po prostu model, zazwyczaj graficzny, kt\u00f3ry opisuje krok po kroku dzia\u0142anie danego programu lub urz\u0105dzenia. Takim w\u0142a\u015bnie modelem mo\u017cemy opisa\u0107 te\u017c funkcjonowanie ulicznego sygnalizatora \u015bwietlnego. Na pocz\u0105tku aktywne jest \u015bwiat\u0142o czerwone, nast\u0119pnie przechodzi w \u017c\u00f3\u0142te, aby po chwili uruchomiony zosta\u0142\u00a0zielony sygnalizator, natomiast ostatnim stanem poprzedzaj\u0105cym powr\u00f3t do czerwonego koloru jest \u015bwiat\u0142o \u017c\u00f3\u0142te (jest to tr\u00f3jfazowy uk\u0142ad \u015bwietlny znany mi\u0119dzy innymi z USA i Francji, w Polsce stosowany jest model czterofazowy). Dysponuj\u0105c tego typu opisem, znacznie \u0142atwiej jest przygotowa\u0107 realizuj\u0105cy to zadanie program. Oczywi\u015bcie mogliby\u015bmy napisa\u0107 prosty kod, aktywuj\u0105cy kolejno odpowiednie diody LED, odpowiadaj\u0105ce wspomnianemu sygnalizatorowi, ale w projekcie tym zastosujemy znacznie ciekawsz\u0105 funkcj\u0119 switch\u2026case. Poza tym, aby nie by\u0142o zbyt prosto, spr\u00f3bujemy przygotowa\u0107 te\u017c specjalny tryb, w kt\u00f3rym to potencjalny u\u017cytkownik drogi powinien stosowa\u0107 si\u0119 do znak\u00f3w pionowych, a w\u00f3wczas sygnalizator b\u0119dzie mruga\u0107 \u017c\u00f3\u0142tym \u015bwiat\u0142em.<\/p><p style=\"font-weight: 400\">Zanim jednak przejdziemy do kodu, pozna\u0107 musicie kolejn\u0105 nowink\u0119 j\u0119zyka C, czyli tak zwany typ enumeracyjny, kt\u00f3ry pozwoli nam opisa\u0107 stany, w jakich znale\u017a\u0107 mo\u017ce si\u0119 sygnalizator.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4663f65 elementor-widget elementor-widget-image\" data-id=\"4663f65\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/enum.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"enum\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6IjgyODI2IiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wNlwvZW51bS5wbmcifQ%3D%3D\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/enum-1024x576.png\" class=\"attachment-large size-large wp-image-82826\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/enum-1024x576.png 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/enum-300x169.png 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/enum-768x432.png 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/enum-1536x864.png 1536w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/enum.png 1920w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Deklaracja typu wyliczeniowego. <\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d0894b4 elementor-widget elementor-widget-text-editor\" data-id=\"d0894b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Tak samo jak w programach umieszczamy zmienne, podobnie w jaki\u015b spos\u00f3b musimy nazwa\u0107 i okre\u015bli\u0107 stany, w jakich znajdowa\u0107 mo\u017ce si\u0119 sygnalizator \u015bwietlny. Naj\u0142atwiej jest odnosi\u0107 si\u0119 do aktywnego w danej chwili koloru, je\u015bli \u015bwieci\u0107 b\u0119dzie zielona dioda, nazwiemy ten stan zielonym, analogicznie wygl\u0105da to w przypadku \u015bwiat\u0142a czerwonego. Jak warto zauwa\u017cy\u0107, \u015bwiat\u0142o \u017c\u00f3\u0142te \u015bwieci\u0107 b\u0119dzie w dw\u00f3ch przypadkach, przej\u015bcia z koloru zielonego na czerwony lub odwrotnie, dlatego takie stany r\u00f3wnie\u017c b\u0119dziemy musieli opisa\u0107. Poza tym pami\u0119ta\u0107 musimy te\u017c o specjalnym trybie serwisowym.<\/p><p style=\"font-weight: 400\">Poszczeg\u00f3lne stany mogliby\u015bmy zapisa\u0107 w r\u00f3\u017cnych zmiennych, ale istnieje znacznie lepszy spos\u00f3b zwany typem enumeracyjnym. Do tej pory zmienne, kt\u00f3re u\u017cywali\u015bmy dedykowane by\u0142y do konkretnych typ\u00f3w danych, przyk\u0142adowo float przechowuje zawsze liczby zmiennoprzecinkowe. Enum, nazywany te\u017c typem wyliczeniowym pozwala nam w pewien spos\u00f3b przygotowa\u0107 w\u0142asn\u0105 zmienn\u0105, kt\u00f3ra przechowywa\u0107 b\u0119dzie nasze w\u0142asne warto\u015bci.<\/p><p style=\"font-weight: 400\">Typ wyliczeniowy deklarujemy w podobny spos\u00f3b jak struktury. Zaczynamy od s\u0142\u00f3w kluczowych \u201etypedef enum\u201d, a w nawiasie klamrowym umieszczamy w\u0142asne typy warto\u015bci, kt\u00f3re b\u0119dzie mog\u0142a przyj\u0105\u0107, opisane przez enum zmienna. Na samym ko\u0144cu dodajemy te\u017c nazw\u0119, kt\u00f3r\u0105 pos\u0142ugiwa\u0107 b\u0119dziemy si\u0119 w dalszej cz\u0119\u015bci kodu.<\/p><p style=\"font-weight: 400\">W ten spos\u00f3b stworzyli\u015bmy niejako w\u0142asny typ zmiennej o nazwie traffic_light_state_t, kt\u00f3ra przechowywa\u0107 b\u0119dzie aktualny stan naszej maszyny stan\u00f3w, innymi s\u0142owy, stan, w jakim znajdowa\u0107 b\u0119dzie si\u0119 sygnalizator. B\u0119dzie to przyk\u0142adowo STATE_GREEN, kt\u00f3ry odpowiada\u0107 b\u0119dzie zielonemu sygnalizatorowi.<\/p><p style=\"font-weight: 400\">W tym przypadku podobnie jak przy strukturze zdecydowa\u0142em si\u0119 od razu przedstawi\u0107 wam nieco rozbudowan\u0105 deklaracj\u0119 enuma, ze s\u0142owem typedef na pocz\u0105tku. Motywacja by\u0142a tutaj identyczna, jak poprzednio i dzi\u0119ki temu w dalszej cz\u0119\u015bci kodu nie b\u0119dzie potrzeby stosowania przedrostka enum.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c61a997 elementor-widget elementor-widget-code-highlight\" data-id=\"c61a997\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-c line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-c\">\n\t\t\t\t\t<xmp>#include \"pico\/stdlib.h\"\r\n\r\n#define GREEN_LED 0\r\n#define YELLOW_LED 1\r\n#define RED_LED 2\r\n#define BUTTON_PIN 16\r\n\r\n\/\/ States of the state machine for traffic lights\r\ntypedef enum {\r\n    STATE_GREEN,\r\n    STATE_YELLOW_TO_RED,\r\n    STATE_RED,\r\n    STATE_YELLOW_TO_GREEN,\r\n    STATE_SERVICE\r\n} traffic_light_state_t;\r\n\r\n\/\/ Function to set the status of the LED\r\nvoid set_traffic_light(traffic_light_state_t state) {\r\n    gpio_put(GREEN_LED, state == STATE_GREEN);\r\n    gpio_put(YELLOW_LED, state == STATE_YELLOW_TO_RED || state == STATE_YELLOW_TO_GREEN);\r\n    gpio_put(RED_LED, state == STATE_RED);\r\n}\r\n\r\nint main() {\r\n    stdio_init_all();\r\n\r\n    gpio_init(GREEN_LED);\r\n    gpio_set_dir(GREEN_LED, GPIO_OUT);\r\n\r\n    gpio_init(YELLOW_LED);\r\n    gpio_set_dir(YELLOW_LED, GPIO_OUT);\r\n\r\n    gpio_init(RED_LED);\r\n    gpio_set_dir(RED_LED, GPIO_OUT);\r\n\r\n    gpio_init(BUTTON_PIN);\r\n    gpio_set_dir(BUTTON_PIN, GPIO_IN);\r\n    gpio_pull_up(BUTTON_PIN);  \/\/ W\u0142\u0105czenie wewn\u0119trznego rezystora podci\u0105gaj\u0105cego\r\n\r\n    \/\/ Initial signaling status\r\n    traffic_light_state_t state = STATE_GREEN;\r\n    bool service_mode = false;\r\n\r\n    while (true) {\r\n        \/\/ Checking the status of the button\r\n            if (gpio_get(BUTTON_PIN) == 0) {\r\n                service_mode = !service_mode;\r\n                while (gpio_get(BUTTON_PIN) == 0);  \/\/ Waiting for the button to be released\r\n\r\n                if (service_mode) {\r\n                    state = STATE_SERVICE;\r\n                } else {\r\n                    state = STATE_GREEN; \/\/ Return to normal state after service mode\r\n                }\r\n        }\r\n\r\n        \r\n        switch (state) {\r\n            case STATE_GREEN:\r\n                set_traffic_light(STATE_GREEN);\r\n                sleep_ms(5000); \/\/ Zielone \u015bwiat\u0142o \u015bwieci przez 5 sekund\r\n                if (!service_mode) state = STATE_YELLOW_TO_RED;\r\n                break;\r\n\r\n            case STATE_YELLOW_TO_RED:\r\n                set_traffic_light(STATE_YELLOW_TO_RED);\r\n                sleep_ms(2000); \/\/ Yellow light illuminates for 2 seconds\r\n                if (!service_mode) state = STATE_RED;\r\n                break;\r\n\r\n            case STATE_RED:\r\n                set_traffic_light(STATE_RED);\r\n                sleep_ms(5000); \/\/ Red light illuminates for 5 seconds\r\n                if (!service_mode) state = STATE_YELLOW_TO_GREEN;\r\n                break;\r\n\r\n            case STATE_YELLOW_TO_GREEN:\r\n                set_traffic_light(STATE_YELLOW_TO_GREEN);\r\n                sleep_ms(2000); \/\/ Yellow light illuminates for 2 seconds\r\n                if (!service_mode) state = STATE_GREEN;\r\n                break;\r\n\r\n            case STATE_SERVICE:\r\n                gpio_put(GREEN_LED, 0);\r\n                gpio_put(RED_LED, 0);\r\n                \/\/ Blinking yellow light\r\n                gpio_put(YELLOW_LED, 1);\r\n                sleep_ms(500);\r\n                gpio_put(YELLOW_LED, 0);\r\n                sleep_ms(500);\r\n                break;\r\n        }\r\n    }\r\n\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3491998 elementor-widget elementor-widget-text-editor\" data-id=\"3491998\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Program, jak to zwykle bywa, zaczynamy od do\u0142\u0105czenia biblioteki oraz zdefiniowania pin\u00f3w, do kt\u00f3rych pod\u0142\u0105czone s\u0105 diody LED oraz przycisk. W kolejnym kroku umieszczona zosta\u0142a deklaracja typu enumeracyjnego, kt\u00f3r\u0105 opisa\u0142em powy\u017cej, a tak\u017ce funkcja, ustawiaj\u0105ca odpowiedni stan diod LED, ale do nie przejdziemy za moment.<\/p><p style=\"font-weight: 400\">Na pocz\u0105tku g\u0142\u00f3wnej funkcji main znalaz\u0142a si\u0119 inicjalizacja wykorzystywanych przez nas wyprowadze\u0144 Raspberry Pi Pico oraz ustawienie pocz\u0105tkowego stanu naszej sygnalizacji. Tworzymy tutaj dwie zmienne state oraz service_mode. Pierwsza z nich jest warto\u015bci\u0105 naszego specjalnego typu, dlatego przypisa\u0107 mo\u017cemy do niej tylko wybrane stany, domy\u015blnym b\u0119dzie STATE_GREEN, czyli aktywne zielone \u015bwiat\u0142o. Zmienna typu bool o nazwie service_mode pos\u0142u\u017cy nam do aktywowania trybu serwisowego sygnalizacji, jej domy\u015blnym stanem b\u0119dzie false, poniewa\u017c nie ma powodu, aby stan ten by\u0142 aktywny od razu po starcie programu.<\/p><p style=\"font-weight: 400\">Dzia\u0142anie sygnalizacji \u015bwietlnej opiszemy w p\u0119tli while. W jej wn\u0119trzu musi znale\u017a\u0107 si\u0119 obs\u0142uga przycisku, kt\u00f3ry aktywuje tryb serwisowy, innymi s\u0142owy, zmieni warto\u015b\u0107 state na STATE_SERVICE oraz zale\u017cno\u015b\u0107, kt\u00f3ra pozwoli zmienia\u0107 i odpowiednio reagowa\u0107 na kolejne stany sygnalizacji \u015bwietlnej. Na pierwszy ogie\u0144 we\u017amy obs\u0142ug\u0119 przycisku, kt\u00f3ra zrealizowana jest za pomoc\u0105 kr\u00f3tkiego fragmentu kodu na pocz\u0105tku niesko\u0144czonej p\u0119tli while. Na sam pocz\u0105tek sprawdzi\u0107 musimy stan przycisku funkcj\u0105 gpio_get, je\u015bli odczytana warto\u015b\u0107 b\u0119dzie r\u00f3wna zero, czyli przycisk zostanie wci\u015bni\u0119ty, a wyprowadzenie RPI zwarte do masy, mo\u017cemy zmieni\u0107 na przeciwny warto\u015b\u0107 zmiennej service_mode. Korzystamy tutaj z operatora \u201e!\u201d, przypisuj\u0105c zmiennej stan odwrotny do poprzedniego. W kolejnym kroku musimy zaczeka\u0107 na zwolnienie przycisku, korzystamy tutaj ze sprytnej konstrukcji opartej na p\u0119tli while. Po raz drugi sprawdzamy stan przycisku, i je\u015bli ten nadal jest wci\u015bni\u0119ty wpadamy do p\u0119tli. W jej wn\u0119trzu funkcj\u0105 warunkow\u0105 zale\u017cn\u0105 od zmiennej service_mode, przypisujemy odpowiedni stan do state. Je\u015bli zmienna b\u0119dzie logiczn\u0105 jedynk\u0105, aktywujemy STATE_SERVICE, w przeciwnym razie uruchamiamy domy\u015blny stan \u015bwiat\u0142a zielonego. P\u0119tla ta aktywna b\u0119dzie do czasu zwolnienia przycisku, po kt\u00f3rym zawsze b\u0119dziemy w trybie serwisowym lub domy\u015blnym.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bdfe0c2 elementor-widget elementor-widget-image\" data-id=\"bdfe0c2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/case.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"case\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6IjgyODMwIiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wNlwvY2FzZS5wbmcifQ%3D%3D\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/case-1024x576.png\" class=\"attachment-large size-large wp-image-82830\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/case-1024x576.png 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/case-300x169.png 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/case-768x432.png 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/case-1536x864.png 1536w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/case.png 1920w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Zasada u\u017cycia funkcji switch\u2026case.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-68e95f7 elementor-widget elementor-widget-text-editor\" data-id=\"68e95f7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Funkcj\u0105, kt\u00f3ra tak naprawd\u0119 zdefiniuje dzia\u0142anie naszej sygnalizacji, b\u0119dzie wspomniany ju\u017c wcze\u015bniej switch\u2026case. Jest to ciekawa konstrukcja, kt\u00f3r\u0105 mogliby\u015bmy nazwa\u0107 w pewien spos\u00f3b warunkow\u0105, zale\u017cn\u0105 od pojedynczej zmiennej. Po s\u0142owie kluczowym \u201eswitch\u201d umieszczamy zmienn\u0105, od kt\u00f3rej zale\u017cny b\u0119dzie wykonywany dalej kod. W naszym przypadku b\u0119dzie to \u201estate\u201d, poniewa\u017c w\u0142a\u015bnie tutaj przechowywany jest aktualny stan sygnalizacji \u015bwietlnej. W dalszej cz\u0119\u015bci reagujemy na ka\u017cd\u0105 mo\u017cliw\u0105 warto\u015b\u0107 \u201estate\u201d. Domy\u015blnie po uruchamianiu programu wykonany zostanie fragment kodu opisany poni\u017cej case STATE_GREEN. W stanie tym wywo\u0142amy funkcj\u0119 set_traffic_light i w jej argumencie umie\u015bcimy STATE_GREEN. Gdy cofniemy si\u0119 na g\u00f3r\u0119 programu, gdzie funkcja ta zosta\u0142a opisana zauwa\u017cymy, \u017ce uruchomienie diody LED zale\u017cne jest w\u0142a\u015bnie od warto\u015bci przekazanej w argumencie. Gdy znajdzie si\u0119 tam STATE_GREEN aktywowana zostanie zielona dioda. Po wywo\u0142aniu funkcji ustawiaj\u0105cej odpowiedni stan na wyprowadzeniu RPI program odczekuje pi\u0119\u0107 sekund, a nast\u0119pnie sprawdza, czy przypadkiem nie zosta\u0142 aktywowany tryb serwisowy, je\u015bli nie to do warto\u015bci state przypisana zostaje warto\u015b\u0107 STATE_YELLOW_TO_RED, poniewa\u017c w\u0142a\u015bnie w takim stanie znajdowa\u0107 powinna si\u0119 teraz sygnalizacja. Zauwa\u017ccie, \u017ce w tym miejscu zastosowa\u0142em ciekaw\u0105 konstrukcj\u0119 z operatorem if pozbawionym nawias\u00f3w klamrowych. Je\u015bli kod wykonywany w warunku jest tylko pojedyncz\u0105 funkcj\u0105 mo\u017cemy umie\u015bci\u0107 go w tej samej linii z poleceniem if, co nieco skraca nasz program i polepsza jego czytelno\u015b\u0107. Po wykonaniu tego kodu funkcja switch\u2026case zostaje przerwana przez s\u0142owo kluczowe \u201ebreak\u201d, a program wraca na pocz\u0105tek p\u0119tli while.<\/p><p style=\"font-weight: 400\">Tutaj po raz kolejny sprawdzany jest stan przycisku i, gdy ten nie zosta\u0142 wci\u015bni\u0119ty, program przechodzi do switch\u2026case, tym razem jednak wed\u0142ug stanu zmiennej state, kt\u00f3ry zmieni\u0142 si\u0119 przy poprzednim przebiegu p\u0119tli, mikrokontroler wykona kod spod warto\u015bci case STATE_YELLOW_TO_RED. Instrukcje tutaj wygl\u0105daj\u0105 analogicznie jak poprzednio i po zmianie aktywnej diody LED, do \u201estate\u201d przypisany zostaje kolejny stan, tak aby przy kolejnym przebiegu p\u0119tli m\u00f3g\u0142 zosta\u0107 wykonany kod skojarzony z STATE_RED. W ten w\u0142a\u015bnie spos\u00f3b dzia\u0142a funkcja switch\u2026case, pozwala ona reagowa\u0107 na r\u00f3\u017cne stany tej samej zmiennej.<\/p><p style=\"font-weight: 400\">W ostatnim warunku switch\u2026case opisana zosta\u0142a reakcja na STATE_SERVICE. Je\u015bli przycisk zostanie wci\u015bni\u0119ty, to w\u0142a\u015bnie taka warto\u015b\u0107 przypisana zostanie do zmiennej state i w\u00f3wczas \u017c\u00f3\u0142ta dioda LED zacznie mruga\u0107.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e13a35e elementor-widget elementor-widget-video\" data-id=\"e13a35e\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/swiatla2.mov\" controls=\"\" preload=\"metadata\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52889fe elementor-widget elementor-widget-text-editor\" data-id=\"52889fe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Po uruchamianiu kodu mo\u017cemy zobaczy\u0107 nasz miniaturowy sygnalizator \u015bwietlny w czasie pracy. Pierwszym stanem jest \u015bwiat\u0142o zielone, kt\u00f3re przechodzi kolejno w \u017c\u00f3\u0142te i czerwone tak jak ma to miejsce w rzeczywisto\u015bci. Gdy przytrzymamy przez moment przycisk, aktywujemy tryb sygnalizatora, w kt\u00f3rym b\u0119dzie on mruga\u0142 \u015bwiat\u0142em \u017c\u00f3\u0142tym. Wciskaj\u0105c przycisk ponownie, mo\u017cemy wr\u00f3ci\u0107 do trybu domy\u015blnego.<\/p><p style=\"font-weight: 400\">Wiem, \u017ce projekt maszyny stan\u00f3w mo\u017ce wydawa\u0107 si\u0119 nieco skomplikowany, dlatego, je\u015bli nie czujesz go w stu procentach, zach\u0119cam do ponownej analizy i w\u0142asnych eksperyment\u00f3w, mo\u017cesz zmienia\u0107 pewne warto\u015bci i stany, a nast\u0119pnie sprawdza\u0107, jak reaguje program. Pami\u0119taj, \u017ce wszystko zale\u017cne jest tak naprawd\u0119 od zmiennej state, to ona definiuje, jaki aktualnie stan ma sygnalizator i jaki b\u0119dzie kolejny. I to na jej podstawie dzia\u0142a funkcja switch\u2026case, kt\u00f3ra wysterowuje odpowiednio diody, wywo\u0142uj\u0105c polecenie set_traffic_light.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3164b73 elementor-widget elementor-widget-heading\" data-id=\"3164b73\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Kilka s\u0142\u00f3w na koniec\u2026<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2e42788 elementor-widget elementor-widget-text-editor\" data-id=\"2e42788\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">Za nami jeden ze zdecydowanie wi\u0119kszy artyku\u0142\u00f3w w tej serii. Poznali\u015bmy dzisiaj ca\u0142kiem sporo nowo\u015bci \u2013 tablice, struktury, przekazywanie danych przez wska\u017anik, a tak\u017ce uruchomili\u015bmy projekt sygnalizatora \u015bwietlnego bazuj\u0105cy na maszynie stan\u00f3w. Po dziesi\u0119ciu materia\u0142ach mamy ju\u017c solidne podstawy j\u0119zyka C, kt\u00f3re testowali\u015bmy na rzeczywistych przyk\u0142adach, dlatego w kolejnym artykule zaczniemy prawdziwe eksperymenty i pod\u0142\u0105czymy do naszego Raspberry cyfrowy czujnik \u015bwiat\u0142a.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ed65f6f elementor-widget elementor-widget-spacer\" data-id=\"ed65f6f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e12255d elementor-widget elementor-widget-text-editor\" data-id=\"e12255d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-weight: 400\">\u0179r\u00f3d\u0142a:<\/p><ul><li style=\"font-weight: 400\">https:\/\/datasheets.raspberrypi.com\/rp2040\/rp2040-datasheet.pdf<\/li><li style=\"font-weight: 400\">https:\/\/datasheets.raspberrypi.com\/picow\/pico-w-datasheet.pdf<\/li><li style=\"font-weight: 400\">https:\/\/www.raspberrypi.com\/products\/rp2040\/<\/li><li style=\"font-weight: 400\">https:\/\/www.raspberrypi.com\/documentation\/microcontrollers\/raspberry-pi-pico.html<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>W tej cz\u0119\u015bci kursu zajmiemy si\u0119 konstrukcj\u0105 zwan\u0105 struktur\u0105 oraz opowiem wam te\u017c, w jaki spos\u00f3b budowa\u0107 maszyn stan\u00f3w w j\u0119zyku C.<\/p>\n","protected":false},"author":34,"featured_media":83421,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7,21,134],"tags":[],"class_list":["post-82752","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elektronika","category-programowanie","category-raspberry-pi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kurs Raspberry Pi Pico \u2013 #10 \u2013 tablice, struktury i maszyna stan\u00f3w - Botland<\/title>\n<meta name=\"description\" content=\"W tej cz\u0119\u015bci kursu zajmiemy si\u0119 konstrukcj\u0105 zwan\u0105 struktur\u0105 oraz opowiem wam te\u017c, w jaki spos\u00f3b budowa\u0107 maszyn stan\u00f3w w j\u0119zyku C.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kurs Raspberry Pi Pico \u2013 #10 \u2013 tablice, struktury i maszyna stan\u00f3w - Botland\" \/>\n<meta property=\"og:description\" content=\"W tej cz\u0119\u015bci kursu zajmiemy si\u0119 konstrukcj\u0105 zwan\u0105 struktur\u0105 oraz opowiem wam te\u017c, w jaki spos\u00f3b budowa\u0107 maszyn stan\u00f3w w j\u0119zyku C.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/\" \/>\n<meta property=\"og:site_name\" content=\"Botland\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/Botland\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-24T12:00:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-08T08:55:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1510\" \/>\n\t<meta property=\"og:image:height\" content=\"755\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Rafa\u0142 Bartoszak\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rafa\u0142 Bartoszak\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/\"},\"author\":{\"name\":\"Rafa\u0142 Bartoszak\",\"@id\":\"https:\\\/\\\/botland.cz\\\/blog\\\/#\\\/schema\\\/person\\\/5a69e7f5db1f77c617f990e73bb83215\"},\"headline\":\"Kurs Raspberry Pi Pico \u2013 #10 \u2013 tablice, struktury i maszyna stan\u00f3w\",\"datePublished\":\"2024-06-24T12:00:57+00:00\",\"dateModified\":\"2026-04-08T08:55:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/\"},\"wordCount\":5319,\"publisher\":{\"@id\":\"https:\\\/\\\/botland.cz\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/1.png\",\"articleSection\":[\"Elektronika\",\"Programowanie\",\"Raspberry Pi\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/\",\"name\":\"Kurs Raspberry Pi Pico \u2013 #10 \u2013 tablice, struktury i maszyna stan\u00f3w - Botland\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/botland.cz\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/1.png\",\"datePublished\":\"2024-06-24T12:00:57+00:00\",\"dateModified\":\"2026-04-08T08:55:36+00:00\",\"description\":\"W tej cz\u0119\u015bci kursu zajmiemy si\u0119 konstrukcj\u0105 zwan\u0105 struktur\u0105 oraz opowiem wam te\u017c, w jaki spos\u00f3b budowa\u0107 maszyn stan\u00f3w w j\u0119zyku C.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/#primaryimage\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/1.png\",\"contentUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/1.png\",\"width\":1510,\"height\":755},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kurs Raspberry Pi&nbsp;Pico \u2013 #10 \u2013 tablice, struktury i&nbsp;maszyna stan\u00f3w\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/botland.cz\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/botland.cz\\\/blog\\\/\",\"name\":\"Botland\",\"description\":\"Blog Raspberry Pi, Arduino, elektronika i robotyka - Botland\",\"publisher\":{\"@id\":\"https:\\\/\\\/botland.cz\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/botland.cz\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/botland.cz\\\/blog\\\/#organization\",\"name\":\"Botland\",\"url\":\"https:\\\/\\\/botland.cz\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/botland.cz\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/botland.store\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/logo_kolor_WP_2-1.png\",\"contentUrl\":\"https:\\\/\\\/botland.store\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/logo_kolor_WP_2-1.png\",\"width\":250,\"height\":57,\"caption\":\"Botland\"},\"image\":{\"@id\":\"https:\\\/\\\/botland.cz\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/facebook.com\\\/Botland\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/botland.cz\\\/blog\\\/#\\\/schema\\\/person\\\/5a69e7f5db1f77c617f990e73bb83215\",\"name\":\"Rafa\u0142 Bartoszak\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/IMG_21531-300x300.jpg\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/IMG_21531-300x300.jpg\",\"contentUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/IMG_21531-300x300.jpg\",\"caption\":\"Rafa\u0142 Bartoszak\"},\"description\":\"Wsp\u00f3\u0142pracuj\u0105cy z Botlandem elektronik, kt\u00f3ry dzieli si\u0119 swoj\u0105 wiedz\u0105 w internecie. Entuzjasta system\u00f3w cyfrowych, uk\u0142ad\u00f3w programowalnych i mikroelektroniki. Pasjonat historii, ze szczeg\u00f3lnym naciskiem na wiek XX.\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/author\\\/rafal-bartoszak\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kurs Raspberry Pi Pico \u2013 #10 \u2013 tablice, struktury i maszyna stan\u00f3w - Botland","description":"W tej cz\u0119\u015bci kursu zajmiemy si\u0119 konstrukcj\u0105 zwan\u0105 struktur\u0105 oraz opowiem wam te\u017c, w jaki spos\u00f3b budowa\u0107 maszyn stan\u00f3w w j\u0119zyku C.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/","og_locale":"pl_PL","og_type":"article","og_title":"Kurs Raspberry Pi Pico \u2013 #10 \u2013 tablice, struktury i maszyna stan\u00f3w - Botland","og_description":"W tej cz\u0119\u015bci kursu zajmiemy si\u0119 konstrukcj\u0105 zwan\u0105 struktur\u0105 oraz opowiem wam te\u017c, w jaki spos\u00f3b budowa\u0107 maszyn stan\u00f3w w j\u0119zyku C.","og_url":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/","og_site_name":"Botland","article_publisher":"https:\/\/facebook.com\/Botland\/","article_published_time":"2024-06-24T12:00:57+00:00","article_modified_time":"2026-04-08T08:55:36+00:00","og_image":[{"width":1510,"height":755,"url":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/1.png","type":"image\/png"}],"author":"Rafa\u0142 Bartoszak","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Rafa\u0142 Bartoszak","Szacowany czas czytania":"29 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/#article","isPartOf":{"@id":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/"},"author":{"name":"Rafa\u0142 Bartoszak","@id":"https:\/\/botland.cz\/blog\/#\/schema\/person\/5a69e7f5db1f77c617f990e73bb83215"},"headline":"Kurs Raspberry Pi Pico \u2013 #10 \u2013 tablice, struktury i maszyna stan\u00f3w","datePublished":"2024-06-24T12:00:57+00:00","dateModified":"2026-04-08T08:55:36+00:00","mainEntityOfPage":{"@id":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/"},"wordCount":5319,"publisher":{"@id":"https:\/\/botland.cz\/blog\/#organization"},"image":{"@id":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/#primaryimage"},"thumbnailUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/1.png","articleSection":["Elektronika","Programowanie","Raspberry Pi"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/","url":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/","name":"Kurs Raspberry Pi Pico \u2013 #10 \u2013 tablice, struktury i maszyna stan\u00f3w - Botland","isPartOf":{"@id":"https:\/\/botland.cz\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/#primaryimage"},"image":{"@id":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/#primaryimage"},"thumbnailUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/1.png","datePublished":"2024-06-24T12:00:57+00:00","dateModified":"2026-04-08T08:55:36+00:00","description":"W tej cz\u0119\u015bci kursu zajmiemy si\u0119 konstrukcj\u0105 zwan\u0105 struktur\u0105 oraz opowiem wam te\u017c, w jaki spos\u00f3b budowa\u0107 maszyn stan\u00f3w w j\u0119zyku C.","breadcrumb":{"@id":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/#primaryimage","url":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/1.png","contentUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/06\/1.png","width":1510,"height":755},{"@type":"BreadcrumbList","@id":"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-10-tablice-struktury-i-maszyna-stanow\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/botland.com.pl\/blog\/"},{"@type":"ListItem","position":2,"name":"Kurs Raspberry Pi&nbsp;Pico \u2013 #10 \u2013 tablice, struktury i&nbsp;maszyna stan\u00f3w"}]},{"@type":"WebSite","@id":"https:\/\/botland.cz\/blog\/#website","url":"https:\/\/botland.cz\/blog\/","name":"Botland","description":"Blog Raspberry Pi, Arduino, elektronika i robotyka - Botland","publisher":{"@id":"https:\/\/botland.cz\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/botland.cz\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/botland.cz\/blog\/#organization","name":"Botland","url":"https:\/\/botland.cz\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/botland.cz\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/botland.store\/blog\/wp-content\/uploads\/2018\/04\/logo_kolor_WP_2-1.png","contentUrl":"https:\/\/botland.store\/blog\/wp-content\/uploads\/2018\/04\/logo_kolor_WP_2-1.png","width":250,"height":57,"caption":"Botland"},"image":{"@id":"https:\/\/botland.cz\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/Botland\/"]},{"@type":"Person","@id":"https:\/\/botland.cz\/blog\/#\/schema\/person\/5a69e7f5db1f77c617f990e73bb83215","name":"Rafa\u0142 Bartoszak","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2023\/07\/IMG_21531-300x300.jpg","url":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2023\/07\/IMG_21531-300x300.jpg","contentUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2023\/07\/IMG_21531-300x300.jpg","caption":"Rafa\u0142 Bartoszak"},"description":"Wsp\u00f3\u0142pracuj\u0105cy z Botlandem elektronik, kt\u00f3ry dzieli si\u0119 swoj\u0105 wiedz\u0105 w internecie. Entuzjasta system\u00f3w cyfrowych, uk\u0142ad\u00f3w programowalnych i mikroelektroniki. Pasjonat historii, ze szczeg\u00f3lnym naciskiem na wiek XX.","url":"https:\/\/botland.com.pl\/blog\/author\/rafal-bartoszak\/"}]}},"_links":{"self":[{"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/posts\/82752","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/users\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/comments?post=82752"}],"version-history":[{"count":0,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/posts\/82752\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/media\/83421"}],"wp:attachment":[{"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/media?parent=82752"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/categories?post=82752"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/tags?post=82752"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}