{"id":946,"date":"2017-12-05T19:44:31","date_gmt":"2017-12-05T19:44:31","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=946"},"modified":"2017-12-21T18:22:06","modified_gmt":"2017-12-21T18:22:06","slug":"sterowanie-wyswietlaczem-siedmiosegmentowym-programowanie-stukturalne","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=946","title":{"rendered":"Sterowanie wy\u015bwietlaczem siedmiosegmentowym. Programowanie strukturalne."},"content":{"rendered":"<h2>Wy\u015bwietlacze siedmiosegmentowe (sevseg).<\/h2>\n<p>Na dzisiejszym spotkaniu poznali\u015bmy jedno z wielu praktycznych zastosowa\u0144 LED\u00f3w. Siedmiosegmentowe wy\u015bwietlacze s\u0105 uk\u0142adami diod emituj\u0105cych \u015bwiat\u0142o w odpowiednim ustawieniu umo\u017cliwiaj\u0105cym wy\u015bwietlanie cyfr. Wy\u015bwietlacze te, nazywane&nbsp;<strong>sevseg<\/strong>&nbsp;(ang. seven sevseg<\/p>\n<p>segment display) s\u0105 wszechobecne w \u015bwiecie elektroniki i s\u0142u\u017c\u0105 reprezentowaniu danych w przyst\u0119pny (i niedrogi) spos\u00f3b. Tego typu wy\u015bwietlacz mo\u017ce zast\u0105pi\u0107 dro\u017csze ekrany (np. LCD) w przypadku gdy chcemy zobaczy\u0107 tylko warto\u015bci liczbowe.<\/p>\n<h2>Anoda czy katoda?<\/h2>\n<p>Najprostsze uk\u0142ady wy\u015bwietlaczy siedmiosegmentowych opieraj\u0105 si\u0119 na <strong>wsp\u00f3lnej katodzie<\/strong> lub <strong>wsp\u00f3lnej anodzie<\/strong>, co oznacza (w przypadku wsp\u00f3lnej anody), \u017ce z a\u017c 10 pin\u00f3w dwa \u015brodkowe b\u0119d\u0105 otrzymywa\u0142y napi\u0119cie, a 8 pozosta\u0142ych &#8211; uziemienia lub na odwr\u00f3t (w przypadku wsp\u00f3lnej katody).<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-974\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/segment2cathode.gif\" alt=\"\" width=\"281\" height=\"206\"><\/p>\n<p>My pracowali\u015bmy na wy\u015bwietlaczu ze wsp\u00f3ln\u0105 anod\u0105. Ka\u017cdy pin pozwala na przep\u0142yw pr\u0105du przez inny segment (LED) na obszarze wy\u015bwietlania. <strong>Segmenty maj\u0105 swoje oznaczenia od a do g<\/strong>&nbsp;(oraz kropka dziesi\u0119tna <strong>DP<\/strong> &#8211; decimal point).<br \/>\n<strong> &nbsp;<\/strong><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-975\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/segment2.gif\" alt=\"\" width=\"281\" height=\"201\"><\/p>\n<h2>Sterowanie wy\u015bwietlaczem przy pomocy arduino<\/h2>\n<p>Po pod\u0142\u0105czeniu 8 pin\u00f3w wy\u015bwietlacza do pin\u00f3w cyfrowych Arduino oraz doprowadzeniu z Arduino zasilania (<strong>dodaj\u0105c po drodze opornik<\/strong>) przyszed\u0142 czas na programowanie.<\/p>\n<p>Przed dowolnym programem nale\u017ca\u0142o przypisa\u0107 odpowiednie piny w programie.<\/p>\n<pre class=\"lang:default decode:true\" title=\"Deklaracja zmiennych\">int start=6;\r\nint end=13;\r\nint i;<\/pre>\n<p>&#8222;Start&#8221; oznacza pierwszy z u\u017cytych pin\u00f3w Arduino, &#8222;end&#8221; &#8211; ostatni. Zmienna &#8222;i&#8221; jest pomocniczym licznikiem do tablic.<\/p>\n<p>Na pr\u00f3b\u0119 stworzyli\u015bmy prosty program pozwalaj\u0105cy zapali\u0107 wszystkie segmenty wy\u015bwietlacza, co pozwoli\u0142o przetestowa\u0107 prawid\u0142owe pod\u0142\u0105czenie wy\u015bwietlacza.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-947 aligncenter\" style=\"font-size: 16px;\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/IMG_20171205_164037-300x169.jpg\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/IMG_20171205_164037-300x169.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/IMG_20171205_164037-768x432.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/IMG_20171205_164037-1024x576.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<pre class=\"lang:default mark:9-14 decode:true\" title=\"Sprawdzamy poprawno\u015b\u0107 pod\u0142\u0105czenia wy\u015bwietlacza\">void setup(){\r\n  for(i=start;i&lt;=end;i++){\r\n      pinMode(i,OUTPUT);\r\n      digitalWrite(i,1); \/\/0=LOW, 1=HIGH\r\n  }\r\n}\r\n\r\nvoid loop(){\r\n  for(i=start;i&lt;=end;i++)\r\n      digitalWrite(i,1);\r\n  delay(500);\r\n  for(i=start;i&lt;=end;i++)\r\n      digitalWrite(i,0);\r\n  delay(500);\r\n}<\/pre>\n<p>W p\u0119tlach for widocznych w bloku funkcji <strong>void loop()<\/strong> mo\u017cemy zobaczy\u0107 przypisanie stan\u00f3w wysokich i niskich ka\u017cdemu z pin\u00f3w pod\u0142\u0105czonych do wy\u015bwietlacza. Ze wzgl\u0119du na to, \u017ce jest to wy\u015bwietlacz o wsp\u00f3lnej anodzie, <strong>to stan niski powoduje zapalenie si\u0119 lampek<\/strong>, gdy\u017c nast\u0119puje wtedy przep\u0142yw pr\u0105du.<\/p>\n<h2>Wy\u015bwietlanie cyfr<\/h2>\n<p>Nast\u0119pnie rozpocz\u0119li\u015bmy tworzenie programu wy\u015bwietlaj\u0105cego konkretne cyfry. Stworzyli\u015bmy prosty program w kt\u00f3rym wprowadzili\u015bmy w\u0142asne funkcje &#8211; wy\u015bwietlaj\u0105ce jedynk\u0119 (funkcja <strong>void jedynka()<\/strong>) , dw\u00f3jk\u0119 (<strong>void dwojka()<\/strong>) oraz &#8222;czyszcz\u0105ce&#8221; wy\u015bwietlacz (funkcja <strong>void nic()<\/strong>). Budowanie takich funkcji ma ogromny sens &#8211; b\u0119d\u0105 to nasz &#8222;cegie\u0142ki&#8221;, kt\u00f3re wielokrotnie mo\u017cna p\u00f3\u017aniej u\u017cywa\u0107 &#8211; patrz g\u0142\u00f3wna funkcja loop() w Arduino.&nbsp;<\/p>\n<pre class=\"lang:default mark:2-10 decode:true\" title=\"Program #1 - pierwsze cyferki (bez tablic)\">int i;\r\nint ledA =8;\r\nint ledB = 9;\r\nint ledC = 11;\r\nint ledD = 12;\r\nint ledE = 13;\r\nint ledF = 7;\r\nint ledG = 6;\r\nint ledDP = 10;\r\n\/\/ Kolejno\u015b\u0107 podpi\u0119cia diod a - g,DP to w\u0142a\u015bnie 8,9,11,12,13,7,6,10\r\nvoid setup(){\r\n  pinMode(ledA,OUTPUT);\r\n  pinMode(ledB,OUTPUT);\r\n  pinMode(ledC,OUTPUT);\r\n  pinMode(ledD,OUTPUT);\r\n  pinMode(ledE,OUTPUT);\r\n  pinMode(ledF,OUTPUT);\r\n  pinMode(ledG,OUTPUT);\r\n  pinMode(ledDP,OUTPUT);\r\n  digitalWrite(ledDP,1);\r\n  nic();\r\n}\r\n\r\nvoid loop(){\r\n  jedynka();\r\n  delay (500);\r\n  dwojka();\r\n  delay (500);\r\n  dwojka();\r\n  delay (500);\r\n  jedynka();\r\n  delay (500);\r\n  nic();\r\n  delay (500);\r\n}\r\n\r\nvoid nic(){\r\n  digitalWrite(ledA,1);\r\n  digitalWrite(ledB,1);\r\n  digitalWrite(ledC,1);\r\n  digitalWrite(ledD,1);\r\n  digitalWrite(ledE,1);\r\n  digitalWrite(ledF,1);\r\n  digitalWrite(ledG,1);\r\n}\/\/nic\r\n\r\nvoid jedynka(){\r\n  digitalWrite(ledA,1);\r\n  digitalWrite(ledB,0);\r\n  digitalWrite(ledC,0);\r\n  digitalWrite(ledD,1);\r\n  digitalWrite(ledE,1);\r\n  digitalWrite(ledF,1);\r\n  digitalWrite(ledG,1);\r\n}\/\/jedynka\r\n\r\nvoid dwojka(){\r\n  digitalWrite(ledA,0);\r\n  digitalWrite(ledB,0);\r\n  digitalWrite(ledC,1);\r\n  digitalWrite(ledD,0);\r\n  digitalWrite(ledE,0);\r\n  digitalWrite(ledF,1);\r\n  digitalWrite(ledG,0);\r\n}\/\/dwojka<\/pre>\n<p>W naszym kodzie, s\u0105 r\u00f3wnie\u017c widoczne zmienne &#8222;ledA&#8221;, &#8222;ledB&#8221; itd (linijki 2 &#8211; 9), kt\u00f3re by\u0142y tworzone w\u0142a\u015bnie w nawi\u0105zaniu do nazewnictwa widocznym na rysunkach pokazuj\u0105cym budow\u0119 wy\u015bwietlacza (widocznym na samym pocz\u0105tku wpisu). Warto zauwa\u017cy\u0107, \u017ce op\u0142aca si\u0119 u\u017cywa\u0107 nazw zmiennych maj\u0105cych jakie\u015b konkretne znaczenie &#8211; tutaj wybrali\u015bmy nazewnictwo zaczerpni\u0119te z budowy sevseg-a.&nbsp;<\/p>\n<p>\u0141atwo zauwa\u017cy\u0107, \u017ce powy\u017cszy kod jest bardzo powtarzalny i wizualnie zajmuje sporo miejsca, przez co jest te\u017c mniej czytelny i nieprofesjonalny. W\/w program jest przyk\u0142adem <strong>programowania strukturalnego<\/strong>, czyli hierarchicznego podzia\u0142u programu na odpowiednie procedury i bloki kodu. Widoczne s\u0105 utworzone funkcje &#8222;nic()&#8221;, &#8222;jedynka()&#8221; i &#8222;dwojka()&#8221;. Analogicznie nale\u017cy tworzy\u0107 kolejne funkcje generuj\u0105ce kolejne cyfry i wywo\u0142ywa\u0107 je w void loop().<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-962\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/DSC5011-300x168.jpg\" alt=\"\" width=\"300\" height=\"168\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/DSC5011-300x168.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/DSC5011-768x431.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/DSC5011-1024x575.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Oczywi\u015bcie na tym nie poprzestali\u015bmy.<\/p>\n<h2>Program z tablicami<\/h2>\n<p>Jak wida\u0107 ka\u017cda funkcja kolejno zapala odpowiednie segmenty wy\u015bwietlacza. Jest to robione &#8222;r\u0119cznie&#8221;, tj za ka\u017cdym razem musieli\u015bmy przypisywa\u0107 ka\u017cdemu pinowi stan wysoki i niski. Znacznie bardziej optymaln\u0105 metod\u0105 by\u0142o stworzenie <strong>dwuwymiarowej tablicy.&nbsp;<\/strong>Ka\u017cdy 8-elementowy wiersz tablicy odpowiada\u0142 przypisaniu odpowiedniego stanu logicznego danemu segmentowi (jest ich osiem, gdy\u017c poza 7 segmentami jest r\u00f3wnie\u017c 'kropka dziesi\u0119tna&#8217; &#8211; decimal point). Ten proces pozwoli\u0142 nam porzuci\u0107 metod\u0119 nazywania ka\u017cdej diody po kolei (tj. &#8222;ledA&#8221;, &#8222;ledB&#8221;&#8230;).&nbsp;Na potrzeby tej metody nale\u017ca\u0142o doda\u0107 tablic\u0119 kontroln\u0105 z numerami pin\u00f3w do kt\u00f3rych pod\u0142\u0105czone s\u0105 piny wy\u015bwietlacza (linijka 2).<\/p>\n<pre class=\"lang:default mark:2-11 decode:true\" title=\"Wy\u015bwietlanie cyfr - program z tablicami\">int i;\r\nint led[8]={8,9,11,12,13,7,6,10};\r\nint digits[5][8]={ \/\/na razie definiuje tylko 5 cyfr\r\n\/\/ A B C D E F G DP\r\n  {0,0,0,0,0,0,1,0}, \/\/zero\r\n  {1,0,0,1,1,1,1,0}, \/\/wyswietla 1\r\n  {0,0,1,0,0,1,0,0}, \/\/wyswietla 2\r\n  {0,0,0,0,1,1,0,0}, \/\/wyswietla 3\r\n  {1,0,0,1,1,0,0,0}\r\n  }; \/\/...\r\n   \/\/macierz, 4 tablice, kazda z osmioma elementami\r\n\r\nvoid loop(){\r\n  jedynka();\r\n  delay (500);\r\n  dwojka();\r\n  delay (500);\r\n  trojka();\r\n  delay (500);\r\n  czworka();\r\n  delay (500);\r\n  nic();\r\n  delay (500);\r\n}\r\n\r\n  void nic(){\r\n    for(i=0;i&lt;8;i++)\r\n      digitalWrite(led[i],digits[0][i]);\r\n  }\/\/nic\r\n\r\n  void jedynka(){\r\n    for(i=0;i&lt;8;i++)\r\n      digitalWrite(led[i],digits[1][i]);\r\n  }\/\/jedynka\r\n  \r\n  void dwojka(){\r\n    for(i=0;i&lt;8;i++)\r\n      digitalWrite(led[i],digits[2][i]);\r\n  }\/\/dwojka<\/pre>\n<p>Teraz pozosta\u0142o jedynie przewidzie\u0107 kt\u00f3ry segment ma dosta\u0107 stan wysoki albo niski, by ca\u0142o\u015b\u0107 reprezentowa\u0142a dan\u0105 liczb\u0119. Kolejne liczby by\u0142y reprezentowane przez kolejne wiersze w tablicy dwuwymiarowej.<\/p>\n<p>By zrozumie\u0107 dzia\u0142anie tej tablicy nale\u017cy przyjrze\u0107 si\u0119 dzia\u0142aniu funkcji wywo\u0142uj\u0105cych kolejne liczby. Dla przyk\u0142adu: &#8222;jedynka()&#8221; zamiast odwo\u0142ywa\u0107 si\u0119 bezpo\u015brednio do ka\u017cdego pinu przez zmienne ledA, ledB, ledC&#8230; (poprzednio), zast\u0105pili\u015bmy to teraz p\u0119tl\u0105 &#8222;for&#8221; przypisuj\u0105c\u0105 kolejne stany logiczne (zera lub jedynki) z wiersza tablicy. Ka\u017cda kolumna tej tablicy odpowiada kolejnej diodzie w wy\u015bwietlaczu, czyli w pierwsza kolumna to (poprzednio) ledA (0=\u015bwieci, 1=nie \u015bwieci), druga to (poprzednio) ledB (0=\u015bwieci, 1=nie swieci) itd.<\/p>\n<p>Je\u015bli wywo\u0142ujemy jedynk\u0119, p\u0119tla &#8222;bierze&#8221; drugi wiersz w tablicy &#8222;digits[]&#8221; (uwaga: indeksowanie od zera, wi\u0119c indeks wiersza=1) i przypisuje diodzie &#8222;A&#8221; stan wysoki (obszar A nie za\u015bwieci si\u0119), diodzie &#8222;B&#8221; stan niski (dioda za\u015bwieci si\u0119). Rysowanie cyfry dwa to branie wiersza numer trzy (indeks wiersza tablicy=2) itd.<\/p>\n<p>Ta operacja zar\u00f3wno skraca kod, jak i zwi\u0119ksza jego czytelno\u015b\u0107 i wygod\u0119 dodawania kolejnych wy\u015bwietlanych liczb lub znak\u00f3w.<\/p>\n<p>Program wci\u0105\u017c mo\u017cna by\u0142o ulepszy\u0107.<\/p>\n<h2>Ostateczna wersja programu<\/h2>\n<p>Optymalizacja kodu dotyczy wywo\u0142ywania liczb &#8211; mamy wiele podobnych funkcji (jedynka(), dwojka() itd). Zamiast tworzy\u0107 kolejne funkcje stworzyli\u015bmy jedn\u0105 funkcj\u0119 <strong>void cyfra(int n)<\/strong>, kt\u00f3re wywo\u0142ywa\u0142y z tablicy dwuwymiarowej kolejne wiersze, czyli kolejne cyfry.<\/p>\n<pre class=\"lang:default mark:18-21 decode:true\" title=\"Ostateczny program - tablice i funkcja void cyfra(int)\">int i;\r\nint led[8]={8,9,11,12,13,7,6,10};\r\nint digits[5][8]={\r\n\/\/ A B C D E F G DP\r\n  {0,0,0,0,0,0,1,0}, \/\/zero\r\n  {1,0,0,1,1,1,1,0}, \/\/swieci 1\r\n  {0,0,1,0,0,1,0,0}, \/\/swieci 2\r\n  {0,0,0,0,1,1,0,0}, \/\/swieci 3\r\n  {1,0,0,1,1,0,0,0}\r\n  }; \/\/...\r\n   \/\/macierz, 4 tablice, kazda z osmioma elementami\r\n\r\nvoid setup(){\r\n    for(i=0;i&lt;8;i++)\r\n      pinMode(led[i],OUTPUT);\r\n}\r\n\r\nvoid cyfra(int nr){\r\n  for(i=0;i&lt;8;i++)\r\n    digitalWrite(led[i],digits[nr][i]);\r\n}\r\n\r\nvoid loop(){\r\n  cyfra(1);\r\n  delay (500);\r\n  cyfra(2);\r\n  delay (500);\r\n  cyfra(3);\r\n  delay (500);\r\n  cyfra(4);\r\n  delay (500);\r\n }<\/pre>\n<p>Dodawanie kolejnych liczb sta\u0142o si\u0119 niezwykle proste i przejrzyste. Program sprawia wra\u017cenie bardziej profesjonalnego i czytelnego. Uproszczone jest tak\u017ce wy\u015bwietlanie. Wystarczy rozszerzy\u0107 tablic\u0119 o kolejny wiersz i dopisa\u0107 odpowiednie stany logiczne kolejnym segmentom wy\u015bwietlacza.<\/p>\n<h2>Podsumowanie<\/h2>\n<p style=\"text-align: left;\">W tym tygodniu poznali\u015bmy czym jest wy\u015bwietlacz 7-segmentowy i w jaki spos\u00f3b funkcjonuje, odkryli\u015bmy kolejne zastosowania tablic oraz \u017ce tablica mo\u017ce by\u0107 r\u00f3wnie\u017c macierz\u0105, tj. mie\u0107 wi\u0119cej ni\u017c jeden wymiar. Ostatecznie zastosowali\u015bmy metody programowania strukturalnego, kt\u00f3re jest obok programowania obiektowego, jedn\u0105 z najszerzej stosowanych metod w \u015bwiecie programowania.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-964 aligncenter\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/DSC5013-300x168.jpg\" alt=\"\" width=\"300\" height=\"168\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/DSC5013-300x168.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/DSC5013-768x431.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/12\/DSC5013-1024x575.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<h2>Praca domowa<\/h2>\n<p>Wykorzysta\u0107 powy\u017cszy kod (np. w wirtualnym arduino) i rozbudowa\u0107 o <strong>wczytywanie cyfr z klawiatury<\/strong> (komunikacja szeregowa), czym bawili\u015bmy si\u0119 poprzednio.<\/p>\n<p style=\"text-align: right;\">Do zobaczenia w przysz\u0142ym tygodniu!<br \/>\n(c) Maciej 2017<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wy\u015bwietlacze siedmiosegmentowe (sevseg). Na dzisiejszym spotkaniu poznali\u015bmy jedno z wielu praktycznych zastosowa\u0144 LED\u00f3w. Siedmiosegmentowe wy\u015bwietlacze s\u0105 uk\u0142adami diod emituj\u0105cych \u015bwiat\u0142o w odpowiednim ustawieniu umo\u017cliwiaj\u0105cym wy\u015bwietlanie cyfr. Wy\u015bwietlacze te, nazywane&nbsp;sevseg&nbsp;(ang. seven sevseg segment display) s\u0105 wszechobecne w \u015bwiecie elektroniki i s\u0142u\u017c\u0105 reprezentowaniu danych w przyst\u0119pny (i niedrogi) spos\u00f3b. Tego typu wy\u015bwietlacz mo\u017ce zast\u0105pi\u0107 dro\u017csze ekrany (np. [&hellip;]<\/p>\n","protected":false},"author":17,"featured_media":947,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[52],"tags":[194,195,197,101,199,198,99,196],"class_list":{"0":"post-946","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-fibot","8":"tag-7-cyfr","9":"tag-7-digits","10":"tag-anoda","11":"tag-cyfra","12":"tag-funkcje","13":"tag-katoda","14":"tag-led","15":"tag-sevseg","17":"post-with-thumbnail","18":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=946"}],"version-history":[{"count":24,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/946\/revisions"}],"predecessor-version":[{"id":1015,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/946\/revisions\/1015"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/947"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}