{"id":947,"date":"2018-01-18T20:58:46","date_gmt":"2018-01-18T19:58:46","guid":{"rendered":"http:\/\/yarogniew.net\/arduino\/?p=947"},"modified":"2018-02-04T01:50:35","modified_gmt":"2018-02-04T00:50:35","slug":"rotary-encoder-w-akcji-czyli-menu-na-nokii-5110-lcd","status":"publish","type":"post","link":"https:\/\/arduino.net.pl\/index.php\/rotary-encoder-w-akcji-czyli-menu-na-nokii-5110-lcd\/","title":{"rendered":"Rotary Encoder w akcji, czyli menu na Nokii 5110 LCD"},"content":{"rendered":"<p>Szukaj\u0105c konkretnych zastosowa\u0144\u00a0enkodera rotacyjnego, o kt\u00f3rym powsta\u0142a ju\u017c <a href=\"http:\/\/yarogniew.net\/arduino\/?p=913\">notatka<\/a>, trafi\u0142em na\u00a0\u015bwietny tutorial wykorzystuj\u0105cy urz\u0105dzenie do wy\u015bwietlania prostego menu na ekranie <a href=\"http:\/\/yarogniew.net\/arduino\/?p=935\" rel=\"noopener\">Nokia 5110 LCD<\/a>. Czyli dwa grzyby w barszcz.<br \/>\nTutorial pochodzi z witryny <a href=\"http:\/\/educ8s.tv\" target=\"_blank\" rel=\"noopener\">educ8s.tv<\/a>. Program napisa\u0142 Nick Koumaris. Link do tutoriala: <a href=\"http:\/\/educ8s.tv\/arduino-rotary-encoder-menu\/\" target=\"_blank\" rel=\"noopener\">Arduino Rotary Encoder Menu<\/a><\/p>\n<h3>Po\u0142\u0105czenia:<\/h3>\n<p><a href=\"http:\/\/yarogniew.net\/arduino\/wp-content\/uploads\/2018\/01\/RE_Nokia5110_Arduino.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-953\" src=\"http:\/\/yarogniew.net\/arduino\/wp-content\/uploads\/2018\/01\/RE_Nokia5110_Arduino.png\" alt=\"\" width=\"1024\" height=\"697\" srcset=\"https:\/\/arduino.net.pl\/wp-content\/uploads\/2018\/01\/RE_Nokia5110_Arduino.png 1024w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2018\/01\/RE_Nokia5110_Arduino-300x204.png 300w, https:\/\/arduino.net.pl\/wp-content\/uploads\/2018\/01\/RE_Nokia5110_Arduino-768x523.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h3>KOD:<\/h3>\n<pre class=\"brush: plain; light: false; title: Kod:; toolbar: true; notranslate\" title=\"Kod:\">\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/ Arduino Rotary Encoder Menu \/\/\r\n\/\/ v1.0 \/\/\r\n\/\/ http:\/\/www.educ8s.tv \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n#include &lt;Adafruit_GFX.h&gt;\r\n#include &lt;Adafruit_PCD8544.h&gt;\r\n#include &lt;ClickEncoder.h&gt;\r\n#include &lt;TimerOne.h&gt;\r\n\r\nint menuitem = 1;\r\nint frame = 1;\r\nint page = 1;\r\nint lastMenuItem = 1;\r\n\r\nString menuItem1 = &quot;Contrast&quot;;\r\nString menuItem2 = &quot;Volume&quot;;\r\nString menuItem3 = &quot;Language&quot;;\r\nString menuItem4 = &quot;Difficulty&quot;;\r\nString menuItem5 = &quot;Light: ON&quot;;\r\nString menuItem6 = &quot;Reset&quot;;\r\n\r\nboolean backlight = true;\r\nint contrast=37;\r\nint volume = 50;\r\n\r\nString language&#x5B;3] = { &quot;EN&quot;, &quot;ES&quot;, &quot;EL&quot; };\r\nint selectedLanguage = 0;\r\n\r\nString difficulty&#x5B;2] = { &quot;EASY&quot;, &quot;HARD&quot; };\r\nint selectedDifficulty = 0;\r\n\r\nboolean up = false;\r\nboolean down = false;\r\nboolean middle = false;\r\n\r\nClickEncoder *encoder;\r\nint16_t last, value;\r\n\r\nAdafruit_PCD8544 display = Adafruit_PCD8544( 5, 4, 3); \/\/Download the latest Adafruit Library in order to use this constructor\r\n\r\nvoid setup() {\r\n\r\npinMode(7,OUTPUT);\r\nturnBacklightOn();\r\n\r\nencoder = new ClickEncoder(A1, A0, A2);\r\nencoder-&gt;setAccelerationEnabled(false);\r\n\r\ndisplay.begin();\r\ndisplay.clearDisplay();\r\nsetContrast();\r\n\r\nTimer1.initialize(1000);\r\nTimer1.attachInterrupt(timerIsr);\r\n\r\nlast = encoder-&gt;getValue();\r\n}\r\n\r\nvoid loop() {\r\n\r\ndrawMenu();\r\n\r\nreadRotaryEncoder();\r\n\r\nClickEncoder::Button b = encoder-&gt;getButton();\r\nif (b != ClickEncoder::Open) {\r\nswitch (b) {\r\ncase ClickEncoder::Clicked:\r\nmiddle=true;\r\nSerial.println(&quot;Clicked&quot;);\r\nbreak;\r\n}\r\n}\r\n\r\nif (up &amp;&amp; page == 1 ) {\r\n\r\nup = false;\r\nif(menuitem==2 &amp;&amp; frame ==2)\r\n{\r\nframe--;\r\n}\r\n\r\nif(menuitem==4 &amp;&amp; frame ==4)\r\n{\r\nframe--;\r\n}\r\nif(menuitem==3 &amp;&amp; frame ==3)\r\n{\r\nframe--;\r\n}\r\nlastMenuItem = menuitem;\r\nmenuitem--;\r\nif (menuitem==0)\r\n{\r\nmenuitem=1;\r\n}\r\n}else if (up &amp;&amp; page == 2 &amp;&amp; menuitem==1 ) {\r\nup = false;\r\ncontrast--;\r\nsetContrast();\r\n}\r\nelse if (up &amp;&amp; page == 2 &amp;&amp; menuitem==2 ) {\r\nup = false;\r\nvolume--;\r\n}\r\nelse if (up &amp;&amp; page == 2 &amp;&amp; menuitem==3 ) {\r\nup = false;\r\nselectedLanguage--;\r\nif(selectedLanguage == -1)\r\n{\r\nselectedLanguage = 2;\r\n}\r\n}\r\nelse if (up &amp;&amp; page == 2 &amp;&amp; menuitem==4 ) {\r\nup = false;\r\nselectedDifficulty--;\r\nif(selectedDifficulty == -1)\r\n{\r\nselectedDifficulty = 1;\r\n}\r\n}\r\n\r\nif (down &amp;&amp; page == 1) \/\/We have turned the Rotary Encoder Clockwise\r\n{\r\n\r\ndown = false;\r\nif(menuitem==3 &amp;&amp; lastMenuItem == 2)\r\n{\r\nframe ++;\r\n}else if(menuitem==4 &amp;&amp; lastMenuItem == 3)\r\n{\r\nframe ++;\r\n}\r\nelse if(menuitem==5 &amp;&amp; lastMenuItem == 4 &amp;&amp; frame!=4)\r\n{\r\nframe ++;\r\n}\r\nlastMenuItem = menuitem;\r\nmenuitem++;\r\nif (menuitem==7)\r\n{\r\nmenuitem--;\r\n}\r\n\r\n}else if (down &amp;&amp; page == 2 &amp;&amp; menuitem==1) {\r\ndown = false;\r\ncontrast++;\r\nsetContrast();\r\n}\r\nelse if (down &amp;&amp; page == 2 &amp;&amp; menuitem==2) {\r\ndown = false;\r\nvolume++;\r\n}\r\nelse if (down &amp;&amp; page == 2 &amp;&amp; menuitem==3 ) {\r\ndown = false;\r\nselectedLanguage++;\r\nif(selectedLanguage == 3)\r\n{\r\nselectedLanguage = 0;\r\n}\r\n}\r\nelse if (down &amp;&amp; page == 2 &amp;&amp; menuitem==4 ) {\r\ndown = false;\r\nselectedDifficulty++;\r\nif(selectedDifficulty == 2)\r\n{\r\nselectedDifficulty = 0;\r\n}\r\n}\r\n\r\nif (middle) \/\/Middle Button is Pressed\r\n{\r\nmiddle = false;\r\n\r\nif (page == 1 &amp;&amp; menuitem==5) \/\/ Backlight Control\r\n{\r\nif (backlight)\r\n{\r\nbacklight = false;\r\nmenuItem5 = &quot;Light: OFF&quot;;\r\nturnBacklightOff();\r\n}\r\nelse\r\n{\r\nbacklight = true;\r\nmenuItem5 = &quot;Light: ON&quot;;\r\nturnBacklightOn();\r\n}\r\n}\r\n\r\nif(page == 1 &amp;&amp; menuitem ==6)\/\/ Reset\r\n{\r\nresetDefaults();\r\n}\r\n\r\nelse if (page == 1 &amp;&amp; menuitem&lt;=4) { page=2; } else if (page == 2) { page=1; } } } void drawMenu() { if (page==1) { display.setTextSize(1); display.clearDisplay(); display.setTextColor(BLACK, WHITE); display.setCursor(15, 0); display.print(&quot;MAIN MENU&quot;); display.drawFastHLine(0,10,83,BLACK); if(menuitem==1 &amp;&amp; frame ==1) { displayMenuItem(menuItem1, 15,true); displayMenuItem(menuItem2, 25,false); displayMenuItem(menuItem3, 35,false); } else if(menuitem == 2 &amp;&amp; frame == 1) { displayMenuItem(menuItem1, 15,false); displayMenuItem(menuItem2, 25,true); displayMenuItem(menuItem3, 35,false); } else if(menuitem == 3 &amp;&amp; frame == 1) { displayMenuItem(menuItem1, 15,false); displayMenuItem(menuItem2, 25,false); displayMenuItem(menuItem3, 35,true); } else if(menuitem == 4 &amp;&amp; frame == 2) { displayMenuItem(menuItem2, 15,false); displayMenuItem(menuItem3, 25,false); displayMenuItem(menuItem4, 35,true); } else if(menuitem == 3 &amp;&amp; frame == 2) { displayMenuItem(menuItem2, 15,false); displayMenuItem(menuItem3, 25,true); displayMenuItem(menuItem4, 35,false); } else if(menuitem == 2 &amp;&amp; frame == 2) { displayMenuItem(menuItem2, 15,true); displayMenuItem(menuItem3, 25,false); displayMenuItem(menuItem4, 35,false); } else if(menuitem == 5 &amp;&amp; frame == 3) { displayMenuItem(menuItem3, 15,false); displayMenuItem(menuItem4, 25,false); displayMenuItem(menuItem5, 35,true); } else if(menuitem == 6 &amp;&amp; frame == 4) { displayMenuItem(menuItem4, 15,false); displayMenuItem(menuItem5, 25,false); displayMenuItem(menuItem6, 35,true); } else if(menuitem == 5 &amp;&amp; frame == 4) { displayMenuItem(menuItem4, 15,false); displayMenuItem(menuItem5, 25,true); displayMenuItem(menuItem6, 35,false); } else if(menuitem == 4 &amp;&amp; frame == 4) { displayMenuItem(menuItem4, 15,true); displayMenuItem(menuItem5, 25,false); displayMenuItem(menuItem6, 35,false); } else if(menuitem == 3 &amp;&amp; frame == 3) { displayMenuItem(menuItem3, 15,true); displayMenuItem(menuItem4, 25,false); displayMenuItem(menuItem5, 35,false); } else if(menuitem == 2 &amp;&amp; frame == 2) { displayMenuItem(menuItem2, 15,true); displayMenuItem(menuItem3, 25,false); displayMenuItem(menuItem4, 35,false); } else if(menuitem == 4 &amp;&amp; frame == 3) { displayMenuItem(menuItem3, 15,false); displayMenuItem(menuItem4, 25,true); displayMenuItem(menuItem5, 35,false); } display.display(); } else if (page==2 &amp;&amp; menuitem == 1) { displayIntMenuPage(menuItem1, contrast); } else if (page==2 &amp;&amp; menuitem == 2) { displayIntMenuPage(menuItem2, volume); } else if (page==2 &amp;&amp; menuitem == 3) { displayStringMenuPage(menuItem3, language&#x5B;selectedLanguage]); } else if (page==2 &amp;&amp; menuitem == 4) { displayStringMenuPage(menuItem4, difficulty&#x5B;selectedDifficulty]); } else if (page==2 &amp;&amp; menuitem == 4) { displayStringMenuPage(menuItem4, difficulty&#x5B;selectedDifficulty]); } } void resetDefaults() { contrast = 37; volume = 50; selectedLanguage = 0; selectedDifficulty = 0; setContrast(); backlight = true; menuItem5 = &quot;Light: ON&quot;; turnBacklightOn(); } void setContrast() { display.setContrast(contrast); display.display(); } void turnBacklightOn() { digitalWrite(7,LOW); } void turnBacklightOff() { digitalWrite(7,HIGH); } void timerIsr() { encoder-&gt;service();\r\n}\r\n\r\nvoid displayIntMenuPage(String menuItem, int value)\r\n{\r\ndisplay.setTextSize(1);\r\ndisplay.clearDisplay();\r\ndisplay.setTextColor(BLACK, WHITE);\r\ndisplay.setCursor(15, 0);\r\ndisplay.print(menuItem);\r\ndisplay.drawFastHLine(0,10,83,BLACK);\r\ndisplay.setCursor(5, 15);\r\ndisplay.print(&quot;Value&quot;);\r\ndisplay.setTextSize(2);\r\ndisplay.setCursor(5, 25);\r\ndisplay.print(value);\r\ndisplay.setTextSize(2);\r\ndisplay.display();\r\n}\r\n\r\nvoid displayStringMenuPage(String menuItem, String value)\r\n{\r\ndisplay.setTextSize(1);\r\ndisplay.clearDisplay();\r\ndisplay.setTextColor(BLACK, WHITE);\r\ndisplay.setCursor(15, 0);\r\ndisplay.print(menuItem);\r\ndisplay.drawFastHLine(0,10,83,BLACK);\r\ndisplay.setCursor(5, 15);\r\ndisplay.print(&quot;Value&quot;);\r\ndisplay.setTextSize(2);\r\ndisplay.setCursor(5, 25);\r\ndisplay.print(value);\r\ndisplay.setTextSize(2);\r\ndisplay.display();\r\n}\r\n\r\nvoid displayMenuItem(String item, int position, boolean selected)\r\n{\r\nif(selected)\r\n{\r\ndisplay.setTextColor(WHITE, BLACK);\r\n}else\r\n{\r\ndisplay.setTextColor(BLACK, WHITE);\r\n}\r\ndisplay.setCursor(0, position);\r\ndisplay.print(&quot;&gt;&quot;+item);\r\n}\r\n\r\nvoid readRotaryEncoder()\r\n{\r\nvalue += encoder-&gt;getValue();\r\n\r\nif (value\/2 &gt; last) {\r\nlast = value\/2;\r\ndown = true;\r\ndelay(150);\r\n}else if (value\/2 &lt;span data-mce-type=&quot;bookmark&quot; style=&quot;display: inline-block; width: 0px; overflow: hidden; line-height: 0;&quot; class=&quot;mce_SELRES_start&quot;&gt;&lt;\/span&gt;&lt; last) {\r\nlast = value\/2;\r\nup = true;\r\ndelay(150);\r\n}\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Szukaj\u0105c konkretnych zastosowa\u0144\u00a0enkodera rotacyjnego, o kt\u00f3rym powsta\u0142a ju\u017c notatka, trafi\u0142em na\u00a0\u015bwietny tutorial wykorzystuj\u0105cy urz\u0105dzenie do wy\u015bwietlania prostego menu na ekranie Nokia 5110 LCD. Czyli dwa grzyby w barszcz. Tutorial pochodzi&#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[2],"tags":[43,42],"class_list":["post-947","post","type-post","status-publish","format-standard","hentry","category-arduino","tag-nokia5110","tag-rotary_encoder"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/comments?post=947"}],"version-history":[{"count":7,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/947\/revisions"}],"predecessor-version":[{"id":956,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/947\/revisions\/956"}],"wp:attachment":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/media?parent=947"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/categories?post=947"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/tags?post=947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}