{"id":733,"date":"2018-04-23T21:37:33","date_gmt":"2018-04-23T21:37:33","guid":{"rendered":"http:\/\/hayperek.pl\/?p=733"},"modified":"2018-04-23T21:37:33","modified_gmt":"2018-04-23T21:37:33","slug":"dzwiek-cz-1","status":"publish","type":"post","link":"https:\/\/hayperek.pl\/en\/2018\/04\/23\/dzwiek-cz-1\/","title":{"rendered":"D\u017awi\u0119k &#8211; cz. 1"},"content":{"rendered":"<p>Dotychczas skupiali\u015bmy nasz\u0105 uwag\u0119 na aspektach zwi\u0105zanych g\u0142\u00f3wnie z obs\u0142uga i tworzeniem obrazu &#8211; czy to biblioteka graficzna, czy widgety, czy wreszcie ca\u0142e okna. Dlatego dzi\u015b warto po raz pierwszy zaj\u0105\u0107 si\u0119 tematem d\u017awi\u0119ku ,kt\u00f3ry wbrew pozorom jest r\u00f3wnie istotnym medium co obraz \ud83d\ude42<\/p>\n<p>Idealnym rozwi\u0105zaniem by\u0142oby oczywi\u015bcie wykorzystanie wbudowanego w nasz mikrokontroler przetwornika C\/A (<em>DAC<\/em>) i wysterowanie poprzez wzmacniacz jakiego\u015b niewielkiego g\u0142o\u015bniczka. Pozwoli\u0142oby to na odtwarzanie prostych, zmodulowanych ton\u00f3w czy nawet odgrywanie kr\u00f3tkich plik\u00f3w WAV z karty SD. Wymaga ono jednak znacznego nak\u0142adu pracy, nie b\u0119d\u0105c przy tym niezb\u0119dn\u0105\/krytyczn\u0105 dla projektu funkcjonalno\u015bci\u0105.<\/p>\n<p>Z tego powodu zdecydowa\u0142em si\u0119 na rozwi\u0105zanie o wiele prostsze &#8211; zwyk\u0142y brz\u0119czyk z wbudowanym generatorem. Nie daje nam co prawda takich mo\u017cliwo\u015bci, ale i nie wymaga te\u017c wyrafinowanego sterowania &#8211; wystarczy jeden pin GPIO \ud83d\ude42 W ten spos\u00f3b mamy wi\u0119cej czasu na zaj\u0119cie si\u0119 lepiej stron\u0105 interfejsu. <\/p>\n<blockquote><p>Co mo\u017ce by\u0107 takiego skompilowanego w pikaniu g\u0142o\u015bniczkiem?<\/p><\/blockquote>\n<p>Nic, o ile nie mieliby\u015bmy \u017cadnych plan\u00f3w co do rozbudowy i pozostali na etapie prostego brz\u0119czyka. W\u00f3wczas faktycznie mogliby\u015bmy ograniczy\u0107 ca\u0142y interfejs do jednej &#8211; dw\u00f3ch funkcji lub nawet w ca\u0142o\u015bci delegowa\u0107 sterowanie na stron\u0119 aplikacji&#8230; Ale nie tym razem! Poniewa\u017c chcemy w przysz\u0142o\u015bci u\u017cy\u0107 innej metody generowania d\u017awi\u0119ku, musimy zastanowi\u0107 si\u0119 jak stworzy\u0107 interfejs na tyle abstrakcyjny, aby nie wymaga\u0142 p\u00f3\u017aniej modyfikacji.<\/p>\n<blockquote><p>Aha&#8230; Zn\u00f3w szykuje si\u0119 podzia\u0142 na warstwy?<\/p><\/blockquote>\n<p>Zdecydowanie tak \ud83d\ude42 Niejednokrotnie zd\u0105\u017cyli\u015bmy si\u0119 ju\u017c przekona\u0107 o tym, \u017ce takie podej\u015bcie u\u0142atwia prac\u0119. Tym razem zamiast zaczyna\u0107 od strony sprz\u0119tu, spr\u00f3bujemy rozpocz\u0105\u0107 prac\u0119 od zaprojektowania interfejsu dla aplikacji. Wymagania mo\u017cna zawrze\u0107 w formie kr\u00f3tkiej listy:<\/p>\n<ul>\n<li>d\u017awi\u0119ki klawiszy,<\/li>\n<li>d\u017awi\u0119k powiadomienia (mniej wa\u017cne komunikaty),<\/li>\n<li>d\u017awi\u0119k ostrze\u017cenia,<\/li>\n<li>d\u017awi\u0119k alarmowy (awaria, istotne komunikaty),<\/li>\n<li>d\u017awi\u0119k powitalny \/ po\u017cegnalny,<\/li>\n<li>d\u017awi\u0119ki GUI,<\/li>\n<ul>\n<p>Okre\u015blamy w ten spos\u00f3b grup\u0119 dost\u0119pnych rodzaj\u00f3w alert\u00f3w d\u017awi\u0119kowych. Aplikacja wysy\u0142a\u0107 b\u0119dzie zatem jedynie \u017c\u0105danie odegrania jednego z nich do demona\/us\u0142ugi. Zdejmuje to strony aplikacji obowi\u0105zek bezpo\u015bredniego sterowania \u017ar\u00f3d\u0142em d\u017awi\u0119ku. W pierwszym, uproszczonym podej\u015bciu poszczeg\u00f3lne pozycje b\u0119d\u0105 mapowa\u0142y si\u0119 na d\u0142u\u017csze, kr\u00f3tsze, pojedyncze lub wielokrotne pikni\u0119cia brz\u0119czyka \ud83d\ude42 W momencie wprowadzenia bardziej zaawansowanego rozwi\u0105zania b\u0119dzie mo\u017cna je \u0142atwo &#8222;przepi\u0105\u0107&#8221;, aby odgrywa\u0142y np. ton o okre\u015blonej cz\u0119stotliwo\u015bci. Nie b\u0119d\u0105 przy tym wymagane \u017cadne zmiany od strony aplikacji &#8211; one nadal b\u0119d\u0105 pos\u0142ugiwa\u0107 si\u0119 tym samym zestawem dost\u0119pnych d\u017awi\u0119k\u00f3w.<\/p>\n<p>Kwestii sprz\u0119tu nie ma chyba sensu szerzej omawia\u0107 &#8211; jest niezwykle prosta. Sterowanie odbywa si\u0119 poprzez tranzystor NPN BC547C oraz rezystor ograniczaj\u0105cy pr\u0105d, kt\u00f3ry wycisza nieco niezno\u015bne piszczenie \ud83d\ude41 .<\/p>","protected":false},"excerpt":{"rendered":"<p>Dotychczas skupiali\u015bmy nasz\u0105 uwag\u0119 na aspektach zwi\u0105zanych g\u0142\u00f3wnie z obs\u0142uga i tworzeniem obrazu &#8211; czy to biblioteka graficzna, czy widgety, czy wreszcie ca\u0142e okna. Dlatego dzi\u015b warto po raz pierwszy zaj\u0105\u0107 si\u0119 tematem d\u017awi\u0119ku ,kt\u00f3ry wbrew pozorom jest r\u00f3wnie istotnym medium co obraz \ud83d\ude42 Idealnym rozwi\u0105zaniem by\u0142oby oczywi\u015bcie wykorzystanie wbudowanego w nasz mikrokontroler przetwornika C\/A [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":745,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":{"0":"post-733","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-stodni","9":"post-with-thumbnail","10":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/comments?post=733"}],"version-history":[{"count":6,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/733\/revisions"}],"predecessor-version":[{"id":747,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/733\/revisions\/747"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media\/745"}],"wp:attachment":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media?parent=733"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/categories?post=733"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/tags?post=733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}