{"id":588,"date":"2017-01-30T19:22:45","date_gmt":"2017-01-30T19:22:45","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=588"},"modified":"2017-02-03T09:23:45","modified_gmt":"2017-02-03T09:23:45","slug":"processing-oscyloskop-final","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=588","title":{"rendered":"Processing &#8212; oscyloskop (fina\u0142)"},"content":{"rendered":"<h2>Oscyloskop<\/h2>\n<p><a href=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=526\">Kontynuujemy<\/a> tworzenie oscyloskopu w <a href=\"http:\/\/processing.org\">processing<\/a>u. Skupimy si\u0119 na ostatnich barkuj\u0105cych elementach -kreska przesuwaj\u0105ca si\u0119 w trakcie zbierania pomiar\u00f3w, napisy na ekranie oraz obs\u0142uga myszy (historia warto\u015bci).&nbsp;<\/p>\n<h2>Animacja kreski<\/h2>\n<p>Chc\u0119 doda\u0107 kresk\u0119 (od g\u00f3ry ekranu do do\u0142u, u mnie kolor \u017c\u00f3\u0142ty, linia bardzo cienka &#8211; na 1 pixel) przesuwaj\u0105c\u0105 si\u0119 z lewa do prawa podczas dzia\u0142ania naszego oscyloskopu. Przedstawia to sekwencja poni\u017cszych obrazk\u00f3w:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-600 size-medium\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-1-300x190.png\" width=\"300\" height=\"190\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-1-300x190.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-1-768x487.png 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-1-800x509.png 800w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-1.png 802w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/>&nbsp;&nbsp;<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-602\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-2-300x190.png\" alt=\"\" width=\"300\" height=\"190\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-2-300x190.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-2-768x487.png 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-2-800x509.png 800w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-2.png 802w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/>&nbsp;&nbsp;<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-601\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-3-300x190.png\" alt=\"\" width=\"300\" height=\"190\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-3-300x190.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-3-768x487.png 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-3-800x509.png 800w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-3.png 802w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/>&nbsp;<\/p>\n<p>Rozwi\u0105za\u0144 jest wiele, a my proponujemy nast\u0119puj\u0105ce:<\/p>\n<ol>\n<li>kasujemy star\u0105 kresk\u0119 w pozycji xPos (czyli rysujemy j\u0105 kolorem t\u0142a),<\/li>\n<li>rysujemy dalsz\u0105 cz\u0119\u015b\u0107 w\u0142a\u015bciwego wykresu,&nbsp;<\/li>\n<li>rysujemy now\u0105 kresk\u0119 w pozycji xPos+skokX (naszym ulubionym kolorem).<\/li>\n<\/ol>\n<p>Te trzy kroki powoduj\u0105, \u017ce nie musimy &#8222;od\u015bwierza\u0107&#8221; ca\u0142ego ekranu dla ka\u017cdego kawa\u0142ka krzywej na oscyloskopie (tj. nie musimy rysowa\u0107 ca\u0142ego wykresu od pocz\u0105tku, bazuj\u0105c na wcze\u015bniej zapami\u0119tanych warto\u015bciach otrzymywanych z Arduino). To rozwi\u0105zanie jest proste i dzia\u0142a fajnie, dlatego je stosujemy.<\/p>\n<pre class=\"lang:arduino decode:true\" title=\"animacja linii w okienku wykresu\">void draw(){\r\n int x=getValue(); \r\n print(\"z Arduino x=\",x);\r\n y=wspA*x;\r\n \r\n  strokeWeight(1);  \/\/grubo\u015b\u0107 kreski = 1 pixel\r\n  stroke(0);  \/\/kasowanie = kolor ekranu \r\n  line(xPos, 0, xPos, height);\r\n\r\n  strokeWeight(10);\/\/ grubo\u015b\u0107 kreski dla wykresu\r\n  stroke(0,0,255); \/\/kolor wykresu\r\n  line(xPos - skokX, poprzedniY, xPos, y);\r\n\r\n  strokeWeight(1); \/\/ponownie grubo\u015b\u0107 kreski\r\n  stroke(0,0,200);\/\/ moj ulubiony kolor\r\n  line(xPos+skokX, 0, xPos+skokX, height);\r\n   \r\n   xPos=xPos+skokX;\r\n   if (xPos&gt;=width){\r\n     xPos=0;\r\n     background(0);\r\n   }\r\n}\r\n<\/pre>\n<p>Na uwag\u0119 zas\u0142uguje<\/p>\n<ul>\n<li>ci\u0105g\u0142a &#8222;zabawa&#8221; z kolorami i grubo\u015bciami linii &#8211; oddzielnie dla kreski, oddzielnie dla tworzonego wykresu (no i kasowanie kreski musi mie\u0107 t\u0105 sam\u0105 grubo\u015b\u0107, co nasza pionowa kreska).<\/li>\n<\/ul>\n<h2>Napisy<\/h2>\n<p>S\u0105 niezb\u0119dne, aby szybko orientowa\u0107 si\u0119 jakie warto\u015bci s\u0105 rysowane &#8211; mamy wszak mo\u017cliwo\u015b\u0107 skalowania osi y, czyli zaw\u0119\u017cania\/zwi\u0119kszanie widocznego zakresu. Dodatkowo, mo\u017cna (a nawet wypada) pisa\u0107 warto\u015b\u0107 aktualnie otrzyman\u0105 z Arduino. Modyfikujemy funkcj\u0119&nbsp;<strong>setup()<\/strong> dodaj\u0105c (gdzie\u015b na koniec) nast\u0119puj\u0105ce linie<\/p>\n<pre class=\"lang:arduino decode:true\" title=\"modyfikacja setup()\">PFont f;\r\nf = createFont(\"Arial\",16,true); \/\/ Arial, 16 point, anti-aliasing on\r\ntextFont(f,36);<\/pre>\n<p>W powy\u017cszym kodzie przygotowujemy processing do pisania teks\u00f3w &#8211; pos\u0142ugujemy si\u0119 pomocnicz\u0105 zmienn\u0105 f (bez wi\u0119kszego znaczenia). Aby pisa\u0107 napisy u\u017cywamy&nbsp;<\/p>\n<pre class=\"lang:arduino decode:true\" title=\"pisanie tekst\u00f3w\">fill(0,0,100); \/\/zmieniamy kolor teksu, je\u015bli chcemy\r\ntextSize(36); \/\/zmieniamy rozmiar tekstu, je\u015bli chcemy\r\ntext(\"gawryl\", 10,100); \/\/piszemy tekst \"gawryl\" w pozycji x=10, y=100<\/pre>\n<p>Funkcja&nbsp;<strong>text()<\/strong> ma spore mo\u017cliwo\u015bci, dlatego <a href=\"https:\/\/processing.org\/reference\/text_.html\">warto zajrze\u0107 do jej instrukcji.<\/a>&nbsp;Mo\u017cna nawet u\u017cywa\u0107 jej w ten spos\u00f3b:<\/p>\n<pre class=\"lang:arduino decode:true\" title=\"automatyczna konwersja liczb\">int i=17;\r\ntext(i, 10,100); \/\/piszemy liczb\u0119 ca\u0142kowit\u0105 i\r\ntext(3.0*i, 10, 200); \/\/piszemy liczb\u0119 rzeczywist\u0105\r\nfloat f=3.14;\r\ntext(f, 10, 300);\/\/piszemy liczb\u0119 rzeczywist\u0105<\/pre>\n<p>Jak wida\u0107 konwersja typ\u00f3w na napisy nast\u0119puje automatycznie &#8211; to bardzo u\u0142atwia spraw\u0119 pisania tekst\u00f3w. Proponuj\u0119 testowa\u0107 poznane mo\u017cliwo\u015bci &#8211; ale szybko dojdziemy do etapu, gdzie napisy nachodz\u0105 na siebie, przekrywaj\u0105 si\u0119, s\u0105 nieczytelne i nale\u017cy je <strong>wyczy\u015bci\u0107<\/strong>.<\/p>\n<h2>Czyszczenie napis\u00f3w<\/h2>\n<p>Post\u0119powanie podobne do metody z animowan\u0105 lini\u0105 (z pocz\u0105tku zaj\u0119\u0107) nie jest jednak zadawalaj\u0105ce. Chodzi o to, \u017ce skoro zdecydowali\u015bmy si\u0119 na wyeliminowanie czyszczenia ekranu do minimum i kasowanie poprzenich napis\u00f3w polega na pisanie ich ponownie kolerm t\u0142a &#8211; to jednak pozostaj\u0105 jakie\u015b pozosta\u0142o\u015bci. Dlatego&#8230; <strong>proponuj\u0119<\/strong>&nbsp;ograniczy\u0107 obszar wykresu tylko do cz\u0119\u015bci okna, a nie do ca\u0142ej dost\u0119pnej <em>szeroko\u015bci<\/em> x <em>wysoko\u015bci <\/em>okienka. Dzi\u0119ki temu zabiegowi b\u0119dziemy mogli bezkarnie czy\u015bci\u0107 obszar przeznaczony do napisy (zielony prostok\u0105t na rysunku), a pozostawia\u0107 w spokoju w\u0142a\u015bciwy wykres (obszar z czarnym t\u0142em). Aby to zobrazowa\u0107 popatrzmy na rysunek:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-593\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy33b-300x190.png\" width=\"451\" height=\"286\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy33b-300x190.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy33b-768x487.png 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy33b-800x509.png 800w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy33b.png 802w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/p>\n<p>Proponuj\u0119 wi\u0119c, aby ka\u017cdorazowo funkcja <strong>draw()<\/strong> rysowa\u0142a prostok\u0105t (u mnie w kolorze zielonym) w okre\u015blonych pozycjach, kasuj\u0105c ca\u0142\u0105 zawarto\u015b\u0107 tam si\u0119 znajduj\u0105c\u0105. Nast\u0119pnie nowe napisy moga by\u0107 ju\u017c wypisywane wewn\u0105trz tego prostok\u0105tu, bez brzydkich artefakt\u00f3w z poprzedniej metody. Dalej nast\u0119puje rysowanie w\u0142a\u015bciwego wykresu i pionowej kreski, od kt\u00f3rej rozpocz\u0119li\u015bmy nasze zaj\u0119cia.<\/p>\n<p>Pomys\u0142 z zielonym obszarem oczywi\u015bcie wymaga zmiany wsp\u00f3\u0142czynnik\u00f3w skalowania <strong>wspA<\/strong> i&nbsp;<strong>wspB<\/strong> prostej dopasowuj\u0105cej wczytany <strong>x<\/strong> z Arduino na wsp\u00f3\u0142rz\u0119dn\u0105&nbsp;<strong>y<\/strong> okienka processinga. Powodzenia!<\/p>\n<h2>Historia wykresu<\/h2>\n<p>Chodzi o to, aby mo\u017cna by\u0142o zatrzyma\u0107 kre\u015blenie wykresu (to ju\u017c mamy obs\u0142ugiwane) a dodatkowo aby mo\u017cna by\u0142o lewym klawiszem myszy klikn\u0105\u0107 i sprawdzi\u0107 (wypisa\u0107 w zielonym obszarze) warto\u015b\u0107 wykresu. Musimy wi\u0119c pami\u0119ta\u0107 poprzednie pomiary &#8211; b\u0119dziemy je przechowywa\u0107 w pomocniczych tablicach. Dlatego wprowadzamy zmienne globalne<\/p>\n<pre class=\"lang:default decode:true\" title=\"zmienne globalne do historii\">int[] values;\r\nfloat[] times;\r\n\r\nvoid setup(){\r\n<\/pre>\n<p>Deklaracj\u0119 tablic&nbsp;<strong>values<\/strong> oraz&nbsp;<strong>times<\/strong> umieszczamy gdzie\u015b na pocz\u0105tku kodu, aby zmienne te by\u0142y widoczne wewn\u0105trz wszystkich funkcji poni\u017cej &#8211; a wi\u0119c setup(), getValue() oraz draw(). Nast\u0119pnie modyfikujemy funkcj\u0119 setup() o utworzenie konkretnych rozmiar\u00f3w tych tablic:<\/p>\n<pre class=\"lang:default decode:true\" title=\"modyfikacja setup()\">values = new int[width];\r\ntimes = new float[width];\r\n<\/pre>\n<p>Nie wnikaj\u0105c w zawi\u0142o\u015bci dynamicznego przydzielania pami\u0119ci &#8211; powy\u017csze linie&nbsp;tworz\u0105 teyle element\u00f3w tablicy values oraz times, jaka jest szeroko\u015b\u0107 naszego okienka z wykresem. Przy okazji wida\u0107, \u017ce skoro Arduino nadaje do nas liczby z zakresu 0..1023 to na ich przechowywanie przygotowa\u0142em tablic\u0119 liczb ca\u0142kowitch, natomiast druga tablica przechowuje liczby rzeczywiste. Ta druga tablica b\u0119dzie notowa\u0107 mi czas odebrania (w sekundach) przez processing konkretnej liczby &#8211; bardzo przydatne w p\u00f3\u017aniejszej pracy z oscyloskopem.<\/p>\n<p>Modyfikujemy funkcj\u0119 odbieraj\u0105c\u0105 dane z portu szeregowego o fragment wype\u0142niaj\u0105cy nasze tablice:<\/p>\n<pre class=\"lang:arduino mark:6,7 decode:true\" title=\"modyfikacja funkcji getValue()\">int getValue(){\r\n  int value = -1;\r\n  while (port.available() &gt;= 3){\r\n    if (port.read() == 0xff){\r\n       value = (port.read() &lt;&lt;8) | (port.read());\r\n       values[xPos]=value;\r\n       times[xPos]=millis()\/1000.0;\r\n    }\/\/if\r\n  }\/\/while\r\n  return value;\r\n}\/\/getValue<\/pre>\n<p>Zdecydowa\u0142em si\u0119 na zapisywanie liczb do tablic z wykorzystaniem zmiennej&nbsp;<strong>xPos<\/strong> &#8211; takie rozwi\u0105zanie jest sprytne, ale b\u0119dzie poci\u0105ga\u0142o za sob\u0105 pewne nast\u0119pstwa. Przy okazji poznajemy now\u0105 funkcj\u0119 processinga <a href=\"https:\/\/processing.org\/reference\/millis_.html\">millis()<\/a> &#8211; kt\u00f3ra, podobnie jak w Arduino, zwraca czas dzia\u0142ania programu w milisekundach &#8211; dzi\u0119ki temu zapisujemy czas &#8222;odebrania&#8221; danej nades\u0142anej z Arduino. Liczb\u0119 t\u0105 dziel\u0119 przez 1000.0 aby mie\u0107 warto\u015b\u0107 w sekundach (z przecinkiem &#8211; jak w Polsce lubimy).<\/p>\n<h2>Obs\u0142uga myszy &#8211; historia<\/h2>\n<p>M\u00f3wili\u015bmy o obs\u0142udze myszy sprawdzaj\u0105c <strong>zmienn\u0105<\/strong> <a href=\"https:\/\/processing.org\/reference\/mousePressed.html\">mousePressed<\/a> &#8211; dzi\u0119ki czemu wiemy, \u017ce wci\u015bni\u0119to przycisk myszy. Ale taki spos\u00f3b stosujemy wewn\u0105trz funkcji <strong>draw()<\/strong>, a my chcemy zatrzyma\u0107 kre\u015blenie wykresu (pomijaj\u0105c wywo\u0142anie funkcji <strong>draw()<\/strong>) a jednocze\u015bnie obs\u0142u\u017cy\u0107 zdarzenia z myszy. Dlatego proponuj\u0119 zrobi\u0107 to tak:<\/p>\n<pre class=\"lang:arduino decode:true \" title=\"Historia pomiar\u00f3w\">void mousePressed() {\r\n  int i = (mouseX\/skokX)*skokX;\r\n\/\/pomocnicze linie\r\n  print(\"x= \",mouseX,i); \r\n  print(\" historia= \",values[i]); \r\n  println(\" \", i]);\r\n\/\/w\u0142a\u015bciwe wypisywanie\r\n  fill(0,200,0);\/\/kolor czyszczenia prostokata\r\n  rect(0,height-50, width, height);\r\n  fill(255);\/\/kolor dlugopisu\r\n  text(times[i], 300, height-20);\r\n  text(values[i], 200, height-20);\r\n}\r\n\r\n<\/pre>\n<p>Specjalna funkcja o nazwie <a href=\"https:\/\/processing.org\/reference\/mousePressed_.html\">mousePressed()<\/a> b\u0119dzie wywo\u0142ywa\u0107 si\u0119 automatycznie za ka\u017cdym razem, gdy mysz b\u0119dzie klikana. My musimy wpisa\u0107 tylko odpowiedni kod.<\/p>\n<p>M\u00f3j kod ma a\u017c 3 linie pomocniczych wypisywa\u0144 &#8212; do usuni\u0119cia w finalnej wersji programiku. Zmienna&nbsp;<strong>i<\/strong> potrzeba mi jest po to, aby przeliczy\u0107 wsp\u00f3\u0142rz\u0119dn\u0105 x-ow\u0105 kursora myszki na odpowiedni indeks w tablicy &#8211; wszak nasz oscyloskop wyposa\u017cyli\u015bmy w mo\u017cliwo\u015b\u0107 rysowania punkt\u00f3w rzadko lub g\u0119sto (decyduje o tym zmienna skokX, obs\u0142ugiwana z klawiatury). Skoro wi\u0119c dwuktornie odwo\u0142uj\u0119 si\u0119 do tego samego indeksu, wypisuj\u0105c warto\u015b\u0107 <strong>times<\/strong> oraz&nbsp;<strong>values<\/strong> &#8211;&nbsp;nawet w finalnej wersji, pozbawionej pomocniczych print-\u00f3w &#8211; &nbsp;to nie licz\u0119 tego ka\u017cdorazowo, tylko przechowuj\u0119 go w zmiennej.<\/p>\n<p>Ja swoje napisy rysuj\u0119 20 pikseli od do\u0142u ekranu, w pozycjach 200 i 300 (licz\u0105c od &nbsp;lewej strony). To jest w obszarze mojego &#8222;zielonego prostok\u0105ta&#8221;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-606\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-7-300x190.png\" width=\"500\" height=\"317\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-7-300x190.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-7-768x487.png 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-7-800x509.png 800w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/01\/oscy3-7.png 802w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/p>\n<h2>Czego si\u0119 dzi\u015b nauczy\u0142e\u015b<\/h2>\n<ul>\n<li>pisanie tekst\u00f3w<\/li>\n<li>tworzenie dynamicznych tablic<\/li>\n<li>(inna) obs\u0142uga myszy<\/li>\n<\/ul>\n<h2>(ci\u0105gle) pozostaje kilka kwestii do rozwi\u0105zania:<\/h2>\n<ul>\n<li><del>poprawne wczytywanie liczb (z Arduino wysy\u0142amy 0..1023, a processing &#8222;widzi&#8221; tylko jakie\u015b ma\u0142e liczby, &lt;30?)<\/del><\/li>\n<li><del>skalowanie wykresu &#8211; czyli chcemy mie\u0107 tak, by liczby z zakresu 0..1023 zawsze mie\u015bci\u0142y si\u0119 na ekranie, a nie &#8222;wyskakiwa\u0142y&#8221; poza aktualn\u0105 wysoko\u015b\u0107 ekranu<\/del><\/li>\n<li><del>skalowanie minimalnej liczby (wi\u0119cej skalowa\u0144)<\/del><\/li>\n<li><del>przesuwanie wykresu g\u00f3ra\/d\u00f3\u0142 (wi\u0119cej skalowa\u0144)<\/del><\/li>\n<li><del>obs\u0142uga myszki i wy\u015bwietlanie dowolnych warto\u015bci z historii wykresu<\/del><\/li>\n<li><del>pisanie napis\u00f3w w oknie processinga (np. liczb z warto\u015bciami na wykresach)<\/del><\/li>\n<li><del>pisanie skali na wykresie (np. mL i ML z brzegu okienka)<\/del><\/li>\n<li><del>podpis osi x &#8211; mo\u017cna u\u017cy\u0107 czasu do opisu tej osi, b\u0119dzie wida\u0107 kiedy odebrano konkretn\u0105 dan\u0105<\/del><\/li>\n<li>\u0142adniejsza grafika<\/li>\n<\/ul>\n<p>Zapraszam na kolejne zaj\u0119cia, na kt\u00f3rych pod\u0142\u0105czymy nasz oscyloskop do czujki pola magnetczynego oraz do fotorezystora.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oscyloskop Kontynuujemy tworzenie oscyloskopu w processingu. Skupimy si\u0119 na ostatnich barkuj\u0105cych elementach -kreska przesuwaj\u0105ca si\u0119 w trakcie zbierania pomiar\u00f3w, napisy na ekranie oraz obs\u0142uga myszy (historia warto\u015bci).&nbsp; Animacja kreski Chc\u0119 doda\u0107 kresk\u0119 (od g\u00f3ry ekranu do do\u0142u, u mnie kolor \u017c\u00f3\u0142ty, linia bardzo cienka &#8211; na 1 pixel) przesuwaj\u0105c\u0105 si\u0119 z lewa do prawa podczas [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[52],"tags":[116,118,109,120,121,42,119,111,117],"class_list":["post-588","post","type-post","status-publish","format-standard","hentry","category-fibot","tag-flaga","tag-funkcja-liniowa","tag-grafika","tag-key","tag-keyreleased","tag-processing","tag-rect","tag-serial-write","tag-skalowanie"],"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/588","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\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=588"}],"version-history":[{"count":14,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/588\/revisions"}],"predecessor-version":[{"id":608,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/588\/revisions\/608"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}