{"id":23665,"date":"2025-07-30T16:49:32","date_gmt":"2025-07-30T14:49:32","guid":{"rendered":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/?p=23665"},"modified":"2025-09-04T10:34:02","modified_gmt":"2025-09-04T08:34:02","slug":"sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart","status":"publish","type":"post","link":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/","title":{"rendered":"Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART"},"content":{"rendered":"\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"dowiesz-sie\">\n<h3>Z tego artyku\u0142u dowiesz si\u0119:<\/h3>\n<ul class=\"bulleted\">\n<li>jakie funkcje udost\u0119pnia biblioteka Astorino dla Arduino,<\/li>\n<li>jak napisa\u0107 prost\u0105 aplikacj\u0119 steruj\u0105c\u0105 robotem za pomoc\u0105 Arduino.<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Do stworzenia artyku\u0142u wykorzystano robota Astorino (wersja B) i Arduino Due.<\/p>\n\n\n\n<p>Konieczne jest wykorzystanie mikroprocesora o napi\u0119ciu systemowym 3,3 V, poniewa\u017c mikroprocesor wykorzystany w Astorino operuje na tym zakresie. Wykorzystanie p\u0142ytki o napi\u0119ciu systemowym wy\u017cszym ni\u017c 3,3 V (np. Arduino UNO z napi\u0119ciem 5 V) mo\u017ce spowodowa\u0107 uszkodzenie kontrolera Astorino.<\/p>\n\n\n\n<p>P\u0142ytk\u0119 programowano w \u015brodowisku Arduino IDE 2.3.6.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Biblioteka C++ do obs\u0142ugi Astorino<\/h2>\n\n\n\n<p>Do sprawnej komunikacji stworzona zosta\u0142a biblioteka w j\u0119zyku C++, udost\u0119pniaj\u0105ca komendy pozwalaj\u0105ce na ustanowienie komunikacji mi\u0119dzy urz\u0105dzeniami oraz wydawanie podstawowych polece\u0144 robotowi.<\/p>\n\n\n\n<p>Oto najwa\u017cniejsze z nich:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>astorino::astorino(HardwareSerial&amp; port)<\/strong><\/p>\n\n\n\n<p>Konstruktor obiektu klasy astorino. Obiekt ten jest wymagany do wysy\u0142ania komend.<\/p>\n\n\n\n<p>Argumenty:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HardwareSerial <em>port<\/em> \u2013 port UART u\u017cywany do komunikacji<\/li>\n<\/ul>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>astorino r(Serial1);<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::Connect()<\/strong><\/p>\n\n\n\n<p>Otwiera po\u0142\u0105czenie mi\u0119dzy robotem a mikrokontrolerem<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>if(r.Connect() == 0){\n\t\/\/Otw\u00f3rz po\u0142\u0105czenie. Je\u017celi poprawnie, wykonaj kod.\n\t\/\/{...}\n}<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::Disconnect()<\/strong><\/p>\n\n\n\n<p>Zamyka po\u0142\u0105czenie mi\u0119dzy robotem a mikrokontrolerem<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.Disconnect();<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::emergencyStop()<\/strong><\/p>\n\n\n\n<p>Wystawia do robota sygna\u0142 \u201cError\u201d. Aby zresetowa\u0107 b\u0142\u0105d nale\u017cy zatwierdzi\u0107 go na TP.<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.emergencyStop();<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::setMotorOn()<\/strong><\/p>\n\n\n\n<p>W\u0142\u0105cza silniki robota<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.setMotorOn();<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::setMotorOff()<\/strong><\/p>\n\n\n\n<p>Robot wykonuje ruch do pozycji wy\u0142\u0105czenia silnik\u00f3w, nast\u0119pnie wy\u0142\u0105cza silniki<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.setMotorOff();<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::reset()<\/strong><\/p>\n\n\n\n<p>Resetuje b\u0142\u0105d robota<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.reset();<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>astorino::RetVal <\/strong>(wiele deklaracji)<\/p>\n\n\n\n<p>Konstruktor zmiennej przechowuj\u0105cej odpowied\u017a robota<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>astorino::RetVal ret;<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::setHomeHere()<\/strong><\/p>\n\n\n\n<p>Ustawia po\u0142o\u017cenie domowe robota w pozycji w kt\u00f3rej znajduje si\u0119 koniec robota<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.setHomeHere();<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::setHome(double jt1, double jt2, double jt3, double jt4, double jt5, double jt6)<\/strong><\/p>\n\n\n\n<p><em>oraz przeci\u0105\u017cenie funkcji:<\/em><\/p>\n\n\n\n<p><strong>byte astorino::setHome(double jt1, double jt2, double jt3, double jt4, double jt5, double jt6, double jt7)<\/strong><\/p>\n\n\n\n<p><em>istnieje r\u00f3wnie\u017c przeci\u0105\u017cenie funkcji operuj\u0105ce na wektorze:<\/em><\/p>\n\n\n\n<p><strong>byte astorino::setHome(double* jt, int length)<\/strong><\/p>\n\n\n\n<p>Ustawia po\u0142o\u017cenie domowe robota w podanej jako argumenty pozycji z\u0142\u0105czowej<\/p>\n\n\n\n<p>Argumenty:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>double jt1-7 \u2013 k\u0105ty kolejnych osi robota.<\/li>\n<\/ul>\n\n\n\n<p>Je\u017celi robot nie obs\u0142uguje 7 osi, mo\u017cna u\u017cy\u0107 przeci\u0105\u017cenia sze\u015bcioargumentowego, lub wpisa\u0107 0 jako argument si\u00f3dmy.<\/p>\n\n\n\n<p>Przeci\u0105\u017cenie wektorowe:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>double * jt \u2013 wektor k\u0105t\u00f3w kolejnych osi,<\/li>\n\n\n\n<li>int length \u2013 d\u0142ugo\u015b\u0107 wektora<\/li>\n<\/ul>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.setHome((double)0,(double)0,(double)-90,(double)0,(double)-90,(double)0);\nr.setHome((double)0,(double)0,(double)-90,(double)0,(double)-90,(double)0,(double)0);\n\ndouble h&#091;] = {0,0,-90,0,-90,0};\nint length = 6;\nr.setHome(h,length);<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::Zero()<\/strong><\/p>\n\n\n\n<p>Wykonuje zerowanie robota<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.Zero();<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::HOME(byte spd, byte acc, byte dec)<\/strong><\/p>\n\n\n\n<p>Robot wykonuje ruch do pozycji domowej z okre\u015blonymi parametrami.<\/p>\n\n\n\n<p>Argumenty:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>byte spd \u2013 % pr\u0119dko\u015bci maksymalnej robota,<\/li>\n\n\n\n<li>byte acc \u2013 % maksymalnego przyspieszenia robota,<\/li>\n\n\n\n<li>byte dec \u2013 % maksymalnego spowalniania robota<\/li>\n<\/ul>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.HOME(30,90,80);<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::CMOVE(byte pointType, byte spd, byte acc, byte dec, double* middle, double* target, int length)<\/strong><\/p>\n\n\n\n<p><em>istnieje r\u00f3wnie\u017c przeci\u0105\u017cenie funkcji, pozwalaj\u0105ce na wykorzystanie istniej\u0105cych punkt\u00f3w w programie robota:<\/em><\/p>\n\n\n\n<p><strong>byte astorino::CMOVE(byte pointType1, byte pointIndex1, byte pointIndex2, byte spd, byte acc, byte dec)<\/strong><\/p>\n\n\n\n<p>Robot wykonuje ruch po okr\u0119gu okre\u015blonym punktem pierwszym do punktu drugiego z okre\u015blonymi parametrami.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>byte pointType \u2013 typ podawanego punktu: 1 \u2013 punkt kartezja\u0144ski, 2 \u2013 punkt z\u0142\u0105czowy.<br>byte spd \u2013 % pr\u0119dko\u015bci maksymalnej robota,<\/li>\n\n\n\n<li>byte acc \u2013 % maksymalnego przyspieszenia robota,<\/li>\n\n\n\n<li>byte dec \u2013 % maksymalnego spowalniania robota,<\/li>\n\n\n\n<li>double* middle \u2013 wektor zawieraj\u0105cy wsp\u00f3\u0142rz\u0119dne punktu pierwszego (pomocniczego),<\/li>\n\n\n\n<li>double* target \u2013 wektor zawieraj\u0105cy wsp\u00f3\u0142rz\u0119dne punktu ko\u0144cowego,<\/li>\n\n\n\n<li>int length \u2013 ilo\u015b\u0107 punkt\u00f3w podanych w wektorze<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>byte pointType1 \u2013 typ podawanego punktu &#8211; 1 &#8211; punkt kartezja\u0144ski, 2 &#8211; punkt z\u0142\u0105czowy.<\/li>\n\n\n\n<li>byte pointIndex1 \u2013 numer punktu w pami\u0119ci robota kt\u00f3ry ma by\u0107 u\u017cyty jako punkt pomocniczy okr\u0119gu,<\/li>\n\n\n\n<li>byte pointIndex2 \u2013 numer punktu w pami\u0119ci robota kt\u00f3ry ma by\u0107 u\u017cyty jako punkt ko\u0144cowy ruchu po okr\u0119gu,<\/li>\n<\/ul>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>double p&#091;] = {0,0,-80,0,-90,0};\ndouble k&#091;] = {10,0,-90,0,-90,0};\nint length = 6;\nr.CMOVE(2, 90, 80, 80, p, k, length);\n\nr.CMOVE(1, 5, 6, 80, 80, 90);<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::executeASCommand(String command)<\/strong><\/p>\n\n\n\n<p>Robot wykonuje podan\u0105 jako argument komend\u0119.<\/p>\n\n\n\n<p>Argument:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>String <em>command <\/em>\u2013 napisana w j\u0119zyku AS komenda przyjmowana przez robota.<\/li>\n<\/ul>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.executeASCommand(\"SIGNAL 57\"); \/\/Ustawia sygna\u0142 57 na wysoki<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::JMOVE(byte pointType, byte pointIndex, byte spd, byte acc, byte dec)<\/strong><\/p>\n\n\n\n<p><em>oraz przeci\u0105\u017cenie pozwalaj\u0105ce u\u017cycie w\u0142asnego punktu:<\/em><\/p>\n\n\n\n<p><strong>byte astorino::JMOVE(byte pointType, byte spd, byte acc, byte dec, double* target, int length)<\/strong><\/p>\n\n\n\n<p>Robot wykonuje ruch z\u0142\u0105czowy do podanego punktu z okre\u015blonymi parametrami.<\/p>\n\n\n\n<p>Argumenty:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>byte pointType \u2013 typ podawanego punktu: 1 \u2013 punkt kartezja\u0144ski, 2 \u2013 punkt z\u0142\u0105czowy.<\/li>\n\n\n\n<li>byte pointIndex \u2013 numer punktu w pami\u0119ci robota kt\u00f3ry ma by\u0107 u\u017cyty jako punkt ko\u0144cowy ruchu<\/li>\n\n\n\n<li>byte spd \u2013 % pr\u0119dko\u015bci maksymalnej robota,<\/li>\n\n\n\n<li>byte acc \u2013 % maksymalnego przyspieszenia robota,<\/li>\n\n\n\n<li>byte dec \u2013 % maksymalnego spowalniania robota,<\/li>\n\n\n\n<li>double* target \u2013 wektor zawieraj\u0105cy wsp\u00f3\u0142rz\u0119dne punktu,<\/li>\n\n\n\n<li>int length \u2013 d\u0142ugo\u015b\u0107 wektora punkt\u00f3w.<\/li>\n<\/ul>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.JMOVE(1,2,90,80,80);\n\ndouble punkt&#091;6]={0,0,-90,0,-90,0};\nr.JMOVE(2,40,90,90,punkt,6);<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>byte astorino::LMOVE(byte pointType, byte pointIndex, byte spd, byte acc, byte dec)<\/strong><\/p>\n\n\n\n<p><em>oraz przeci\u0105\u017cenie pozwalaj\u0105ce u\u017cycie w\u0142asnego punktu:<\/em><\/p>\n\n\n\n<p><strong>byte astorino::LMOVE(byte pointType, byte spd, byte acc, byte dec, double* target, int length)<\/strong><\/p>\n\n\n\n<p>Robot wykonuje ruch liniowy do podanego punktu z okre\u015blonymi parametrami.<\/p>\n\n\n\n<p>Argumenty:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>byte pointType \u2013 typ podawanego punktu: 1 \u2013 punkt kartezja\u0144ski, 2 \u2013 punkt z\u0142\u0105czowy<\/li>\n\n\n\n<li>byte pointIndex \u2013 numer punktu w pami\u0119ci robota kt\u00f3ry ma by\u0107 u\u017cyty jako punkt ko\u0144cowy ruchu<\/li>\n\n\n\n<li>byte spd \u2013 % pr\u0119dko\u015bci maksymalnej robota,<\/li>\n\n\n\n<li>byte acc \u2013 % maksymalnego przyspieszenia robota,<\/li>\n\n\n\n<li>byte dec \u2013 % maksymalnego spowalniania robota,<\/li>\n\n\n\n<li>double* target \u2013 wektor zawieraj\u0105cy wsp\u00f3\u0142rz\u0119dne punktu,<\/li>\n\n\n\n<li>int length \u2013 d\u0142ugo\u015b\u0107 wektora punkt\u00f3w.<\/li>\n<\/ul>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>r.LMOVE(1,2,90,80,80);\n\ndouble punkt&#091;6]={0,0,-90,0,-90,0};\nr.LMOVE(2,40,90,90,punkt,6);<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>astorino::RetVal astorino::Pose()<\/strong><\/p>\n\n\n\n<p>Zwraca po\u0142o\u017cenie kartezja\u0144skie robota.<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>ret = r.Pose();\nSerial.print(ret.values&#091;0]); \/\/x\nSerial.print(ret.values&#091;1]); \/\/y\nSerial.println(ret.values&#091;2]); \/\/z<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>astorino::RetVal astorino::JT()<\/strong><\/p>\n\n\n\n<p>Zwraca po\u0142o\u017cenie z\u0142\u0105czowe robota<\/p>\n\n\n\n<p>Argumenty: brak<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>ret=r.JT();\nSerial.print(ret.values&#091;0]);\nSerial.print(ret.values&#091;1]);\nSerial.print(ret.values&#091;2]);\nSerial.print(ret.values&#091;3]);\nSerial.print(ret.values&#091;4]);\nSerial.println(ret.values&#091;5]);  <\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Dodanie biblioteki do Arduino IDE<\/h2>\n\n\n\n<p>Aby doda\u0107 bibliotek\u0119, nale\u017cy z g\u00f3rnej wst\u0105\u017cki oprogramowania rozwin\u0105\u0107 <strong>Sketch<\/strong>, a nast\u0119pnie <strong>Include Library<\/strong> i wybra\u0107 <strong>Add .ZIP Library\u2026<\/strong>.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1037\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image5-2.png\" alt=\"\" class=\"wp-image-23688\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image5-2.png 1920w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image5-2-840x454.png 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image5-2-768x415.png 768w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image5-2-1536x830.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W eksploratorze plik\u00f3w nale\u017cy wybra\u0107 odpowiedni\u0105 bibliotek\u0119.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"528\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image1-2.png\" alt=\"\" class=\"wp-image-23691\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image1-2.png 945w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image1-2-840x469.png 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image1-2-768x429.png 768w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Pod\u0142\u0105czenie przewodu do Serial1<\/h2>\n\n\n\n<p>Aby poprawnie ustanowi\u0107 po\u0142\u0105czenie, nale\u017cy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bia\u0142y przew\u00f3d pod\u0142\u0105czy\u0107 pod GND,<\/li>\n\n\n\n<li>czarny przew\u00f3d pod\u0142\u0105czy\u0107 pod TX1 (pin 18),<\/li>\n\n\n\n<li>niebieski przew\u00f3d pod\u0142\u0105czy\u0107 pod RX1 (pin 19).<\/li>\n<\/ul>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Prosta aplikacja dla Arduino<\/h2>\n\n\n\n<p>Poni\u017cej prezentujemy prosty program, kt\u00f3ry wykonuje nast\u0119puj\u0105ce operacje:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>w\u0142\u0105czenie silnik\u00f3w robota,<\/li>\n\n\n\n<li>zerowanie robota,<\/li>\n\n\n\n<li>ustawienie pozycji domowej i ruch do pozycji domowej,<\/li>\n\n\n\n<li>wys\u0142anie do komputera przez \u0142\u0105cze szeregowe pozycji, w jakiej znajduje si\u0119 robot,<\/li>\n\n\n\n<li>wys\u0142anie do robota instrukcji w j\u0119zyku AS: DRAW,<\/li>\n\n\n\n<li>ruch liniowy robota do zdefiniowanego na Arduino punktu,<\/li>\n\n\n\n<li>wy\u0142\u0105czenie silnik\u00f3w robota.<\/li>\n<\/ul>\n\n\n\n<p>Obja\u015bnienia znajduj\u0105 si\u0119&nbsp; w komentarzach programu.<\/p>\n\n\n\n<p>Przed w\u0142\u0105czeniem programu nale\u017cy upewni\u0107 si\u0119 \u017ce robot ka\u017cdy ruch zawarty w kodzie jest bezpieczny. Ponadto nale\u017cy ustawi\u0107 robota w tryb REPEAT.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"astorino.h\"\n\nastorino r(Serial1); \/\/ wskazanie, \u017ce komunikacja b\u0119dzie odbywa\u0142a si\u0119 po Serial1\nastorino::RetVal ret; \/\/zmienna do kt\u00f3rej robot b\u0119dzie zwraca\u0142 informacje\n \n\/\/wsp\u00f3\u0142rz\u0119dne u\u017cywane do ustawienia pozycji domowej\nint home1 = 0;\nint home2 = 0;\nint home3 = -90;\nint home4 = 0;\nint home5 = -90;\nint home6 = 0;\nint home7 = 0;\n\n\/\/ punkt w formie wektora wykorzystany do polecenia LMOVE\ndouble punkt&#091;]={0,0,-85,15,-90,45};\n\nvoid setup() {\n\n\tpinMode(LED_BUILTIN, OUTPUT); \/\/ustawienie diody wbudowanej jako wyj\u015bcie\n\tSerial.begin(115200);         \/\/ rozpocz\u0119cie komunikacji Serial z komputerem (przez port programowalny) z pr\u0119dko\u015bcia 115200 baud\u00f3w\/s\n\tdelay(1000);\n\n\tif(r.Connect() == 0) \/\/otworzenie po\u0142\u0105czenia. je\u017celi otwarte, wykonaj kod\n\t{\n\t\tdigitalWrite(LED_BUILTIN, HIGH); \/\/ustawienie stanu diody wbudowanej na wysoki\n\n\t\tr.setUartTimeout(1000); \/\/czas Timeout'u na po\u0142\u0105czenie robot-p\u0142ytka\n\n\t\tr.setMotorOn(); \/\/w\u0142\u0105czenie silnik\u00f3w\n\t\tSerial.println(\"W\u0142\u0105czono silniki robota\");\n\t\tdelay(1000); \/\/ op\u00f3\u017anienia w programie dla stabilno\u015bci\n\n\t\tr.Zero(); \/\/ zerowanie robota\n\t\tdelay(1000);\n\n\t\tSerial.println(\"Wyzerowano robota\");\n\t\tdelay(1000);\n\n\t\tr.setHome((double)home1,(double)home2,(double)home3,(double)home4,(double)home5,(double)home6); \/\/ustawienie pozycji domowej robota po konwersji punktu z int na double\n\n\t\tr.HOME(30,90,80); \/\/ ruch robota do pozycji domowej\n\t\tdelay(1000);\n\n\t\tr.executeASCommand(\"DRAW 5,5,20\"); \/\/przes\u0142anie do robota komendy DRAW - przesuni\u0119cie liniowe wzgl\u0119dem BASE o x,y,z\n\n\t\t\/\/Zapytanie robota o pozycj\u0119 karezja\u0144sk\u0105 i wy\u015bwietlenie w Serial Monitorze\n\t\tret = r.Pose(); \/\/ read current position\n\t\tif (ret.returnCode == 0)\n\t\t{\n\t\t\tSerial.println(\"Pozycja kartezja\u0144ska\");\n\t\t\tSerial.print(ret.values&#091;0]); \/\/x\n\t\t\tSerial.print(\" \");\n\t\t\tSerial.print(ret.values&#091;1]); \/\/y\n\t\t\tSerial.print(\" \");\n\t\t\tSerial.println(ret.values&#091;2]); \/\/z\n\t\t\tdelay(200);\n\t\t}\n\n\t\t\/\/Zapytanie robota o pozycj\u0119 z\u0142\u0105czow\u0105 i wy\u015bwietlenie w Serial Monitorze\n\t\tret=r.JT();\n\t\t\n\t\tif (ret.returnCode == 0)\n\t\t{\n\t\t\tSerial.println(\"Pozycja z\u0142\u0105czowa\");\n\t\t\tSerial.print(ret.values&#091;0]);\n\t\t\tSerial.print(\" \");\n\t\t\tSerial.print(ret.values&#091;1]);\n\t\t\tSerial.print(\" \");\n\t\t\tSerial.print(ret.values&#091;2]);\n\t\t\tSerial.print(\" \");\n\t\t\tSerial.print(ret.values&#091;3]);\n\t\t\tSerial.print(\" \");\n\t\t\tSerial.print(ret.values&#091;4]);\n\t\t\tSerial.print(\" \");\n\t\t\tSerial.println(ret.values&#091;5]);\n\t\t}\n\n\t\tr.LMOVE(2,40,90,90,punkt,6); \/\/ ruch liniowy do punktu \"punkt\"\n\t\tdelay(1000);\n\n\t\tr.setMotorOff(); \/\/ruch robota do pozycji wy\u0142\u0105czenia silnik\u00f3w i wy\u0142\u0105czenie silnik\u00f3w.\n\t\tdelay(1000);\n\n\t\tr.Disconnect(); \/\/roz\u0142\u0105czenie\n\t\tdelay(1000);\n\n\t\tdigitalWrite(LED_BUILTIN, LOW); \/\/ustawienie stanu diody wbudowanej na niski\n\t}\n}\n\nvoid loop() {\n\t\/\/ put your main code here, to run repeatedly:\n\tdelay(100);\n}<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"link-box d-flex align-items-center\">\r\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/themes\/poradnik\/public\/images\/icons\/icon-link.svg\" alt=\"arrow\" class=\"ml-3\">\r\n\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<div><p>\u015aci\u0105gnij <a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/Prosty_Program.zip\">plik z kodem \u017ar\u00f3d\u0142owym<\/a> programu.<\/p>\n<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\n\n\n\n<p>Komunikaty odebrane przez port szeregowy komputera:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"282\" height=\"125\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image2-2.png\" alt=\"\" class=\"wp-image-23694\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Je\u017celi program utknie po wykonaniu zerowania (dotyczy starszych wersji firmware robota), nale\u017cy zresetowa\u0107 p\u0142ytk\u0119 przyciskiem <strong>Reset<\/strong>.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Zaawansowana aplikacja \u2013 sterowanie robotem<\/h2>\n\n\n\n<p>Program zaawansowany &#8211; u\u017cycie dr\u0105\u017cka analogowego i przycisk\u00f3w do sterowania robotem w przestrzeni liniowej i z\u0142\u0105czowej, zamykania i otwierania chwytaka oraz przesy\u0142ania aktualnej pozycji robota przez UART.<\/p>\n\n\n\n<p>Spos\u00f3b pod\u0142\u0105czenia peryferi\u00f3w (kliknij, aby powi\u0119kszy\u0107):<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2098\" height=\"1558\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/polaczenie_przyklad_zaawansowany.png\" alt=\"\" class=\"wp-image-23707\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/polaczenie_przyklad_zaawansowany.png 2098w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/polaczenie_przyklad_zaawansowany-840x624.png 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/polaczenie_przyklad_zaawansowany-768x570.png 768w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/polaczenie_przyklad_zaawansowany-1536x1141.png 1536w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/polaczenie_przyklad_zaawansowany-2048x1521.png 2048w\" sizes=\"auto, (max-width: 2098px) 100vw, 2098px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Gotowy program:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"astorino.h\"\n\nastorino r(Serial1); \nastorino::RetVal ret;\n\nint home1 = 0;\nint home2 = 0;\nint home3 = -90;\nint home4 = 0;\nint home5 = -90;\nint home6 = 0;\nint home7 = 0;\n\ndouble point&#091;6];\n\nint x = 0;\nint y = 0;\nint z = 0;\n\nbool gripper=0;\n\nint length = 6;\n\nint switch1=0;\n\nbool in_joint_mode=0;\n\nvoid setup()\n{\n\t\/\/ ustawienie odpowiednich tryb\u00f3w pracy I\/O\n\tpinMode(12, INPUT_PULLUP);\n\tpinMode(11, INPUT_PULLUP);\n\tpinMode(10, INPUT_PULLUP);\n\tpinMode(9, INPUT_PULLUP);\n\tpinMode(8,INPUT_PULLUP);\n\tpinMode(2, OUTPUT);\n\tpinMode(3, OUTPUT);\n\tpinMode(4, OUTPUT);\n\n\tSerial.begin(115200);\n\tdelay(1000);\n\t\n\t\/\/Polecenia wykonywane przed oddaniem kontroli do u\u017cytkownika\n  \n\tif(r.Connect() == 0)\n\t{\n\t\tr.setUartTimeout(1000);\n\t\tdigitalWrite(2,HIGH);\n\t\tr.setMotorOn();\n\t\tdelay(1000);\n\t\tSerial.println(\"W\u0142\u0105czono silniki\");\n\t\tdelay(1000);\n\t\tr.Zero();\n\t\tdelay(1000);\n\t\tSerial.println(\"Wyzerowano robota\");\n\t\tdelay(1000);\n\t\t\/\/r.setHome((double)home1,(double)home2,(double)home3,(double)home4,(double)home5,(double)home6);\n\t\tr.HOME(30,90,80);\n\t\tSerial.println(\"Robot w pozycji domowej\");\n\t\tdelay(1000);\n\t\tSerial.println(\"Sterowanie u\u017cytkownika\");\n\t\tdelay(1000);\n\t\tSerial.println(\"Tryb liniowy. X,Y\");\n\t}\n}\n\nvoid loop()\n{\n\t\/\/zmiana trybu ruchu - kartezja\u0144ski\/z\u0142\u0105czowy\n\n\tbool mode_switch = digitalRead(10);\n\t\n\tif(mode_switch==LOW &amp;&amp; in_joint_mode==0)\n\t{\n\t\tSerial.println(\"Zmieniono tryb na z\u0142\u0105czowy. 1,2\");\n\t\tin_joint_mode=1;\n\t\tswitch1=0;\n\t\tdelay(200);\n\t}\n\telse if(mode_switch==LOW)\n\t{\n\t\tSerial.println(\"Zmieniono tryb na liniowy. X,Y\");\n\t\tin_joint_mode=0;\n\t\tswitch1=0;\n\t\tdelay(200);\n\t}\n\n\t\/\/zapalenie di\u00f3d kartezja\u0144ski\/z\u0142\u0105czowy\n\n\tif (in_joint_mode)\n\t{\n\t\tdigitalWrite(3,HIGH);\n\t\tdigitalWrite(4,LOW);\n\t}\n\telse if (in_joint_mode==0)\n\t{\n\t\tdigitalWrite(4,HIGH);\n\t\tdigitalWrite(3,LOW);\n\t}\n\n\t\/\/zmiana p\u0142aszczyzn ruchu kartezja\u0144skiego\n\n\tint analog_button = digitalRead(11);\n\tif(analog_button==LOW &amp;&amp; switch1==0 &amp;&amp; in_joint_mode==0)\n\t{\n\t\tswitch1++;\n\t\tSerial.println(\"Tryb liniowy. X,Z\");\n\t\tdelay(200);\n\t}\n\telse if (analog_button==LOW &amp;&amp; switch1==1 &amp;&amp; in_joint_mode==0)\n\t{\n\t\tswitch1++;\n\t\tSerial.println(\"Tryb liniowy. Y,Z\");\n\t\tdelay(200);\n\t}\n\telse if(analog_button==LOW &amp;&amp; switch1==2 &amp;&amp; in_joint_mode==0)\n\t{\n\t\tswitch1=0;\n\t\tSerial.println(\"Tryb liniowy. X,Y\");\n\t\tdelay(200);\n\t}\n\n\t\/\/ zmiana z\u0142\u0105czy ruchu z\u0142\u0105czowego\n\n\tif(analog_button==LOW &amp;&amp; switch1==0 &amp;&amp; in_joint_mode==1)\n\t{\n\t\tswitch1++;\n\t\tSerial.println(\"Tryb z\u0142\u0105czowy. 3,4\");\n\t\tdelay(200);\n\t}\n\telse if (analog_button==LOW &amp;&amp; switch1==1 &amp;&amp; in_joint_mode==1)\n\t{\n\t\tswitch1++;\n\t\tSerial.println(\"Tryb z\u0142\u0105czowy. 5,6\");\n\t\tdelay(200);\n\t}\n\telse if(analog_button==LOW &amp;&amp; switch1==2 &amp;&amp; in_joint_mode==1)\n\t{\n\t\tswitch1=0;\n\t\tSerial.println(\"Tryb z\u0142\u0105czowy. 1,2\");\n\t\tdelay(200);\n\t}\n\n\t\/\/ odczyt warto\u015bci z wej\u015b\u0107 analogowych i sterowanie robotem w zale\u017cno\u015bci od nich w uk\u0142adzie kartezja\u0144skim\n\n\tint yValue = analogRead(A0);\n\tint xValue = analogRead(A1);\n\tif(in_joint_mode==0)\n\t{\n\t\tswitch(switch1)\n\t\t{\n\t\t\tcase 0:\n\t\t\t\/\/Poruszanie si\u0119 x,y\n\t\t\tif(xValue&lt;600)\n\t\t\t{\n\t\t\t\tx=-1;\n\t\t\t}\n\t\t\tif(xValue&gt;900)\n\t\t\t{\n\t\t\t\tx=1;\n\t\t\t}\n\t\t\tif(yValue&lt;600)\n\t\t\t{\n\t\t\t\ty=-1;\n\t\t\t}\n\t\t\tif(yValue&gt;900)\n\t\t\t{\n\t\t\t\ty=1;\n\t\t\t}\n\t\t\tif (xValue&gt;600 &amp;&amp; xValue&lt;900)\n\t\t\t{\n\t\t\t\tx=0;\n\t\t\t}\n\t\t\tif (yValue&gt;600 &amp;&amp; yValue&lt;900)\n\t\t\t{\n\t\t\t\ty=0;\n\t\t\t}\n\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\/\/Poruszanie si\u0119 x,z\n\t\t\tif(xValue&lt;600)\n\t\t\t{\n\t\t\t\tx=-1;\n\t\t\t}\n\t\t\tif(xValue&gt;900)\n\t\t\t{\n\t\t\t\tx=1;\n\t\t\t}\n\t\t\tif(yValue&lt;600)\n\t\t\t{\n\t\t\t\tz=-1;\n\t\t\t}\n\t\t\tif(yValue&gt;900)\n\t\t\t{\n\t\t\t\tz=1;\n\t\t\t}\n\t\t\tif (xValue&gt;600 &amp;&amp; xValue&lt;900)\n\t\t\t{\n\t\t\t\tx=0;\n\t\t\t}\n\t\t\tif (yValue&gt;600 &amp;&amp; yValue&lt;900)\n\t\t\t{\n\t\t\t\tz=0;\n\t\t\t}\n\t\t\tbreak;\n\t\t\n\t\t\tcase 2:\n\t\t\t\/\/Poruszanie si\u0119 y,x\n\t\t\tif(xValue&lt;600)\n\t\t\t{\n\t\t\t\ty=-1;\n\t\t\t}\n\t\t\tif(xValue&gt;900)\n\t\t\t{\n\t\t\t\ty=1;\n\t\t\t}\n\t\t\tif(yValue&lt;600)\n\t\t\t{\n\t\t\t\tz=-1;\n\t\t\t}\n\t\t\tif(yValue&gt;900)\n\t\t\t{\n\t\t\t\tz=1;\n\t\t\t}\n\t\t\tif (yValue&gt;600 &amp;&amp; yValue&lt;900)\n\t\t\t{\n\t\t\t\tz=0;\n\t\t\t}\n\t\t\tif (xValue&gt;600 &amp;&amp; xValue&lt;900)\n\t\t\t{\n\t\t\t\ty=0;\n\t\t\t}\n\t\t\tbreak;\n\t\t};\n\t\t\n\t\t\/\/informacja o aktualnej pozycji z\u0142\u0105czowej robota, wykorzystana do ruchu\n\t}\n\telse if (in_joint_mode==1)\n\t{\n\t\tret=r.JT();\n\t\t\n\t\tfor (int i=0;i&lt;6;i++)\n\t\t{\n\t\t\tpoint&#091;i]=ret.values&#091;i];\n\t\t}\n\t\t\n\t\t\/\/sterowanie robotem w zale\u017cno\u015bci od wej\u015b\u0107 analogowych w przestrzeni z\u0142\u0105czowej\n\t\tswitch(switch1)\n\t\t{\n\t\t\tcase 0:\n\t\t\t\/\/Poruszanie si\u0119 1,2\n\t\t\tif(xValue&lt;600)\n\t\t\t{\n\t\t\t\tpoint&#091;0]++;\n\t\t\t}\n\t\t\tif(xValue&gt;900)\n\t\t\t{\n\t\t\t\tpoint&#091;0]--;\n\t\t\t}\n\t\t\tif(yValue&lt;600)\n\t\t\t{\n\t\t\t\tpoint&#091;1]--;\n\t\t\t}\n\t\t\tif(yValue&gt;900)\n\t\t\t{\n\t\t\t\tpoint&#091;1]++;\n\t\t\t}\n\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\/\/Poruszanie si\u0119 3,4\n\t\t\tif(yValue&lt;600)\n\t\t\t{\n\t\t\t\tpoint&#091;2]++;\n\t\t\t}\n\t\t\tif(yValue&gt;900)\n\t\t\t{\n\t\t\t\tpoint&#091;2]--;\n\t\t\t}\n\t\t\tif(xValue&lt;600)\n\t\t\t{\n\t\t\t\tpoint&#091;3]--;\n\t\t\t}\n\t\t\tif(xValue&gt;900)\n\t\t\t{\n\t\t\t\tpoint&#091;3]++;\n\t\t\t}\n\t\t\tbreak;\n\t\t\n\t\t\tcase 2:\n\t\t\t\/\/Poruszanie si\u0119 5,6\n\t\t\tif(yValue&lt;600)\n\t\t\t{\n\t\t\t\tpoint&#091;4]--;\n\t\t\t}\n\t\t\tif(yValue&gt;900)\n\t\t\t{\n\t\t\t\tpoint&#091;4]++;\n\t\t\t}\n\t\t\tif(xValue&lt;600)\n\t\t\t{\n\t\t\t\tpoint&#091;5]--;\n\t\t\t}\n\t\t\tif(xValue&gt;900)\n\t\t\t{\n\t\t\t\tpoint&#091;5]++;\n\t\t\t}\n\t\t};\n\t}\n\n\t\/\/operacja zmiany typu zmiennych\n\tString x_s=String(x);\n\tString y_s=String(y);\n\tString z_s=String(z);\n\tString bar=\"DRAW \"+x_s+\",\"+y_s+\",\"+z_s;\n\t\n\t\/\/wysy\u0142anie komend ruchowych do robota\n\t\n\tif(in_joint_mode==0 &amp;&amp; (x!=0 || y!=0 || z!=0))\n\t{\n\t\tr.executeASCommand(bar);\n\t}\n\telse if (in_joint_mode==1)\n\t{\n\t\tr.LMOVE(2,30,100,100,point,6);\n\t}\t\n\t\n\/\/ zwracanie pozycji robota na \u017c\u0105danie\n\n\tbool pozycja = digitalRead(9);\n\t\n\tif (pozycja==LOW)\n\t{\n\t\tret = r.Pose(); \/\/ read current position\n\t\tif (ret.returnCode == 0)\n\t\t{\n\t\t\tSerial.println(\"Pozycja kartezja\u0144ska\");\n\t\t\tSerial.print(ret.values&#091;0]); \/\/x\n\t\t\tSerial.print(\" \");\n\t\t\tSerial.print(ret.values&#091;1]); \/\/y\n\t\t\tSerial.print(\" \");\n\t\t\tSerial.println(ret.values&#091;2]); \/\/z\n\t\t\tdelay(200);\n\t\t}\n\t\n\t\tret=r.JT();\n\t\tSerial.println(\"Pozycja z\u0142\u0105czowa\");\n\t\tSerial.print(ret.values&#091;0]);\n\t\tSerial.print(\" \");\n\t\tSerial.print(ret.values&#091;1]);\n\t\tSerial.print(\" \");\n\t\tSerial.print(ret.values&#091;2]);\n\t\tSerial.print(\" \");\n\t\tSerial.print(ret.values&#091;3]);\n\t\tSerial.print(\" \");\n\t\tSerial.print(ret.values&#091;4]);\n\t\tSerial.print(\" \");\n\t\tSerial.println(ret.values&#091;5]);\t\n\t}\n\n\t\/\/zaci\u015bni\u0119cie chwytaka na \u017c\u0105danie\n\t\n\tbool zgripper=digitalRead(8);\n\t\n\tif (zgripper==LOW)\n\t{\n\t\tif (gripper == 0)\n\t\t{\n\t\t\tr.executeASCommand(\"SIGNAL 57\");\n\t\t\tSerial.println(\"Zamkni\u0119to gripper\");\n\t\t\tgripper = 1;\n\t\t\tdelay(500);\n\t\t}\n\t\telse if (gripper == 1)\n\t\t{\n\t\t\tr.executeASCommand(\"SIGNAL -57\");\n\t\t\tSerial.println(\"Otwarto gripper\");\n\t\t\tgripper = 0;\n\t\t\tdelay (500);\n\t\t}\n\t}\n\n\t\/\/wy\u0142\u0105czenie robota na \u017c\u0105danie\n\n\tbool wylacznik = digitalRead(12);\n\t\n\tif (wylacznik == LOW)\n\t{ \n\t\tSerial.println(\"Wy\u0142\u0105czanie silnik\u00f3w\");\n\t\tr.HOME(50,90,80);\n\t\tdelay(1000);\n\t\tr.setMotorOff();\n\t\tdelay(1000);\n\t\tr.Disconnect();\n\t\tdigitalWrite(2,LOW);\n\t\tr.HOME(10,90,80);\n\t\tSerial.println(\"Wy\u0142\u0105czono silniki\");\n\t}\n}<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"link-box d-flex align-items-center\">\r\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/themes\/poradnik\/public\/images\/icons\/icon-link.svg\" alt=\"arrow\" class=\"ml-3\">\r\n\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<div><p>\u015aci\u0105gnij <a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/Zaawansowany_Program.zip\">plik z kodem \u017ar\u00f3d\u0142owym<\/a> programu.<\/p>\n<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\n\n\n\n<p>Opis dzia\u0142ania programu:<\/p>\n\n\n\n<p>1. Nawi\u0105zanie po\u0142\u0105czenia.<\/p>\n\n\n\n<p>2. W\u0142\u0105czenie silnik\u00f3w.<\/p>\n\n\n\n<p>3. Zerowanie robota.<\/p>\n\n\n\n<p>4. Ustawienie robota w pozycji HOME.<\/p>\n\n\n\n<p>5. Zezwolenie na sterowanie u\u017cytkownika.<\/p>\n\n\n\n<p>Sterowanie u\u017cytkownika i peryferia:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dioda pod\u0142\u0105czona pod DO 2 informuje o tym, czy zawarto po\u0142\u0105czenie z robotem.<\/li>\n\n\n\n<li>Diody pod\u0142\u0105czone pod DO 3 i 4 informuj\u0105 o tym, czy sterowanie ruchem odb\u0119dzie si\u0119 odpowiednio w trybie liniowym, czy z\u0142\u0105czowym.<\/li>\n\n\n\n<li>Przycisk pod\u0142\u0105czony pod DI 8 \u2013 wci\u015bni\u0119cie powoduje, \u017ce robot wystawia stan wysoki na wyj\u015bcie 57. Kolejne wci\u015bni\u0119cie spowoduje \u017ce robot na tym wyj\u015bciu wystawi stan niski. W naszym przypadku to wyj\u015bcie steruje chwytakiem pneumatycznym.<\/li>\n\n\n\n<li>Przycisk pod\u0142\u0105czony pod DI 9 \u2013 wci\u015bni\u0119cie powoduje zwrot do Serial Monitor pozycji kartezja\u0144skiej i z\u0142\u0105czowej, w jakiej znajduje si\u0119 robot.<\/li>\n\n\n\n<li>Przycisk pod\u0142\u0105czony pod DI 10 \u2013 wci\u015bni\u0119cie powoduje zmian\u0119 trybu ruchu ga\u0142k\u0105 analogow\u0105 mi\u0119dzy trybem kartezja\u0144skim a z\u0142\u0105czowym.<\/li>\n\n\n\n<li>Przycisk pod\u0142\u0105czony pod DI 12 \u2013 wci\u015bni\u0119cie powoduje powr\u00f3t robota do pozycji domowej, ruch robota do pozycji wy\u0142\u0105czenia silnik\u00f3w, wy\u0142\u0105czenie silnik\u00f3w i zako\u0144czenie komunikacji z robotem.<\/li>\n\n\n\n<li>Wci\u015bni\u0119cie ga\u0142ki analogowej powoduje zmian\u0119 p\u0142aszczyzny ruchu w trybie ruchu liniowego i zmian\u0119 z\u0142\u0105czy poruszanych w trybie ruchu z\u0142\u0105czowego. Wysuni\u0119cie ga\u0142ki analogowej spowoduje ruch robota w okre\u015blonym wcze\u015bniej trybie w wybranej p\u0142aszczy\u017anie \/ z u\u017cyciem wybranych z\u0142\u0105czy.<\/li>\n<\/ul>\n\n\n\n<p>Zaleca si\u0119 korzystanie z przycisk\u00f3w, gdy ga\u0142ka analogowa nie jest wysuni\u0119ta.<\/p>\n\n\n\n<p>Wszystkie akcje steruj\u0105ce za wyj\u0105tkiem wysuni\u0119cia ga\u0142ki analogowej przesy\u0142aj\u0105 komunikat o wykonanej przez nie akcji przez port szeregowy do komputera.<\/p>\n\n\n\n<p>Informacje przekazywane do komputera przez port szeregowy:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"283\" height=\"386\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/image3-1.png\" alt=\"\" class=\"wp-image-23698\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-media-text alignwide is-stacked-on-mobile has-background has-very-light-gray-background-color\" style=\"grid-template-columns:21% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"613\" height=\"734\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/konrad-kaminski-613x734.jpg\" alt=\"\" class=\"wp-image-24581 size-full\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/konrad-kaminski-613x734.jpg 613w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/konrad-kaminski.jpg 731w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p><\/p>\n\n\n\n<p>Autor artyku\u0142u:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Konrad Kami\u0144ski<\/strong><\/h2>\n\n\n\n<p>Praktykant ASTOR<\/p>\n\n\n\n<p>Student III roku kierunku Automatyka i robotyka na Politechnice Pozna\u0144skiej<\/p>\n<\/div><\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n            <div id=\"mailerlite-form_9\" data-temp-id=\"69dab955471b6\">\n                <div class=\"mailerlite-form\">\n                    <form action=\"\" method=\"post\" novalidate>\n                                                    <div class=\"mailerlite-form-title\"><h3>Newsletter Poradnika Automatyka<\/h3><\/div>\n                                                <div class=\"mailerlite-form-description\"><p>Czytaj trendy i inspiracje, podstawy automatyki, automatyk\u0119 w praktyce<\/p>\n<\/div>\n                        <div class=\"mailerlite-form-inputs\">\n                                                                                            <div class=\"mailerlite-form-field\">\n                                    <label for=\"mailerlite-9-field-email\">Email<\/label>\n                                    <input id=\"mailerlite-9-field-email\"\n                                           type=\"email\" required=\"required\"                                            name=\"form_fields[email]\"\n                                           placeholder=\"Email\"\/>\n                                <\/div>\n                                                        <div class=\"mailerlite-form-loader\">Please wait...<\/div>\n                            <div class=\"mailerlite-subscribe-button-container\">\n                                <button class=\"mailerlite-subscribe-submit\" type=\"submit\">\n                                    Zapisz si\u0119                                <\/button>\n                            <\/div>\n                            <input type=\"hidden\" name=\"form_id\" value=\"9\"\/>\n                            <input type=\"hidden\" name=\"action\" value=\"mailerlite_subscribe_form\"\/>\n                            <input type=\"hidden\" name=\"ml_nonce\" value=\"771fd51215\"\/>\n                        <\/div>\n                        <div class=\"mailerlite-form-response\">\n                                                            <h4><p>Dzi\u0119kujemy za zapis do newslettera!<\/p>\n<\/h4>\n                                                    <\/div>\n                    <\/form>\n                <\/div>\n            <\/div>\n        <script type=\"text\/javascript\" src='https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/plugins\/official-mailerlite-sign-up-forms\/assets\/js\/localization\/validation-messages.js'><\/script>\n         <script type=\"text\/javascript\"> var selectedLanguage = \"pl\"; var validationMessages = messages[\"en\"]; if(selectedLanguage) { validationMessages = messages[selectedLanguage]; } window.addEventListener(\"load\", function () { var form_container = document.querySelector(`#mailerlite-form_9[data-temp-id=\"69dab955471b6\"] form`); let submitButton = form_container.querySelector('.mailerlite-subscribe-submit'); submitButton.disabled = true; fetch('https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-admin\/admin-ajax.php', { method: 'POST', headers:{ 'Content-Type': 'application\/x-www-form-urlencoded', }, body: new URLSearchParams({ \"action\" : \"ml_create_nonce\", \"ml_nonce\" : form_container.querySelector(\"input[name='ml_nonce']\").value }) }) .then((response) => response.json()) .then((json) => { if(json.success) { form_container.querySelector(\"input[name='ml_nonce']\").value = json.data.ml_nonce; submitButton.disabled = false; } }) .catch((error) => { console.error('Error:', error); }); form_container.addEventListener('submit', (e) => { e.preventDefault(); let data = new URLSearchParams(new FormData(form_container)).toString(); let validationError = false; document.querySelectorAll('.mailerlite-form-error').forEach(el => el.remove()); Array.from(form_container.elements).forEach((input) => { if(input.type !== 'hidden') { if(input.required) { if(input.value == '') { validationError = true; let error = document.createElement(\"span\"); error.className = 'mailerlite-form-error'; error.textContent = validationMessages.required; input.after(error); return false; } } if((input.type == \"email\") && (!validateEmail(input.value))) { validationError = true; let error = document.createElement(\"span\"); error.className = 'mailerlite-form-error'; error.textContent = validationMessages.email; input.after(error); return false; } } }); if(validationError) { return false; } fade.out(form_container.querySelector('.mailerlite-subscribe-button-container'), () => { fade.in(form_container.querySelector('.mailerlite-form-loader')); }); fetch('https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-admin\/admin-ajax.php', { method: 'POST', headers:{ 'Content-Type': 'application\/x-www-form-urlencoded', }, body: data }) .then((response) => { fade.out(form_container.querySelector('.mailerlite-form-inputs'), () => { fade.in(form_container.querySelector('.mailerlite-form-response')); }); }) .catch((error) => { console.error('Error:', error); }); }); }, false); var fade = { out: function(el, fn = false) { var fadeOutEffect = setInterval(function () { if (!el.style.opacity) { el.style.opacity = 1; } if (el.style.opacity > 0) { el.style.opacity -= 0.1; } else { el.style.display = 'none'; clearInterval(fadeOutEffect); } }, 50); if( typeof (fn) == 'function') { fn(); } }, in: function(el) { var fadeInEffect = setInterval(function () { if (!el.style.opacity) { el.style.opacity = 0; } if (el.style.opacity < 1) { el.style.opacity = Number(el.style.opacity) + 0.1; } else { el.style.display = 'block'; clearInterval(fadeInEffect); } }, 50); } }; function validateEmail(email){ if(email.match( \/^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$\/ )) { return true; } return false; } <\/script> \n","protected":false},"excerpt":{"rendered":"<p>Z tego artyku\u0142u dowiesz si\u0119, jak sterowa\u0107 robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART.<\/p>\n","protected":false},"author":83,"featured_media":23706,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[234],"tags":[237],"class_list":["post-23665","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automatyka-w-praktyce","tag-astorino"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART | Poradnik Automatyka<\/title>\r\n<meta name=\"description\" content=\"Z tego artyku\u0142u dowiesz si\u0119, jak sterowa\u0107 robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/\" \/>\r\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART | Poradnik Automatyka\" \/>\r\n<meta property=\"og:description\" content=\"Z tego artyku\u0142u dowiesz si\u0119, jak sterowa\u0107 robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART.\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/\" \/>\r\n<meta property=\"og:site_name\" content=\"Poradnik Automatyka\" \/>\r\n<meta property=\"article:published_time\" content=\"2025-07-30T14:49:32+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2025-09-04T08:34:02+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/astorino-arduino-header.jpg\" \/>\r\n\t<meta property=\"og:image:width\" content=\"960\" \/>\r\n\t<meta property=\"og:image:height\" content=\"398\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\r\n<meta name=\"author\" content=\"Kamila Piechocka\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kamila Piechocka\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minuta\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/\"},\"author\":{\"name\":\"Kamila Piechocka\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/bb85922f1cba91e4049649720381de0c\"},\"headline\":\"Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART\",\"datePublished\":\"2025-07-30T14:49:32+00:00\",\"dateModified\":\"2025-09-04T08:34:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/\"},\"wordCount\":1495,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/astorino-arduino-header.jpg\",\"keywords\":[\"Astorino\"],\"articleSection\":[\"Automatyka w praktyce\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/\",\"name\":\"Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART | Poradnik Automatyka\",\"isPartOf\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/astorino-arduino-header.jpg\",\"datePublished\":\"2025-07-30T14:49:32+00:00\",\"dateModified\":\"2025-09-04T08:34:02+00:00\",\"description\":\"Z tego artyku\u0142u dowiesz si\u0119, jak sterowa\u0107 robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#primaryimage\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/astorino-arduino-header.jpg\",\"contentUrl\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/astorino-arduino-header.jpg\",\"width\":960,\"height\":398},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Automatyka w praktyce\",\"item\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/category\/automatyka-w-praktyce\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/\",\"name\":\"Poradnik Automatyka\",\"description\":\"Poradnik Automatyka to przydatne kursy, u\u017cyteczne artyku\u0142y i merytoryczne webinary dla ka\u017cdego automatyka i elektryka.\",\"publisher\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization\",\"name\":\"ASTOR\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png\",\"contentUrl\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png\",\"width\":3322,\"height\":1078,\"caption\":\"ASTOR\"},\"image\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/bb85922f1cba91e4049649720381de0c\",\"name\":\"Kamila Piechocka\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/kamila-jaworowska-n-301x301.png\",\"contentUrl\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/kamila-jaworowska-n-301x301.png\",\"caption\":\"Kamila Piechocka\"},\"description\":\"In\u017cynier ds. system\u00f3w zrobotyzowanych w firmie ASTOR.\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/autor\/kamilaj\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART | Poradnik Automatyka","description":"Z tego artyku\u0142u dowiesz si\u0119, jak sterowa\u0107 robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART.","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:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/","og_locale":"pl_PL","og_type":"article","og_title":"Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART | Poradnik Automatyka","og_description":"Z tego artyku\u0142u dowiesz si\u0119, jak sterowa\u0107 robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART.","og_url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/","og_site_name":"Poradnik Automatyka","article_published_time":"2025-07-30T14:49:32+00:00","article_modified_time":"2025-09-04T08:34:02+00:00","og_image":[{"width":960,"height":398,"url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/astorino-arduino-header.jpg","type":"image\/jpeg"}],"author":"Kamila Piechocka","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Kamila Piechocka","Szacowany czas czytania":"1 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#article","isPartOf":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/"},"author":{"name":"Kamila Piechocka","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/bb85922f1cba91e4049649720381de0c"},"headline":"Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART","datePublished":"2025-07-30T14:49:32+00:00","dateModified":"2025-09-04T08:34:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/"},"wordCount":1495,"commentCount":0,"publisher":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#primaryimage"},"thumbnailUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/astorino-arduino-header.jpg","keywords":["Astorino"],"articleSection":["Automatyka w praktyce"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/","name":"Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART | Poradnik Automatyka","isPartOf":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#primaryimage"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#primaryimage"},"thumbnailUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/astorino-arduino-header.jpg","datePublished":"2025-07-30T14:49:32+00:00","dateModified":"2025-09-04T08:34:02+00:00","description":"Z tego artyku\u0142u dowiesz si\u0119, jak sterowa\u0107 robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART.","breadcrumb":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#primaryimage","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/astorino-arduino-header.jpg","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/astorino-arduino-header.jpg","width":960,"height":398},{"@type":"BreadcrumbList","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/sterowanie-robotem-astorino-za-pomoca-mikrokontrolera-arduino-z-wykorzystaniem-komunikacji-uart\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Automatyka w praktyce","item":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/category\/automatyka-w-praktyce\/"},{"@type":"ListItem","position":2,"name":"Sterowanie robotem Astorino za pomoc\u0105 mikrokontrolera Arduino z wykorzystaniem komunikacji UART"}]},{"@type":"WebSite","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/","name":"Poradnik Automatyka","description":"Poradnik Automatyka to przydatne kursy, u\u017cyteczne artyku\u0142y i merytoryczne webinary dla ka\u017cdego automatyka i elektryka.","publisher":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization","name":"ASTOR","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png","width":3322,"height":1078,"caption":"ASTOR"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/bb85922f1cba91e4049649720381de0c","name":"Kamila Piechocka","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/image\/","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/kamila-jaworowska-n-301x301.png","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/07\/kamila-jaworowska-n-301x301.png","caption":"Kamila Piechocka"},"description":"In\u017cynier ds. system\u00f3w zrobotyzowanych w firmie ASTOR.","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/autor\/kamilaj\/"}]}},"_links":{"self":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/23665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/users\/83"}],"replies":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/comments?post=23665"}],"version-history":[{"count":3,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/23665\/revisions"}],"predecessor-version":[{"id":24583,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/23665\/revisions\/24583"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/media\/23706"}],"wp:attachment":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/media?parent=23665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/categories?post=23665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/tags?post=23665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}