{"id":74920,"date":"2024-01-28T14:00:53","date_gmt":"2024-01-28T13:00:53","guid":{"rendered":"https:\/\/botland.com.pl\/blog\/?p=74920"},"modified":"2026-04-08T11:01:24","modified_gmt":"2026-04-08T09:01:24","slug":"raspberry-pi-pico-4-zaczynamy-programowac","status":"publish","type":"post","link":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/","title":{"rendered":"Kurs Raspberry Pi Pico &#8211; #4 \u2013 Zaczynamy programowa\u0107"},"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\"> 13<\/span> <span class=\"rt-label rt-postfix\">min.<\/span><\/span>\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"74920\" class=\"elementor elementor-74920\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-df48a81 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"df48a81\" 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-9f9db80\" data-id=\"9f9db80\" 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-8b2b2a4 elementor-widget elementor-widget-text-editor\" data-id=\"8b2b2a4\" 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;\"><a href=\"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-3-pierwszy-program\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><strong>W poprzednim materiale<\/strong><\/a> wsp\u00f3lnymi si\u0142ami przygotowali\u015bmy \u015brodowisko Visual Studio Code oraz uruchomili\u015bmy pierwszy przyk\u0142adowy program, tym samym sprawdzaj\u0105c, czy wszystko dzia\u0142a poprawnie. W tym artykule <strong>prze\u0107wiczymy przygotowanie w\u0142asnego projektu<\/strong>, a tak\u017ce opowiem wam o podstawowych zale\u017cno\u015bciach i zasadach pojawiaj\u0105cych si\u0119 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-3b2ac8d elementor-widget elementor-widget-image\" data-id=\"3b2ac8d\" 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%3DeyJpZCI6NzYxNTYsInVybCI6Imh0dHBzOlwvXC9ib3RsYW5kLmNvbS5wbFwvYmxvZ1wvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNFwvMDFcLzRHb3Rvd3ktWmVzdGF3LWRvLW5hdWtpLXByb2dyYW1vd2FuaWEtei1SYXNwYmVycnktUGktUGljby1XLmpwZyJ9\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1429\" height=\"194\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/4Gotowy-Zestaw-do-nauki-programowania-z-Raspberry-Pi-Pico-W.jpg\" class=\"attachment-full size-full 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.jpg 1429w, 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-1024x139.jpg 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/4Gotowy-Zestaw-do-nauki-programowania-z-Raspberry-Pi-Pico-W-768x104.jpg 768w\" sizes=\"(max-width: 1429px) 100vw, 1429px\" \/>\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-ce642ef elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ce642ef\" 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-724e89b\" data-id=\"724e89b\" 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-7dfbef0 elementor-widget elementor-widget-image\" data-id=\"7dfbef0\" 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%3DeyJpZCI6NzYxNjAsInVybCI6Imh0dHBzOlwvXC9ib3RsYW5kLmNvbS5wbFwvYmxvZ1wvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNFwvMDFcLzI0MTM2XzMuanBnIn0%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-57243f6\" data-id=\"57243f6\" 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-50cf5d7 elementor-widget elementor-widget-text-editor\" data-id=\"50cf5d7\" 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 nauki programowania z Raspberry Pi Pico W i skorzystaj z kursu dost\u0119pnego na Blog Botland!<\/span><\/p><p>W zestawie: modu\u0142 Raspberry Pi Pico W, p\u0142ytka stykowa, przewody, diody LED, rezystory, przyciski, fotorezystory, cyfrowe czujniki \u015bwiat\u0142a, temperatury, wilgotno\u015bci i ci\u015bnienia, wy\u015bwietlacz OLED i przew\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-2fb2866 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"2fb2866\" 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\" 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-eb9d0ce elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"eb9d0ce\" 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-4ecee73 elementor-widget elementor-widget-text-editor\" data-id=\"4ecee73\" 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>\n<ol style=\"background-color: #ffffff;\">\n<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 \u2013 #1<\/span>&nbsp;\u2013 zaczynamy<\/a>&nbsp;<\/li>\n<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 \u2013 #2<\/span>&nbsp;\u2013 s\u0142\u00f3w kilka o programowaniu<\/a><\/li>\n<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 \u2013 #3<\/span>&nbsp;\u2013 pierwszy program<\/a><\/li>\n<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 \u2013 #4<\/span> \u2013 zaczynamy programowa\u0107<\/a><\/li>\n<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 \u2013 #5<\/span> \u2013 p\u0119tle, zmienne i instrukcje warunkowe<\/a><\/li>\n<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\"><strong>Raspberry Pi Pico \u2013 #6<\/strong> \u2013 PWM, ADC i komunikacja z komputerem<\/a><\/li>\n<li><a href=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-7-poprawki-w-kodzie-i-wlasne-funkcje\/\" target=\"_blank\" rel=\"noopener\" data-wplink-edit=\"true\" data-wpel-link=\"internal\"><span style=\"font-weight: bolder;\">Raspberry Pi Pico \u2013 #7 <\/span>&nbsp;\u2013 Poprawki w kodzie i w\u0142asne funkcje&nbsp;<\/a><\/li>\n<li><a href=\"https:\/\/botland.com.pl\/blog\/kurs-raspberry-pi-pico-8-przerwania-i-alarmy\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><strong>Raspberry Pi Pico \u2013 #8<\/strong> \u2013 Przerwania i alarmy<\/a><\/li>\n<li><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>&nbsp;\u2013 Teoria wska\u017anik\u00f3w i timery<\/a><\/li>\n<li><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>&nbsp;\u2013 Tablice, struktury i maszyna stan\u00f3w<\/a><\/li>\n<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>&nbsp;&#8211; Uruchomienie cyfrowego czujnika \u015bwiat\u0142a, czyli I2C<\/a><\/li>\n<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>\n<\/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-0b1da80 elementor-widget elementor-widget-spacer\" data-id=\"0b1da80\" 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-9c1d2a1 elementor-widget elementor-widget-heading\" data-id=\"9c1d2a1\" 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-9542c46 elementor-widget elementor-widget-image\" data-id=\"9542c46\" 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%3DeyJpZCI6NzQ3OTcsInVybCI6Imh0dHBzOlwvXC9ib3RsYW5kLmNvbS5wbFwvYmxvZ1wvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNFwvMDFcL0lNR18wNjQ3LXNjYWxlZC5qcGcifQ%3D%3D\" 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-1087493 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"1087493\" 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\" 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-d198105 elementor-widget elementor-widget-text-editor\" data-id=\"d198105\" 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.<\/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-c87dd06 elementor-widget elementor-widget-text-editor\" data-id=\"c87dd06\" 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-34cfc5b elementor-widget elementor-widget-spacer\" data-id=\"34cfc5b\" 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-a6b797e elementor-widget elementor-widget-heading\" data-id=\"a6b797e\" 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\">Ca\u0142kiem nowy blink LED, tworzenie projektu<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c1792a elementor-widget elementor-widget-image\" data-id=\"6c1792a\" 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\/obwod_blink_rozbudowany-scaled.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"obwod_blink_rozbudowany\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6Ijc0OTIyIiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wMVwvb2J3b2RfYmxpbmtfcm96YnVkb3dhbnktc2NhbGVkLmpwZyJ9\" 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\/01\/obwod_blink_rozbudowany-1024x576.jpg\" class=\"attachment-large size-large wp-image-74922\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/obwod_blink_rozbudowany-1024x576.jpg 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/obwod_blink_rozbudowany-300x169.jpg 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/obwod_blink_rozbudowany-768x432.jpg 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/obwod_blink_rozbudowany-1536x864.jpg 1536w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/obwod_blink_rozbudowany-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 blink, rozbudowany o kolejne diody LED.<\/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-6988527 elementor-widget elementor-widget-text-editor\" data-id=\"6988527\" 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;\">Poprzednio uruchomiony kod pochodzi\u0142 z do\u0142\u0105czonego przez Raspberry Pi Fundation przyk\u0142adu nazwanego po prostu <strong>blink<\/strong>. Program ten synchronicznie w\u0142\u0105cza\u0142\u00a0i wy\u0142\u0105cza\u0142\u00a0diod\u0119 LED pod\u0142\u0105czon\u0105 do <a href=\"https:\/\/botland.com.pl\/moduly-i-zestawy-do-raspberry-pi-pico\/21574-raspberry-pi-pico-w-rp2040-arm-cortex-m0-cyw43439-wifi-5056561803173.html\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><strong>Raspberry Pi Pico W<\/strong><\/a>. Projekty typu blink s\u0105 bardzo cz\u0119sto spotykane we wszelkich poradnikach programistycznych opartych na niewielkich platformach sprz\u0119towych. Dlatego ja r\u00f3wnie\u017c poka\u017ce wam jak w\u0142asnor\u0119cznie napisa\u0107 tego typu program, ale w nieco bardziej rozbudowanej ods\u0142onie, bo wykorzystamy tutaj nieco wi\u0119ksz\u0105 ilo\u015b\u0107 \u015bwiec\u0105cych diod. Na pocz\u0105tek przygotujmy jednak potrzebny sprz\u0119t. Do RPI Pico W pod\u0142\u0105czona by\u0142a do tej pory tylko <strong>jedna, <a href=\"https:\/\/botland.com.pl\/diody-led\/19994-dioda-led-5mm-zielona-10szt-justpi-5904422328825.html\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">zielona dioda LED<\/a><\/strong> po\u0142\u0105czona z wyprowadzeniem <strong>GP0<\/strong>. Kolejne dwie diody nale\u017cy pod\u0142\u0105czy\u0107 do nast\u0119pnych w kolejno\u015bci pin\u00f3w, czyli <strong>GP1 i GP2<\/strong>, kt\u00f3re znajduj\u0105 si\u0119 tu\u017c obok. Nie zapomnijcie te\u017c o <a href=\"https:\/\/botland.com.pl\/50-rezystory-oporniki\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\"><strong>rezystorach<\/strong><\/a>, kt\u00f3rych warto\u015b\u0107 wynosi 330 \u03a9. Jak mo\u017cecie zauwa\u017cy\u0107 na fotografii powy\u017cej, zmieni\u0142em nieco u\u0142o\u017cenie pierwszej diody, tak aby katody wszystkich \u015bwiec\u0105cych element\u00f3w po\u0142\u0105czone by\u0142y magistral\u0105 oznaczon\u0105 <strong>niebieskim kolorem (-).<\/strong><\/p>\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-1e96748 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1e96748\" 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-53e9dfe\" data-id=\"53e9dfe\" 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-50d572d elementor-widget elementor-widget-text-editor\" data-id=\"50d572d\" 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;\">Gdy obw\u00f3d do przysz\u0142ych eksperyment\u00f3w jest ju\u017c gotowy, mo\u017cemy wr\u00f3ci\u0107 do VSC i spr\u00f3bowa\u0107 przygotowa\u0107 <strong>w\u0142asny projekt<\/strong>, kt\u00f3rego zadaniem b\u0119dzie sterowanie trzema diodami LED. Jednak zanim do tego przejdziemy, wyja\u015bni\u0107 trzeba kilka kwestii organizacyjnych.<\/p><p style=\"font-weight: 400;\">Domy\u015blnie pod Visual Studio Code podpi\u0119ty jest folder <strong>pico-examples<\/strong>, zawieraj\u0105cy przyk\u0142ady udost\u0119pnione przez Raspberry Pi Fundation. Je\u015bli chcemy przygotowywa\u0107 w\u0142asne projekty, warto by\u0142oby przygotowa\u0107 osobne miejsce na dysku lub skorzysta\u0107, ze wspomnianego folderu z przyk\u0142adami. Nic nie stoi na przeszkodzie, aby w\u0142a\u015bnie tam umieszcza\u0107 nasze przysz\u0142e projekty. Poza tym pico-examples to miejsce, do kt\u00f3rego po prostu warto zagl\u0105da\u0107, przyk\u0142adowych program\u00f3w jest tu naprawd\u0119 wiele i przygotowuj\u0105c w\u0142asne kody, mo\u017cna posi\u0142kowa\u0107 si\u0119 umieszczonymi tam informacjami.<\/p><p style=\"font-weight: 400;\">Struktur\u0119 folderu pico-examples zobaczy\u0107 mo\u017cecie na obrazku obok, ale te\u017c na ekranie w\u0142asnych komputer\u00f3w. Plik\u00f3w i folder\u00f3w wewn\u0105trz jest ca\u0142kiem sporo i ka\u017cdy z nich pe\u0142ni inn\u0105 funkcj\u0119. Na pocz\u0105tek przyjrzyjmy si\u0119 wyj\u0105tkom, kt\u00f3re nie s\u0105 projektami. \u00a0Foldery takie jak: <strong>.github, .vscode, i cmake<\/strong> zwi\u0105zane s\u0105 z organizacj\u0105 ca\u0142ej przestrzeni. Pierwszy z nich wynika z faktu, \u017ce ca\u0142o\u015b\u0107 pobrana zosta\u0142a zdalnie z serwisu GitHub, .vscode zwi\u0105zany jest ze \u015brodowiskiem Visual Studio Code, kt\u00f3re przechowuje tam istotne dla siebie informacje, natomiast w cmake umieszczono pliki zwi\u0105zane z procesem kompilacji.\u00a0<\/p><p style=\"font-weight: 400;\">W pico-examples znalaz\u0142o si\u0119 te\u017c kilka osobnych plik\u00f3w, z kt\u00f3rych wi\u0119kszo\u015b\u0107 nie b\u0119dzie dla nas interesuj\u0105ca, poniewa\u017c zawiera informacje o konfiguracji folderu czy te\u017c licencji. Na ten moment jedynym plikiem, kt\u00f3remu po\u015bwi\u0119cimy nico wi\u0119cej uwagi, b\u0119dzie <strong>CMakeLists.txt.<\/strong> W jego wn\u0119trzu znajduje si\u0119 lista projekt\u00f3w umieszczonych w pico-examples, kt\u00f3r\u0105 b\u0119dziemy stopniowo rozbudowywa\u0107, dodaj\u0105c do niej w\u0142asne konstrukcje. Skoro o projektach mowa, to jest ich ca\u0142kiem sporo, umieszczono je w osobnych folderach, z kt\u00f3rych niekt\u00f3re kryj\u0105 kolejne foldery. Dla przyk\u0142adu we wn\u0119trzu adc znalaz\u0142o si\u0119 a\u017c siedem projekt\u00f3w zwi\u0105zanych z tym typem funkcjonalno\u015bci. Ostatnim folderem, na kt\u00f3ry musimy zwr\u00f3ci\u0107 uwag\u0119 jest <strong>build<\/strong>, skorzystali\u015bmy ju\u017c z niego w poprzednim artykule, kopiuj\u0105c plik .uf2. To w\u0142a\u015bnie tam znajduj\u0105 si\u0119 wszystkie wynikowe pliki kompilacji, zlokalizowane w konkretnych folderach, zgodnych nazw\u0105 z okre\u015bleniem projektu.<\/p>\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-bca3c9f\" data-id=\"bca3c9f\" 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-42a1456 elementor-widget elementor-widget-image\" data-id=\"42a1456\" 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\/struk_pico_examples.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"struk_pico_examples\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6Ijc0OTI2IiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wMVwvc3RydWtfcGljb19leGFtcGxlcy5wbmcifQ%3D%3D\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"336\" height=\"983\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/struk_pico_examples.png\" class=\"attachment-large size-large wp-image-74926\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/struk_pico_examples.png 336w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/struk_pico_examples-103x300.png 103w\" sizes=\"(max-width: 336px) 100vw, 336px\" \/>\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\">Struktura folderu pico-examples.<\/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\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-1937953 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1937953\" 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-557f021\" data-id=\"557f021\" 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-52e057d elementor-widget elementor-widget-image\" data-id=\"52e057d\" 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\/expanded_blink_folder.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"expanded_blink_folder\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6Ijc0OTMwIiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wMVwvZXhwYW5kZWRfYmxpbmtfZm9sZGVyLnBuZyJ9\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"333\" height=\"982\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/expanded_blink_folder.png\" class=\"attachment-large size-large wp-image-74930\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/expanded_blink_folder.png 333w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/expanded_blink_folder-102x300.png 102w\" sizes=\"(max-width: 333px) 100vw, 333px\" \/>\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\">pico-examples po utworzeniu foldery extended_blink.<\/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\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-545b590\" data-id=\"545b590\" 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-b44197b elementor-widget elementor-widget-text-editor\" data-id=\"b44197b\" 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;\">Czas przej\u015b\u0107 do stworzenia w VSC naszego pierwszego projektu. B\u0119dzie to <strong>rozbudowana wersja klasycznego blinka<\/strong> <strong>operuj\u0105ca na trzech diodach LED<\/strong>. Na pocz\u0105tek trzeba oczywi\u015bcie wymy\u015bli\u0107 nazw\u0119 projektu, kt\u00f3ra b\u0119dzie te\u017c nazw\u0105 folderu, w kt\u00f3rym umieszczone b\u0119d\u0105 nasze pliki. Musicie wiedzie\u0107, \u017ce nazewnictwo r\u00f3wnie\u017c opiera si\u0119 na pewnych zasadach. Nazwy projekt\u00f3w powinny by\u0107 <strong>proste<\/strong>, najlepiej jest korzysta\u0107 z okre\u015ble\u0144<strong> w j\u0119zyku angielskim<\/strong>, nie wolno korzysta\u0107 z polskich znak\u00f3w oraz znak\u00f3w specjalnych. Projekt rozbudowanego migania diod\u0105 mo\u017cna nazwa\u0107 po prostu jako <strong>expanded blink<\/strong>, ale co wa\u017cne sam styl zapisu r\u00f3wnie\u017c ma pewne znaczenie i dobrze oddaje je tekst poni\u017cej, kt\u00f3ry zobaczy\u0142em kiedy\u015b na pewnym forum.<\/p><p style=\"font-weight: 400;\">IfYouLikeReadingStuffLikeThisThenUseCamelCase.<\/p><p style=\"font-weight: 400;\">if_you_like_reading_stuff_like_this_then_use_snake_case.<\/p><p style=\"font-weight: 400;\">Tak wi\u0119c nasz projekt zapisa\u0107 mo\u017cemy jako ExpandedBlink lub expanded_blink. Kt\u00f3r\u0105 z wersji wybierzecie, zale\u017cy od was, ja zdecydowa\u0142em si\u0119 na expanded_blink, ze wzgl\u0119du na to, \u017ce w pico-examples projekty zapisywane s\u0105 zgodnie z t\u0105 konwencj\u0105.<\/p><p style=\"font-weight: 400;\">Ka\u017cdy spos\u00f3b zapisu jest dobry, na obrazie powy\u017cej zauwa\u017cy\u0107 mo\u017cecie te\u017c folder TestCode, kt\u00f3ry jak sama nazwa wskazuje, by\u0142 form\u0105 testu, przed pisaniem artyku\u0142\u00f3w i jak wida\u0107, odruchowo nazwa\u0142em go zgodnie z CamelCase.<\/p><p style=\"font-weight: 400;\">Naje\u017cd\u017caj\u0105c na obszar Explorera, zauwa\u017cy\u0107 mo\u017cna pojawiaj\u0105ce si\u0119 przy pico-examplec piktogramy umo\u017cliwiaj\u0105ce tworzenie nowych plik\u00f3w i folder\u00f3w. Tym sposobem nale\u017cy wygenerowa\u0107 folder expanded_blink i w jego wn\u0119trzu doda\u0107 dwa pliki: expanded_blink.c oraz CMakeLists.txt. W pierwszym z nich pisa\u0107 b\u0119dziemy kod w j\u0119zyku C, natomiast plik tekstowy zawiera\u0107 b\u0119dzie informacje odnosz\u0105ce si\u0119 do procesu kompilacji. Je\u015bli w waszym przypadku, oba pliki po utworzeniu zaznaczone b\u0119d\u0105 na czerwono, to nie ma si\u0119 czego obawia\u0107. Na ten moment dokonali\u015bmy brutalnej ingerencji w struktur\u0119 folderu pico-examples i, aby nada\u0107 prawn\u0105 moc zmian\u0105 nale\u017cy nieco zmodyfikowa\u0107 plik CMakeLists.txt odnosz\u0105cy si\u0119 do ca\u0142ego pico-examples. Znajdziecie go w dolnej cz\u0119\u015bci widoku eksploratora plik\u00f3w.<\/p>\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-7bda6b9 elementor-widget elementor-widget-image\" data-id=\"7bda6b9\" 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\/cmakelists_add_project.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"cmakelists_add_project\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6Ijc0OTM0IiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wMVwvY21ha2VsaXN0c19hZGRfcHJvamVjdC5wbmcifQ%3D%3D\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"398\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/cmakelists_add_project.png\" class=\"attachment-large size-large wp-image-74934\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/cmakelists_add_project.png 994w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/cmakelists_add_project-300x150.png 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/cmakelists_add_project-768x382.png 768w\" 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\">Zawarto\u015b\u0107 CMakeLists.txt dla pico-examples.<\/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-7d3d6c8 elementor-widget elementor-widget-text-editor\" data-id=\"7d3d6c8\" 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\">Aby nasz nowy folder, a tym samym projekt expended_blink, zosta\u0142 zaakceptowany, musimy doda\u0107 go w pliku CMakeLists.txt. Na jego ko\u0144cu mo\u017cecie zobaczy\u0107 list\u0119, na kt\u00f3rej w nawiasach wypisane zosta\u0142y nazwy wszystkie przyk\u0142adowych projekt\u00f3w. Na jej ko\u0144cu dodajemy:<\/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-fda6b5f elementor-widget elementor-widget-code-highlight\" data-id=\"fda6b5f\" 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 \">\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>add_ subdirectory(expanded_blink)<\/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-a69f4f4 elementor-widget elementor-widget-text-editor\" data-id=\"a69f4f4\" 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 modyfikacji plik mo\u017cemy zapisa\u0107, po chwili folder pico-examples zostanie prze\u0142adowany, a dodane chwil\u0119 wcze\u015bniej pliki za\u015bwiec\u0105 si\u0119 na zielono. Oznacza to, \u017ce uda\u0142o nam si\u0119 doda\u0107 do pico-examples nowy projekt. Oczywi\u015bcie na ten moment jest on pusty, ale ju\u017c za chwil\u0119 si\u0119 to zmieni.<\/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-46db236 elementor-widget elementor-widget-heading\" data-id=\"46db236\" 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\">Przygotowanie kodu programu<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fb98075 elementor-widget elementor-widget-text-editor\" data-id=\"fb98075\" 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 sterowa\u0107 b\u0119dzie naszymi \u015bwiec\u0105cymi elementami, zaczynamy od pustego skryptu. Jak ju\u017c wcze\u015bniej wspomina\u0142em, ka\u017cdy realizowany przez mikrokontroler, procesor czy dowoln\u0105 inn\u0105 maszyn\u0119 cyfrow\u0105 program sk\u0142ada si\u0119 z zapisanych kolejno instrukcji. Programista tworzy kod, kt\u00f3ry wykonywany jest krok po kroku, czy w takim razie pisa\u0107 b\u0119dziemy po prostu kod instrukcja po instrukcji, nie do ko\u0144ca. By\u0142oby tak, gdyby\u015bmy chcieli napisa\u0107 program w kodzie maszynowy, by\u0142oby to jednak niezwykle skomplikowane. Pod tym wzgl\u0119dem j\u0119zyk C jest prostszy i bardziej intuicyjny, innymi s\u0142owy przystosowany jest bardziej dla cz\u0142owieka ni\u017c maszyny.<\/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-646e2e1 elementor-widget elementor-widget-code-highlight\" data-id=\"646e2e1\" 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 \">\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>\/\/comment\r\n\/\/program area before main function\r\n\r\nint main(){\r\n    \/*lengthy comment,\r\n    here we will place\r\n    single commands*\/\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-31a0bed elementor-widget elementor-widget-text-editor\" data-id=\"31a0bed\" 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;\">Obszar programu mo\u017cemy na pocz\u0105tek podzieli\u0107 <strong>na dwie cz\u0119\u015bci<\/strong>, to co znajduje si\u0119 ponad funkcj\u0105 main oraz to, co umieszczono w jej wn\u0119trzu. Na pocz\u0105tek zajmijmy si\u0119 t\u0105 drug\u0105, w j\u0119zyku C wszystkie instrukcje, kt\u00f3re chcemy wykona\u0107 umieszczane s\u0105 w <strong>funkcji main<\/strong>. Funkcja to nic innego jak swego rodzaju <strong>polecenie<\/strong>, kt\u00f3re podczas kompilacji przekszta\u0142cane jest w zbi\u00f3r rozkaz\u00f3w maszynowych, przyjmuj\u0105cych postaci zer i jedynek zapisanych w pami\u0119ci. Funkcje mog\u0105 mie\u0107 posta\u0107 <strong>pojedynczego polecenia<\/strong> lub te\u017c<strong> zbioru polece\u0144<\/strong>. Warto wiedzie\u0107 te\u017c, \u017ce funkcje mo\u017cemy napisa\u0107 <strong>samodzielnie<\/strong>, do\u015b\u0107 \u0142atwo jest wyobrazi\u0107 sobie skrypt, kt\u00f3ry co jaki\u015b czas niezale\u017cnie od czynnik\u00f3w zewn\u0119trznych realizuje to samo zadanie. Zamiast pisa\u0107 niezwykle rozbudowany kod, mo\u017cna pewne sta\u0142e elementy programu zamkn\u0105\u0107 w ramy funkcji, kt\u00f3ra wywo\u0142ywana jest co jaki\u015b czas, na zasadzie wskazania \u201eteraz wykonaj ten fragment kodu i wr\u00f3\u0107 do g\u0142\u00f3wnego zadania\u201d. Funkcja main jest w\u0142a\u015bnie czym\u015b takim, jest g\u0142\u00f3wn\u0105 funkcj\u0105 programu, wewn\u0105trz, kt\u00f3rej umieszcza\u0107 b\u0119dziemy inne polecenia.<\/p><p style=\"font-weight: 400;\">Przed s\u0142owem kluczowym <strong>main<\/strong> umieszczone zosta\u0142o tajemnicze<strong> int<\/strong>, jest to jeden z podstawowych typ\u00f3w danych w j\u0119zyku C, a jego umieszczenie wynika z faktu, \u017ce funkcje mog\u0105 otrzymywa\u0107, a tak\u017ce zwraca\u0107 pewne dane. Dla przyk\u0142adu, je\u015bli napisaliby\u015bmy funkcj\u0119 realizuj\u0105c\u0105 dodawanie dw\u00f3ch liczb, to musia\u0142aby ona przyjmowa\u0107 pewne argumenty, wykonywa\u0107 matematyczn\u0105 operacj\u0119, a nast\u0119pnie zwraca\u0107 wynik. int jest w\u0142a\u015bnie informacj\u0105, jakiego typu dane zwraca funkcja main. Tym jakie s\u0105 to dane, nie b\u0119dziemy si\u0119 jednak teraz zajmowa\u0107, ale w przysz\u0142o\u015bci wr\u00f3cimy do tematu.<\/p><p style=\"font-weight: 400;\">Przy funkcji main znalaz\u0142 si\u0119 te\u017c <strong>nawias<\/strong>, w jego wn\u0119trzu umieszczane s\u0105 dane, kt\u00f3re funkcja mo\u017ce przyj\u0105\u0107. Mog\u0142yby to by\u0107 wspomniane wy\u017cej argumenty dla operacji dodawania. W tym przypadku jednak main nie przyjmuje \u017cadnych danych, dlatego nawias jest pusty.<\/p><p style=\"font-weight: 400;\">Poza zwyczajnym nawiasem zauwa\u017cy\u0107 mo\u017cna te\u017c <strong>nawias klamrowy<\/strong>. W jego obr\u0119bie umieszczane b\u0119d\u0105 kolejne polecenia, kt\u00f3re wykona\u0107 ma procesor. W powy\u017cszym przyk\u0142adzie umieszczany zosta\u0142 tam komentarz. W j\u0119zyku C do jego dodania s\u0142u\u017cy operator \u201e\/\/\u201d, wszystko, co zostanie dalej napisane, jest ignorowane przez kompilator. Je\u015bli chcieliby\u015bcie doda\u0107 wi\u0119kszy komentarz, rozci\u0105gni\u0119ty na kilka linijek mo\u017cna to zrobi\u0107 dzi\u0119ki konstrukcji \u201e\/* lengthy comment *\/\u201d. Komentarze w kodzie pe\u0142ni\u0105 rol\u0119 informacji dla czytaj\u0105cego kod programisty, warto je dodawa\u0107, nawet do najprostszych program\u00f3w. Dobr\u0105 praktyk\u0105, kt\u00f3r\u0105 warto jest stosowa\u0107, jest <strong>komentowanie kodu w j\u0119zyku angielskim<\/strong> &#8211; nigdy nie wiemy, kto akurat b\u0119dzie przygl\u0105da\u0107 si\u0119 naszym programom. Warto zwr\u00f3ci\u0107 te\u017c uwag\u0119 na spos\u00f3b formatowania kodu. Jak widzicie, d\u0142ugi komentarz jest lekko przesuni\u0119ty, a dok\u0142adniej na pocz\u0105tku ka\u017cdej linii wstawiony jest znak tab. Zabieg taki ma za zadanie u\u0142atwi\u0107 czytanie kodu, dla kompilatora dodatkowe wci\u0119cia nie maj\u0105 \u017cadnego znaczenia. Umown\u0105 zasad\u0105 jest stosowanie dodatkowego tabulatora w sytuacjach, gdy instrukcje umieszczone s\u0105 wewn\u0105trz funkcji, instrukcji warunkowych, p\u0119tli i innych specyficznych konstrukcji w kodzie. Jest to do\u015b\u0107 intuicyjne i z czasem na pewno wejdzie wam w nawyk. Poza tym pisz\u0105c kod w VSC, program b\u0119dzie automatycznie dodawa\u0107 znak tab do nowej linii, zgodnie z wcze\u015bniej napisanym poleceniem.<\/p><p style=\"font-weight: 400;\">Jak wspomnia\u0142em, ponad funkcj\u0105 main r\u00f3wnie\u017c znajduje si\u0119 obszar programu, jest to specyficzne miejsce, w kt\u00f3rym umieszcza\u0107 b\u0119dziemy konkretne konstrukcje takie jak sta\u0142e, definicja, deklaracje czy dyrektywy. Poznamy je z czasem, na praktycznych przyk\u0142adach.<\/p><p style=\"font-weight: 400;\">Gdy wiecie ju\u017c jak pokr\u00f3tce wygl\u0105da konstrukcja programu w j\u0119zyku C, <strong>mo\u017cemy przej\u015b\u0107 do jego napisania<\/strong>. Jednak, aby by\u0142o to mo\u017cliwe, musimy okre\u015bli\u0107 co konkretnie robi\u0107 ma nasz program. B\u0119dzie to rozbudowana wersja skryptu migaj\u0105cego diod\u0105 LED, tak\u017ce mo\u017cemy przygotowa\u0107 program, kt\u00f3ry b\u0119dzie uruchamia\u0107 kolejne diody, co okre\u015blony okres, gasz\u0105c jednocze\u015bnie poprzedni\u0105. Co\u015b na zasadzie w\u0142\u0105czenie zielonej diody, odczekanie p\u00f3\u0142 sekundy, w\u0142\u0105czenie \u017c\u00f3\u0142tej i wy\u0142\u0105czenie zielonej, odczekanie p\u00f3\u0142 sekundy, w\u0142\u0105czenie czerwonej i wy\u0142\u0105czenie \u017c\u00f3\u0142tej i tak dalej.<\/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-3595884 elementor-widget elementor-widget-code-highlight\" data-id=\"3595884\" 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 \">\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\nint main() {\r\n    gpio_init(0); \/\/initialization of GP0, GP1 and GP2 pins\r\n    gpio_init(1);\r\n    gpio_init(2);\r\n\r\n    gpio_set_dir(0, GPIO_OUT); \/\/setting GP0, GP1 and GP2 as outputs\r\n    gpio_set_dir(1, GPIO_OUT);\r\n    gpio_set_dir(2, GPIO_OUT);\r\n\r\n    gpio_put(0, 1); \/\/set state 1 on pin 0\r\n    sleep_ms(500); \/\/wait 500ms\r\n    gpio_put(0, 0); \/\/set state 0 on pin 0\r\n    gpio_put(1, 1); \/\/set state 1 on pin 1\r\n    sleep_ms(500);\r\n    gpio_put(1, 0);\r\n    gpio_put(2, 1);\r\n    sleep_ms(500);\r\n    gpio_put(2, 0);\r\n    sleep_ms(500);\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-281c2f3 elementor-widget elementor-widget-text-editor\" data-id=\"281c2f3\" 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;\">Pierwszym programem, kt\u00f3ry uruchomimy, b\u0119dzie ten, kt\u00f3rego kod mo\u017cecie zobaczy\u0107 powy\u017cej. Na razie mo\u017ce on wygl\u0105da\u0107 nieco tajemniczo, ale ju\u017c za moment, gdy wyt\u0142umacz\u0119 wam jego struktur\u0119, wszystko stanie si\u0119 jasne. Ca\u0142o\u015b\u0107 sk\u0142ada si\u0119 tak naprawd\u0119 z czterech typ\u00f3w polece\u0144, powt\u00f3rzonych kilkukrotnie z r\u00f3\u017cnymi parametrami. Analiz\u0119 zacznijmy od istoty kodu, czyli instrukcji umieszczonych we wn\u0119trzu g\u0142\u00f3wnej funkcji.<\/p><p style=\"font-weight: 400;\">Pierwsze trzy instrukcje to <strong>gpio_init<\/strong>, przygl\u0105daj\u0105c si\u0119 im, do\u015b\u0107 \u0142atwo jest zrozumie\u0107 ich znaczenie &#8211; <strong>init<\/strong> to skr\u00f3t od <strong>initialization<\/strong>, natomiast <strong>gpio<\/strong> oznacza <strong>general purpose input\/output<\/strong>. Tak wi\u0119c gpio_init to nic innego jak polecenie inicjalizacji portu input\/output (I\/O), dzi\u0119ki kt\u00f3remu mikrokontroler przygotuje do dzia\u0142ania konkretne wyprowadzenia zewn\u0119trzne. O tym, kt\u00f3re b\u0119d\u0105 to wyprowadzenia, decyduje cyfra umieszczona wewn\u0105trz nawiasu. 0, 1, 2 to porty GP0, GP1 i GP2, do kt\u00f3rych pod\u0142\u0105czyli\u015bmy wcze\u015bniej diody LED. Warto by\u0142oby te\u017c wskaza\u0107 w jakim trybie b\u0119dziemy z tych port\u00f3w korzysta\u0107, aktualnie RP2040 wie tylko, \u017ce chcemy u\u017cy\u0107 trzech pin\u00f3w, jednak ich przeznaczenie pozostaje tajemnic\u0105. Aby to zmieni\u0107, nale\u017cy skorzysta\u0107 z gpio_set_dir, tego typu polecenie r\u00f3wnie\u017c do\u015b\u0107 \u0142atwo rozwin\u0105\u0107. Znaczenie gpio ju\u017c znacie, set to po prostu set, natomiast dir jest skr\u00f3tem od direction. U\u017cywane w projekcie piny b\u0119d\u0105 sterowa\u0107 diodami \u015bwiec\u0105cymi, dlatego nale\u017cy skonfigurowa\u0107 je jako wyj\u015bcia, innymi s\u0142owy uk\u0142ad b\u0119dzie sterowa\u0107 tymi wyprowadzeniami, ustawiaj\u0105c na nich odpowiedni stan logiczny. Aby ustawi\u0107 GP0, GP1 oraz GP2 jako wyj\u015bcia nale\u017cy w parametrach funkcji gpio_set_dir poda\u0107 informacj\u0119 o numerze wyprowadzenia: 0, 1, 2 oraz s\u0142owo kluczowe GPIO_OUT. Zauwa\u017ccie, \u017ce wszystkie do tej pory om\u00f3wione polecenia zako\u0144czone s\u0105 <strong>\u015brednikiem<\/strong>, taki zabieg jest celowy, poniewa\u017c informuje on kompilator, \u017ce w\u0142a\u015bnie w tym miejscu ko\u0144czy si\u0119 konkretne polecenie.<\/p><p style=\"font-weight: 400;\">Gdy wyprowadzenia s\u0105 ju\u017c skonfigurowane, mo\u017cemy zacz\u0105\u0107 nimi sterowa\u0107. Do tego celu wykorzystamy <strong>gpio_put<\/strong>, dzi\u0119ki kt\u00f3remu mo\u017cliwe jest ustawianie na wyj\u015bciu stanu zero lub jeden. Ten podawany jest wewn\u0105trz nawiasu, jak drugi parametr opisany cyfr\u0105 0 lub 1. Pierwsza cyfra w nawiasie to numer wyprowadzenia, tak wi\u0119c gpio_put(0, 1); opisa\u0107 mo\u017cemy jako ustaw stan jeden na pinie zerowym.<\/p><p style=\"font-weight: 400;\">Ostatnim wykorzystanym w programie poleceniem jest sleep_ms, znaczenie tej funkcji r\u00f3wnie\u017c jest do\u015b\u0107 przewidywalne. Powoduje ona po prostu wstrzymanie pracy mikrokontrolera na okre\u015blony czas, w tym przypadku milisekundy, kt\u00f3rych warto\u015b\u0107 umieszczona jest w nawiasie. Cyfra 500 oznacza 500ms, czyli oczekiwane przez nas p\u00f3\u0142 sekundy.<\/p><p style=\"font-weight: 400;\">Programy w j\u0119zyku C wykonywane s\u0105 krok po kroku, instrukcja po instrukcji. Zauwa\u017ccie na pocz\u0105tku uruchamiamy diod\u0119 pod\u0142\u0105czon\u0105 do GP0, nast\u0119pnie odczekujemy 500ms i w nast\u0119pnych krokach wy\u0142\u0105czamy diod\u0119, kt\u00f3ra \u015bwieci\u0142a p\u00f3\u0142 sekundy, w\u0142\u0105czaj\u0105c w tym samym momencie kolejny element \u015bwiec\u0105cy. Nast\u0119pnie po raz drugi odczekujemy 500ms, a cykl w\u0142\u0105czenia i wy\u0142\u0105czenia diod LED powtarza si\u0119, z t\u0105 r\u00f3\u017cnicom, \u017ce teraz sterujemy pinem GP1 i GP2. W ten spos\u00f3b mo\u017cemy analizowa\u0107 programy, rozk\u0142adaj\u0105c kod na kolejne realizowane przez mikrokontroler kroki.<\/p><p style=\"font-weight: 400;\">Na pocz\u0105tku programu zobaczy\u0107 mo\u017cecie te\u017c tajemnicz\u0105 linijk\u0119 #include &#8220;pico\/stdlib.h&#8221;. Jak ju\u017c wspomina\u0142em, ponad g\u0142\u00f3wn\u0105 funkcj\u0105 programu umieszcza\u0107 b\u0119dziemy konkretne konstrukcje, takie jak do\u0142\u0105czenia, w kodzie mo\u017cecie zobaczy\u0107 w\u0142a\u015bnie co\u015b takiego. Jest to bardziej informacja dla kompilatora, ani\u017celi cz\u0119\u015b\u0107 realizowanego przez chip programu. Dzi\u0119ki do\u0142\u0105czonej w kodzie bibliotece, mo\u017cemy korzysta\u0107 ze specyficznych funkcji i parametr\u00f3w przygotowanych przez Raspberry Pi Fundation. Dla przyk\u0142adu, gdy usuniemy do\u0142\u0105czenie biblioteki stdlib, VSC zg\u0142osi nam b\u0142\u0105d, informuj\u0105cy, \u017ce co\u015b takiego jak GPIO_OUT jest mu nieznane. To w\u0142a\u015bnie dzi\u0119ki zewn\u0119trznej bibliotece mogli\u015bmy zadeklarowa\u0107 port wyj\u015bciowy w\u0142a\u015bnie w ten spos\u00f3b. Wyja\u015bnienia wymaga te\u017c sam zapis tej dyrektywy, na pocz\u0105tku mamy s\u0142owo kluczowe #include, nast\u0119pnie w podw\u00f3jnym cudzys\u0142owie umieszczona jest \u015bcie\u017cka do tak zwanego pliku nag\u0142\u00f3wkowego (rozszerzenie .h), w kt\u00f3rym zapisane s\u0105 prototypy funkcji, kt\u00f3re mog\u0105 by\u0107 wykorzystywane w kodzie, oczywi\u015bcie, je\u015bli na jego pocz\u0105tku znalaz\u0142o si\u0119 odpowiednie do\u0142\u0105czenie. Zewn\u0119trznych bibliotek, jest ca\u0142kiem sporo i w kolejnych przyk\u0142adach b\u0119dziemy z nich korzysta\u0107 praktycznie zawsze, a poza tym w przysz\u0142o\u015bci przygotujemy r\u00f3wnie\u017c w\u0142asn\u0105 bibliotek\u0119.<\/p><p style=\"font-weight: 400;\">W ten oto spos\u00f3b nasz pierwszy kod jest gotowy, ale ju\u017c teraz zdradz\u0119, \u017ce nie jest to jego ostateczna forma i w dalszej cz\u0119\u015bci artyku\u0142u wprowadzimy w nim pewn\u0105 modyfikacj\u0119. Kod mo\u017cecie oczywi\u015bcie skopiowa\u0107, ale polecam przepisa\u0107 go samodzielnie. W ten spos\u00f3b zdobyta wiedza przyswoi si\u0119 znacznie lepiej.<\/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-82cdf28 elementor-widget elementor-widget-heading\" data-id=\"82cdf28\" 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\">Uzupe\u0142nienie pliku CMakeLists<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7bcc6a5 elementor-widget elementor-widget-code-highlight\" data-id=\"7bcc6a5\" 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 \">\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>add_executable(expanded_blink\r\n        expanded_blink.c\r\n        )\r\n\r\n# pull in common dependencies\r\ntarget_link_libraries(expanded_blink pico_stdlib)\r\n\r\n# create map\/bin\/hex file etc.\r\npico_add_extra_outputs(expanded_blink)\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-7c1efe8 elementor-widget elementor-widget-text-editor\" data-id=\"7c1efe8\" 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;\">Jedynym elementem, kt\u00f3ry uniemo\u017cliwia nam jeszcze uruchomienie projektu rozbudowanego blinka, jest plik <strong>CMakeLists.txt<\/strong> i jego zawarto\u015b\u0107, kt\u00f3rej jeszcze nie ma. Przygotowanie tak zwanych plik\u00f3w \u201emake\u201d, kt\u00f3rych zadaniem jest automatyzacja procesu kompilacji i budowania oprogramowania, mo\u017ce by\u0107 niezwykle skomplikowanym procesem. Dlatego nie b\u0119d\u0119 zbyt g\u0142\u0119boko porusza\u0107 tego tematu, w internecie dost\u0119pnych jest ca\u0142kiem sporo tre\u015bci, przybli\u017caj\u0105cych og\u00f3lny koncept plik\u00f3w \u201emake\u201d.<\/p><p style=\"font-weight: 400;\">W przypadku RPI Pico CMakeLists.txt podzielony jest na trzy cz\u0119\u015bci. W pierwszej, dzi\u0119ki poleceniu add_executable dodajemy do projektu expended_blink plik wykonywalny expended_blink.c, je\u015bli plik\u00f3w b\u0119dzie wi\u0119cej, a w przysz\u0142o\u015bci zdarz\u0105 si\u0119 takie sytuacje nale\u017cy, je tutaj umie\u015bci\u0107. Nast\u0119pnie nale\u017cy zaznaczy\u0107, jakie bibliotek zosta\u0142y wykorzystane w projekcie, jest to mo\u017cliwe dzi\u0119ki target_link_libraries, gdzie w nawiasie umieszczamy nazw\u0119 projektu oraz do\u0142\u0105czone biblioteki. Ostatni\u0105 regu\u0142\u0105 umieszczon\u0105 w CMakeLists jest pico_add_extra_outputs, dzi\u0119ki kt\u00f3rej w trakcie procesu kompilacji wygenerowane zostan\u0105 wszystkie pliki binarne.<\/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-401aa7a elementor-widget elementor-widget-heading\" data-id=\"401aa7a\" 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\">Pierwsze uruchomienie expanded_blink<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4c7ccbc elementor-widget elementor-widget-video\" data-id=\"4c7ccbc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;mute&quot;:&quot;yes&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\/01\/IMG_0565.mov\" controls=\"\" preload=\"metadata\" muted=\"muted\" 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-5835d44 elementor-widget elementor-widget-text-editor\" data-id=\"5835d44\" 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;\">Nadszed\u0142 czas na pierwsze uruchomienie projektu expanded_blink, je\u015bli wszystkie pliki s\u0105 zapisane, mo\u017cemy przej\u015b\u0107 do zak\u0142adki CMake, z kt\u00f3rej korzystali\u015bmy ju\u017c w poprzednim materiale. Nale\u017cy tam tak jak poprzednio wybra\u0107 odpowiedni projekt w opcji Build, a nast\u0119pnie uruchomi\u0107 kompilacje.<\/p><p style=\"font-weight: 400;\">Gdy ta zako\u0144czy si\u0119 pomy\u015blnie, mo\u017cna, podobnie jak w przypadku pierwszego projektu blink, wrzuci\u0107 plik expended_blink.uf2 na RPI-RP2. Pami\u0119tajcie o wci\u015bni\u0119ciu przycisku na p\u0142ytce w momencie jej pod\u0142\u0105czania, tak aby Raspberry Pi Pico W uruchomi\u0142o si\u0119 w trybie programowania.<\/p><p style=\"font-weight: 400;\">Po zapisaniu danych powinni\u015bcie zobaczy\u0107 efekt taki jak na filmie powy\u017cej &#8211; <strong>ka\u017cda z diod LED za\u015bwieci si\u0119 kolejno na p\u00f3\u0142 sekundy, po czy wszystkie zgasn\u0105.<\/strong> Jednak czy takiego efektu oczekiwali\u015bmy? No nie do ko\u0144ca. Ca\u0142a sekwencja powinna wykona\u0107 si\u0119 ponownie i ponownie, czy w takim razie przygotowany kod jest obarczony jakim\u015b b\u0142\u0119dem? Nie, wszystko wykonane zosta\u0142o zgodnie z planem, a kod dzia\u0142a poprawnie. Przyjrzyjcie si\u0119 napisanemu programowi, inicjalizujemy trzy piny, wybieramy ich funkcjonalno\u015b\u0107, a nast\u0119pnie kilkoma poleceniami ustawiaj\u0105cymi konkretny stan logiczny i wstrzymuj\u0105cymi prac\u0119 RP2040 sterujemy diodami LED. Jednak co dzieje si\u0119, gdy uk\u0142ad wykona ostatni\u0105 instrukcj\u0119 sleep_ms(500);? Prawid\u0142owa odpowied\u017a to nic, program zosta\u0142 wykonany, chip nie ma poj\u0119cia, \u017ce z naszej perspektywy warto by ca\u0142y proces w\u0142\u0105czania i wy\u0142\u0105czania diod powt\u00f3rzy\u0107.\u00a0\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-4056038 elementor-widget elementor-widget-heading\" data-id=\"4056038\" 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\">Nieko\u0144cz\u0105ce si\u0119 efekty \u015bwietlne<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0d58e3b elementor-widget elementor-widget-code-highlight\" data-id=\"0d58e3b\" 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 \">\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\nint main() {\r\n    gpio_init(0); \/\/initialization of GP0, GP1 and GP2 pins\r\n    gpio_init(1);\r\n    gpio_init(2);\r\n\r\n    gpio_set_dir(0, GPIO_OUT); \/\/setting GP0, GP1 and GP2 as outputs\r\n    gpio_set_dir(1, GPIO_OUT);\r\n    gpio_set_dir(2, GPIO_OUT);\r\n\r\n    while (true) { \/\/infinite while loop\r\n        gpio_put(0, 1);\r\n        sleep_ms(500);\r\n        gpio_put(0, 0);\r\n        gpio_put(1, 1);\r\n        sleep_ms(500);\r\n        gpio_put(1, 0);\r\n        gpio_put(2, 1);\r\n        sleep_ms(500);\r\n        gpio_put(2, 0);\r\n        sleep_ms(500);\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-a34ad26 elementor-widget elementor-widget-text-editor\" data-id=\"a34ad26\" 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;\">Je\u015bli chcemy, aby RP2040 przez ca\u0142y czas, synchronicznie uruchamia\u0142 i wygasza\u0142 diody, musimy w jaki\u015b spos\u00f3b <strong>zap\u0119tli\u0107 cz\u0119\u015b\u0107 kodu<\/strong> realizuj\u0105c\u0105 to zadanie. Pierwszych dw\u00f3ch zbior\u00f3w polece\u0144 odpowiedzialnych za konfiguracj\u0119 port\u00f3w i nie ma sensu wykonywa\u0107 wielokrotnie, wyprowadzenia raz skonfigurowane jako wyj\u015bcia, pozostan\u0105 ju\u017c w takim stanie. Aby kod steruj\u0105cy diodami LED m\u00f3g\u0142 wykonywa\u0107 si\u0119 w niesko\u0144czono\u015b\u0107, a w zasadzie do czasu wy\u0142\u0105czenia zasilania <strong>musimy wrzuci\u0107 go w p\u0119tl\u0119.<\/strong> W j\u0119zyku C p\u0119tle to specyficzne konstrukcje, kt\u00f3re pozwalaj\u0105 umieszczony w nich kod wykonywa\u0107 wielokrotnie. Poza tym p\u0119tle mog\u0105 by\u0107 skojarzone z pewnymi warunkami, tym samy mo\u017cemy sterowa\u0107 ich wykonywaniem, p\u0119tla mo\u017ce wykona\u0107 si\u0119 tylko kilkukrotnie, mo\u017ce nie wykona\u0107 si\u0119 wcale lub mo\u017ce wykonywa\u0107 si\u0119 w niesko\u0144czono\u015b\u0107.<\/p><p style=\"font-weight: 400;\">W naszym kodzie skorzystamy <strong>z p\u0119tli while<\/strong>, kt\u00f3ra dzia\u0142a do momentu, gdy spe\u0142niony jest warunek umieszczony w nawiasie. Innymi s\u0142owy, kod umieszczony wewn\u0105trz p\u0119tli b\u0119dzie wykonywany tak d\u0142ugo, puki warunek umieszczony w nawiasie b\u0119dzie spe\u0142niony. Gdy kod z wn\u0119trza p\u0119tli zostanie wykonany, uk\u0142ad wraca do jej pocz\u0105tku, wykonuj\u0105c go po raz kolejny.<\/p><p style=\"font-weight: 400;\">Co\u015b takiego jak niesko\u0144czona p\u0119tla jest w programowaniu spotykane nad wyraz cz\u0119sto. Zazwyczaj chcemy, aby program realizowany by\u0142 ca\u0142y czas, niezale\u017cnie czy tylko sterujemy diodami \u015bwiec\u0105cymi, czy te\u017c dla przyk\u0142adu odczytujemy dane z czujnika temperatury, a warto\u015b\u0107 wy\u015bwietlamy na wy\u015bwietlaczu. Kod musi by\u0107 wykonywany non stop, w innym przypadku temperatura odczytana by\u0142aby tylko raz i na ekranie widoczny by\u0142by tylko jeden odczyt.<\/p><p style=\"font-weight: 400;\">W takim razie co nale\u017cy umie\u015bci\u0107 w warunku p\u0119tli while, aby ta wykonywana by\u0142a w niesko\u0144czono\u015b\u0107? Odpowied\u017a jest prosta \u2013 prawd\u0119, czyli po prostu <strong>true<\/strong>. W j\u0119zyku C co\u015b takiego jak true, mo\u017cemy traktowa\u0107 w\u0142a\u015bnie jako zawsze spe\u0142niony warunek. Tym sposobem mo\u017cna stworzy\u0107 zawsze wykonuj\u0105c\u0105 si\u0119 p\u0119tle. Oczywi\u015bcie w nawiasie tworzy\u0107 mo\u017cemy te\u017c bardziej rozbudowane warunki, ale tym zajmiemy si\u0119 w kolejnych materia\u0142ach.<\/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-9559291 elementor-widget elementor-widget-video\" data-id=\"9559291\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;mute&quot;:&quot;yes&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\/01\/IMG_0577.mov\" controls=\"\" preload=\"metadata\" muted=\"muted\" 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-c70aa92 elementor-widget elementor-widget-text-editor\" data-id=\"c70aa92\" 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 kompilacji i wrzuceniu na <strong>Raspberry Pi Pico W<\/strong> nowego pliku extended_blink.uf2 mo\u017cemy zobaczy\u0107, \u017ce tym razem diody w\u0142\u0105czane i wy\u0142\u0105czane s\u0105 wielokrotnie, czyli nasza niesko\u0144czona p\u0119tla while dzia\u0142a poprawnie. Na tym zako\u0144czymy projekt rozbudowanego programu steruj\u0105cego diodami LED, ale zach\u0119cam was do eksperyment\u00f3w. Mo\u017cecie spr\u00f3bowa\u0107 zmieni\u0107 wyprowadzenia, do kt\u00f3rych pod\u0142\u0105czone s\u0105 \u015bwiec\u0105ce elementy, zmieni\u0107 warto\u015bci czasu, czy te\u017c ca\u0142kowicie zmodyfikowa\u0107 funkcje gpio_put, tak aby teraz diody by\u0142y synchronicznie wy\u0142\u0105czane, a nie w\u0142\u0105czane. Dzi\u0119ki tym kilku instrukcjom, kt\u00f3re opisa\u0142em w tym artykule, mo\u017cna przygotowa\u0107 ca\u0142kiem ciekawe efekty \u015bwietlne. <strong>Podsumowuj\u0105c,<\/strong> <strong>nie obawiajcie si\u0119 tworzy\u0107 w\u0142asnych projekt\u00f3w, to w\u0142a\u015bnie dzi\u0119ki nim tak naprawd\u0119 uczycie si\u0119 programowa\u0107.\u00a0 \u00a0<\/strong><\/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-59e24ca elementor-widget elementor-widget-heading\" data-id=\"59e24ca\" 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\">Problem sleep_ms i innych funkcji blokuj\u0105cych <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-00fc3d3 elementor-widget elementor-widget-image\" data-id=\"00fc3d3\" 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\/rpi_2040_chip_04.webp\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"rpi_2040_chip_04\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6Ijc0OTQ2IiwidXJsIjoiaHR0cHM6XC9cL2JvdGxhbmQuY29tLnBsXC9ibG9nXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wMVwvcnBpXzIwNDBfY2hpcF8wNC53ZWJwIn0%3D\" data-wpel-link=\"internal\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/rpi_2040_chip_04-1024x683.webp\" class=\"attachment-large size-large wp-image-74946\" alt=\"\" srcset=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/rpi_2040_chip_04-1024x683.webp 1024w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/rpi_2040_chip_04-300x200.webp 300w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/rpi_2040_chip_04-768x512.webp 768w, https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/rpi_2040_chip_04.webp 1200w\" 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\">Rdze\u0144 jednego z prototyp\u00f3w uk\u0142adu RP2040. (https:\/\/forbot.pl\/blog\/jak-powstawal-mikrokontroler-raspberry-pi-rp2040-id47544)<\/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-7a9e7d3 elementor-widget elementor-widget-text-editor\" data-id=\"7a9e7d3\" 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 koniec chcia\u0142bym opowiedzie\u0107 wam o czym\u015b jeszcze. W dzisiejszym projekcie wykorzystali\u015bmy funkcj\u0119 sleep_ms, kt\u00f3ra podobnie jak inne, tak zwane funkcje blokuj\u0105ce jest z pewnych wzgl\u0119d\u00f3w problematyczna. Na ten moment mo\u017ce wydawa\u0107 si\u0119 ona niezwykle praktyczna i u\u017cyteczna, wszak\u017ce pozwala w prosty spos\u00f3b wstrzyma\u0107 dzia\u0142anie programu na okre\u015blon\u0105 ilo\u015b\u0107 czasu, ale niestety w tym wstrzymaniu le\u017cy jej najwi\u0119kszy problem. Co dzieje si\u0119 z uk\u0142adem RP2040, gdy natrafi on na polecenie sleep_ms? Chip czeka, a\u017c minie zadeklarowany czas i w tym momencie nie wykonuje \u017cadnych zada\u0144, a co gorsze nie jest w stanie reagowa\u0107 na czynniki zewn\u0119trzne. Aktualnie mo\u017ce wydawa\u0107 si\u0119 to ma\u0142o znacz\u0105ce, ale gdy poznamy co\u015b takiego jak przerwania, oka\u017ce si\u0119, \u017ce wstrzymywanie programu jest wielce niewskazane. Poza tym, gdy mikrokontroler po prostu czeka, jego moc jest marnowana.<\/p><p style=\"font-weight: 400;\">Chcia\u0142bym, aby\u015bcie ju\u017c teraz zapami\u0119tali, \u017ce wszelkie funkcje blokuj\u0105ce, mimo \u017ce kusz\u0105ce s\u0105 w programowaniu niepo\u017c\u0105dane. Istniej\u0105 optymalniejsze sposoby na pozorne \u201ewstrzymanie\u201d dzia\u0142ania programu, kt\u00f3re oczywi\u015bcie w przysz\u0142o\u015bci poznamy. Funkcja sleep_ms nie nale\u017cy do polece\u0144 zakazanych, ale je\u015bli zdecydujemy si\u0119 j\u0105 umie\u015bci\u0107 w kodzie, trzeba to dobrze przemy\u015ble\u0107 i mie\u0107 \u015bwiadomo\u015b\u0107 jej ogranicze\u0144.<\/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-6e5de0b elementor-widget elementor-widget-heading\" data-id=\"6e5de0b\" 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-6207777 elementor-widget elementor-widget-text-editor\" data-id=\"6207777\" 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 pierwszy stworzony od zera projekt. <strong>Uruchomili\u015bmy trzy diody LED<\/strong> i mam nadziej\u0119, \u017ce po poznaniu kodu wprowadzili\u015bcie do niego pewne zmiany, innymi s\u0142owy eksperymentowali\u015bcie, bo to w\u0142a\u015bnie zabawa z kodem jest esencj\u0105 programowania. Moim zadaniem jest tylko opisa\u0107 kilka prostych funkcji, to jak dzia\u0142aj\u0105, co powoduj\u0105 i jak u\u017cy\u0107 ich w praktycznych przyk\u0142adach, ale to w prototypowaniu le\u017cy magia nauki. Poza tym opowiedzia\u0142em wam nieco o plikach konfiguracyjnych make, a tak\u017ce poznali\u015bmy pierwszy rodzaj p\u0119tli spotykanej w programowaniu. Na koniec za\u015b poznali\u015bmy problemy tak zwanych<strong> funkcji blokuj\u0105cych<\/strong>. W kolejnych materia\u0142ach czeka was wiele nowo\u015bci, poznamy kolejne rodzaje p\u0119tli i funkcje warunkowe, a wszystko to na praktycznych projektach.<\/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-ea972a0 elementor-widget elementor-widget-spacer\" data-id=\"ea972a0\" 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-9aecc5a elementor-widget elementor-widget-text-editor\" data-id=\"9aecc5a\" 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>\u0179r\u00f3d\u0142a:<\/p><ul><li>https:\/\/datasheets.raspberrypi.com\/rp2040\/rp2040-datasheet.pdf<\/li><li>https:\/\/datasheets.raspberrypi.com\/picow\/pico-w-datasheet.pdf<\/li><li>https:\/\/www.raspberrypi.com\/products\/rp2040\/<\/li><li>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 tym artykule prze\u0107wiczymy przygotowanie w\u0142asnego projektu, a tak\u017ce opiszemy podstawowe zale\u017cno\u015bci i zasady pojawiaj\u0105ce si\u0119 w j\u0119zyku C.<\/p>\n","protected":false},"author":34,"featured_media":75190,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7,21,134],"tags":[],"class_list":["post-74920","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 v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kurs Raspberry Pi Pico - #4 \u2013 Zaczynamy programowa\u0107 - Botland<\/title>\n<meta name=\"description\" content=\"W tym artykule prze\u0107wiczymy przygotowanie w\u0142asnego projektu, a tak\u017ce opiszemy podstawowe zale\u017cno\u015bci i zasady pojawiaj\u0105ce si\u0119 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\/raspberry-pi-pico-4-zaczynamy-programowac\/\" \/>\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 - #4 \u2013 Zaczynamy programowa\u0107 - Botland\" \/>\n<meta property=\"og:description\" content=\"W tym artykule prze\u0107wiczymy przygotowanie w\u0142asnego projektu, a tak\u017ce opiszemy podstawowe zale\u017cno\u015bci i zasady pojawiaj\u0105ce si\u0119 w j\u0119zyku C.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/\" \/>\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-01-28T13:00:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-08T09:01:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/1-3.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=\"24 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/\"},\"author\":{\"name\":\"Rafa\u0142 Bartoszak\",\"@id\":\"https:\\\/\\\/botland.de\\\/blog\\\/#\\\/schema\\\/person\\\/5a69e7f5db1f77c617f990e73bb83215\"},\"headline\":\"Kurs Raspberry Pi Pico &#8211; #4 \u2013 Zaczynamy programowa\u0107\",\"datePublished\":\"2024-01-28T13:00:53+00:00\",\"dateModified\":\"2026-04-08T09:01:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/\"},\"wordCount\":4418,\"publisher\":{\"@id\":\"https:\\\/\\\/botland.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/1-3.png\",\"articleSection\":[\"Elektronika\",\"Programowanie\",\"Raspberry Pi\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/\",\"name\":\"Kurs Raspberry Pi Pico - #4 \u2013 Zaczynamy programowa\u0107 - Botland\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/botland.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/1-3.png\",\"datePublished\":\"2024-01-28T13:00:53+00:00\",\"dateModified\":\"2026-04-08T09:01:24+00:00\",\"description\":\"W tym artykule prze\u0107wiczymy przygotowanie w\u0142asnego projektu, a tak\u017ce opiszemy podstawowe zale\u017cno\u015bci i zasady pojawiaj\u0105ce si\u0119 w j\u0119zyku C.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/#primaryimage\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/1-3.png\",\"contentUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/1-3.png\",\"width\":1510,\"height\":755},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/raspberry-pi-pico-4-zaczynamy-programowac\\\/#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 &#8211; #4 \u2013 Zaczynamy programowa\u0107\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/botland.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/botland.de\\\/blog\\\/\",\"name\":\"Botland\",\"description\":\"Blog Raspberry Pi, Arduino, elektronika i robotyka - Botland\",\"publisher\":{\"@id\":\"https:\\\/\\\/botland.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/botland.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/botland.de\\\/blog\\\/#organization\",\"name\":\"Botland\",\"url\":\"https:\\\/\\\/botland.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/botland.de\\\/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.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/facebook.com\\\/Botland\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/botland.de\\\/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 - #4 \u2013 Zaczynamy programowa\u0107 - Botland","description":"W tym artykule prze\u0107wiczymy przygotowanie w\u0142asnego projektu, a tak\u017ce opiszemy podstawowe zale\u017cno\u015bci i zasady pojawiaj\u0105ce si\u0119 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\/raspberry-pi-pico-4-zaczynamy-programowac\/","og_locale":"pl_PL","og_type":"article","og_title":"Kurs Raspberry Pi Pico - #4 \u2013 Zaczynamy programowa\u0107 - Botland","og_description":"W tym artykule prze\u0107wiczymy przygotowanie w\u0142asnego projektu, a tak\u017ce opiszemy podstawowe zale\u017cno\u015bci i zasady pojawiaj\u0105ce si\u0119 w j\u0119zyku C.","og_url":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/","og_site_name":"Botland","article_publisher":"https:\/\/facebook.com\/Botland\/","article_published_time":"2024-01-28T13:00:53+00:00","article_modified_time":"2026-04-08T09:01:24+00:00","og_image":[{"width":1510,"height":755,"url":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/1-3.png","type":"image\/png"}],"author":"Rafa\u0142 Bartoszak","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Rafa\u0142 Bartoszak","Szacowany czas czytania":"24 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/#article","isPartOf":{"@id":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/"},"author":{"name":"Rafa\u0142 Bartoszak","@id":"https:\/\/botland.de\/blog\/#\/schema\/person\/5a69e7f5db1f77c617f990e73bb83215"},"headline":"Kurs Raspberry Pi Pico &#8211; #4 \u2013 Zaczynamy programowa\u0107","datePublished":"2024-01-28T13:00:53+00:00","dateModified":"2026-04-08T09:01:24+00:00","mainEntityOfPage":{"@id":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/"},"wordCount":4418,"publisher":{"@id":"https:\/\/botland.de\/blog\/#organization"},"image":{"@id":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/#primaryimage"},"thumbnailUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/1-3.png","articleSection":["Elektronika","Programowanie","Raspberry Pi"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/","url":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/","name":"Kurs Raspberry Pi Pico - #4 \u2013 Zaczynamy programowa\u0107 - Botland","isPartOf":{"@id":"https:\/\/botland.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/#primaryimage"},"image":{"@id":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/#primaryimage"},"thumbnailUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/1-3.png","datePublished":"2024-01-28T13:00:53+00:00","dateModified":"2026-04-08T09:01:24+00:00","description":"W tym artykule prze\u0107wiczymy przygotowanie w\u0142asnego projektu, a tak\u017ce opiszemy podstawowe zale\u017cno\u015bci i zasady pojawiaj\u0105ce si\u0119 w j\u0119zyku C.","breadcrumb":{"@id":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/#primaryimage","url":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/1-3.png","contentUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2024\/01\/1-3.png","width":1510,"height":755},{"@type":"BreadcrumbList","@id":"https:\/\/botland.com.pl\/blog\/raspberry-pi-pico-4-zaczynamy-programowac\/#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 &#8211; #4 \u2013 Zaczynamy programowa\u0107"}]},{"@type":"WebSite","@id":"https:\/\/botland.de\/blog\/#website","url":"https:\/\/botland.de\/blog\/","name":"Botland","description":"Blog Raspberry Pi, Arduino, elektronika i robotyka - Botland","publisher":{"@id":"https:\/\/botland.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/botland.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/botland.de\/blog\/#organization","name":"Botland","url":"https:\/\/botland.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/botland.de\/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.de\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/Botland\/"]},{"@type":"Person","@id":"https:\/\/botland.de\/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\/74920","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=74920"}],"version-history":[{"count":0,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/posts\/74920\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/media\/75190"}],"wp:attachment":[{"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/media?parent=74920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/categories?post=74920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/tags?post=74920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}