{"id":2349,"date":"2019-12-09T21:17:00","date_gmt":"2019-12-09T21:17:00","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?page_id=2349"},"modified":"2019-12-27T08:55:51","modified_gmt":"2019-12-27T08:55:51","slug":"joy-radio-2-3-2","status":"publish","type":"page","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?page_id=2349","title":{"rendered":"Wieloklik"},"content":{"rendered":"<p>Autorzy: Marek D\u0105drowski, Marek Sawicki (fizyka profil og\u00f3lnooakademici)<br>Zaawansowanie: dzia\u0142a, jeszcze rozbudowywany (drobne zmiany)<br>Cel: nauka Arduino, nauka programowania i pracy w grupie (dwie osoby to ju\u017c grupa!)<br>Zastosowanie: w kolejnych, wi\u0119kszych projektach<\/p>\n<div style=\"width: 720px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-2349-1\" width=\"720\" height=\"405\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2019\/12\/MOV_9122.mp4?_=1\" \/><a href=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2019\/12\/MOV_9122.mp4\">http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2019\/12\/MOV_9122.mp4<\/a><\/video><\/div>\n<p><strong>WIELOKLIK?<\/strong><\/p>\n<p>A co\u017c to takiego? Ot\u00f3\u017c studenci zafascynowani modu\u0142em przyciski oraz 3-ma LEDami postawnowili zrealizowa\u0107&nbsp;<strong>wielostopnione sterowanie<\/strong>&nbsp;przyciskiem. Chodzi o to, aby przy u\u017cyciu tylko&nbsp;<strong>jednego przycisku<\/strong>&nbsp;mo\u017cna by\u0142o wybra\u0107&nbsp;<strong>r\u00f3\u017cne opcje<\/strong>&nbsp;\u2013 zdecydowano, \u017ce b\u0119dzie ich siedem. Czyli nie potrzebujemy a\u017c siedmiu r\u00f3\u017cnych przycisk\u00f3w (modu\u0142\u00f3w), ale tylko ten jeden \u2013 a mimo to wybieramy jedn\u0105 z siedmiu opcji. To bardzo ciekawe zagadnienie i niesamowicie u\u017cyteczne \u2013 chyba we wszystkich gadgetach elektronicznych d\u0105\u017cy si\u0119 do zmniejszenia przycisk\u00f3w nimi steruj\u0105cymi (to ze wzgl\u0119du na wszechobecn\u0105 miniaturyzycj\u0119 -we\u017amy taki smartwatch \u2013 ma on z 1000 r\u00f3\u017cnych funkcji, ale przycisk tylko jeden albo dwa!).<\/p>\n<p>C\u00f3\u017c to s\u0105 za&nbsp;<em>opcje do wyboru<\/em>&nbsp;w naszym przypadku? Na razie to \u201etylko\u201d za\u015bwiecenie konkretnymi ledami \u2013 ale w systemie binarnym, dlatego zamiast 8-LED\u00f3w mamy ich tylko 3. Kto\u015b tu jest fascynatem zer i jedynek&nbsp;<img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/12.0.0-1\/svg\/1f609.svg\" alt=\"?\"><\/p>\n<p>Wieloklik dzia\u0142a na zasadzie&nbsp;<strong>liczenia czasu od ostatniego klikni\u0119cia<\/strong> \u2013 je\u015bli klikni\u0119cie wydarzy\u0142o si\u0119 niedawno (zmienna czas_klikania, np. 800 ms) to takie klikniecie zaliczamy do kontynuowania i zwi\u0119kszamy jaki\u015b licznik, b\u0119d\u0105cy numerem wybranej opcji (zmienna licznik). Poni\u017cej schemat blokowy algorytmu (wykonany w programie https:\/\/www.draw.io\/)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2388\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2019\/12\/Untitled-Diagram.png\" alt=\"\" width=\"634\" height=\"622\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2019\/12\/Untitled-Diagram.png 634w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2019\/12\/Untitled-Diagram-300x294.png 300w\" sizes=\"auto, (max-width: 634px) 100vw, 634px\" \/><\/p>\n<p>W powy\u017cszym schemacie T1 i T2 s\u0105 kluczowymi zmiennymi: przechowuj\u0105 czas klikni\u0119cia i ostatniego klikni\u0119cia przycisku. Akcja DEBOUNCING to programowe wykluczenie drgania styk\u00f3w na przycisku, polegaj\u0105ce na zatrzymaniu programu na chwil\u0119 (zmienna <strong>czekanie<\/strong> poni\u017cej). Akcja LEDy to za\u015bwiecenie trzema ledami w kodzie binarnym zgodnie z LICZNIKIEM. Funkcja czas_ms to funkcja odczytuj\u0105ca aktualny czas, w Arduino to <a href=\"https:\/\/www.arduino.cc\/reference\/en\/language\/functions\/time\/millis\/\">millis()<\/a>. Poni\u017cej kod relizuj\u0105cy ten schemat.<\/p>\n<p>Kod w wersji 0.7, ci\u0105gle w rozbudowie cho\u0107 dzia\u0142a \ud83d\ude09<\/p>\n<pre class=\"lang:arduino decode:true \" title=\"aaaa\">#define przycisk 7 \n#define diodanr1 5 \n#define diodanr2 4 \n#define diodanr3 3 \n\nunsigned long aktualnyczas = 0;\nunsigned long roznicaczasu = 0;\nunsigned long zapamietanyczas = 0;\n\n#define czekanie 200\n#define czasklikanie 800\n\nint licznik = 0;\n\nvoid setup() {\n  pinMode(przycisk, INPUT);\/\/modul przycisku, hardware pull down\n  pinMode(diodanr1, OUTPUT);\n  pinMode(diodanr2, OUTPUT);\n  pinMode(diodanr3, OUTPUT);\n  Serial.begin(9600);\n  bity(0); \/\/LED-y wygaszone\n}\n\nvoid loop() {\n  aktualnyczas = millis();\n  roznicaczasu = aktualnyczas - zapamietanyczas;\n  \n  if (digitalRead(przycisk) == HIGH) {\n    delay(czekanie); \/\/drgania stykow, software debouncing\n    if (roznicaczasu &lt; czasklikanie ) {\n      licznik++;\n      if (licznik &gt;= 7) licznik = 0; \n      Serial.println(licznik);\n      bity(licznik);\n    }\n    else  \/\/za duzo czasu minelo, liczenie od zera\n      licznik = 0;\n    zapamietanyczas = aktualnyczas; \n  }\/\/czy przycisk wcisniety\n}\n\n\/\/wyswietalnie \"x\"-a w kodzie binarnym na trzech LED-ach\nvoid bity (int x) {\n  switch (x) {\n    case 0 :digitalWrite(diodanr3,LOW);digitalWrite(diodanr2,LOW); digitalWrite(diodanr1,LOW);\n      break;\n    case 1 : digitalWrite(diodanr3, HIGH); digitalWrite(diodanr2, LOW); digitalWrite(diodanr1, LOW);\n      break;\n    case 2 : digitalWrite(diodanr2, HIGH); digitalWrite(diodanr3, LOW); digitalWrite(diodanr1, LOW);\n      break;\n    case 3 : digitalWrite(diodanr3, HIGH); digitalWrite(diodanr2, HIGH); digitalWrite(diodanr1, LOW);\n      break;\n    case 4 : digitalWrite(diodanr1, HIGH); digitalWrite(diodanr2, LOW); digitalWrite(diodanr3, LOW);\n      break;\n    case 5 : digitalWrite(diodanr1, HIGH); digitalWrite(diodanr3, HIGH); digitalWrite(diodanr2, LOW);\n      break;\n    case 6 : digitalWrite(diodanr1, HIGH); digitalWrite(diodanr2, HIGH); digitalWrite(diodanr3, LOW);\n      break;\n    case 7 : digitalWrite(diodanr1, HIGH); digitalWrite(diodanr2, HIGH); digitalWrite(diodanr3, HIGH);\n      break;\n    default :\n      break;\n  }\n}<\/pre>\n\n\n<h2 class=\"wp-block-heading\">Dwukliki, trzykliki itd<\/h2>\n\n\n\n<p>Rozbudowa projektu o zliczanie <strong>podw\u00f3jnych<\/strong> klikni\u0119\u0107, oraz <strong>potr\u00f3jnych<\/strong> (a skoro to wysz\u0142o, to ju\u017c droga otwarta do kolejnych wiloklik\u00f3w). Spos\u00f3b post\u0119powania podobny jak poprzednio, cho\u0107 troch\u0119 si\u0119 to komplikuje&#8230; Ale uda\u0142o si\u0119 &#8211; filmik poni\u017cej przedstawia dzia\u0142aj\u0105cy uk\u0142ad, kt\u00f3ry wykrywa pojedyncze, podw\u00f3jne oraz potr\u00f3jne klikni\u0119cie &#8211; wykrywa i prze\u0142\u0105cza (zapala lub gasi) odpowiednio pierwszego, drugiego lub trzeciego LED-a.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1920\" style=\"aspect-ratio: 1080 \/ 1920;\" width=\"1080\" controls src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2019\/12\/MOV_9159.mp4\"><\/video><figcaption>Wieloklik w akcji.<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Autorzy: Marek D\u0105drowski, Marek Sawicki (fizyka profil og\u00f3lnooakademici)Zaawansowanie: dzia\u0142a, jeszcze rozbudowywany (drobne zmiany)Cel: nauka Arduino, nauka programowania i pracy w grupie (dwie osoby to ju\u017c grupa!)Zastosowanie: w kolejnych, wi\u0119kszych projektach WIELOKLIK? A co\u017c to takiego? Ot\u00f3\u017c studenci zafascynowani modu\u0142em przyciski oraz 3-ma LEDami postawnowili zrealizowa\u0107&nbsp;wielostopnione sterowanie&nbsp;przyciskiem. Chodzi o to, aby przy u\u017cyciu tylko&nbsp;jednego przycisku&nbsp;mo\u017cna by\u0142o [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":2351,"parent":1715,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ngg_post_thumbnail":0,"footnotes":""},"class_list":["post-2349","page","type-page","status-publish","has-post-thumbnail","hentry","post","post-with-thumbnail","post-with-thumbnail-large"],"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/pages\/2349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/types\/page"}],"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=2349"}],"version-history":[{"count":19,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/pages\/2349\/revisions"}],"predecessor-version":[{"id":2410,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/pages\/2349\/revisions\/2410"}],"up":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/pages\/1715"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/2351"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}