{"id":1074,"date":"2021-04-18T15:43:31","date_gmt":"2021-04-18T14:43:31","guid":{"rendered":"http:\/\/www.igfasouza.com\/blog\/?p=1074"},"modified":"2021-04-26T14:34:09","modified_gmt":"2021-04-26T13:34:09","slug":"4x7-segment-display","status":"publish","type":"post","link":"http:\/\/www.igfasouza.com\/blog\/4x7-segment-display\/","title":{"rendered":"4&#215;7 Segment Display"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/time-zone.jpg\" alt=\"\" width=\"1338\" height=\"700\" class=\"alignnone size-full wp-image-1075\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/time-zone.jpg 1338w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/time-zone-300x157.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/time-zone-768x402.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/time-zone-1024x536.jpg 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/time-zone-624x326.jpg 624w\" sizes=\"auto, (max-width: 1338px) 100vw, 1338px\" \/><\/p>\n<p><b>How\u2019s the lad?<\/b><br \/>\n<small style=\"color:#9f9f9f\">2021\/04\/18<\/small><\/p>\n<p>This post is to show how I created an app demo to control a 4-7 segment display with a Raspberry PI. This is another blog about Java on Raspberry PI.<\/p>\n<p>It\u2019s kind of a continuation from my previous blog <a href=\"http:\/\/www.igfasouza.com\/blog\/7-segment-display\/\" rel=\"noopener\" target=\"_blank\">7-segment-display<\/a> but I pivoted the idea a little bit. I divide the app into front end and back end using React and Quarkus.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/react_quarkus.jpg\" alt=\"\" width=\"1009\" height=\"245\" class=\"alignnone size-full wp-image-1076\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/react_quarkus.jpg 1009w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/react_quarkus-300x73.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/react_quarkus-768x186.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/react_quarkus-624x152.jpg 624w\" sizes=\"auto, (max-width: 1009px) 100vw, 1009px\" \/><\/p>\n<h2>Components<\/h2>\n<ul>\n<li>1x Raspberry Pi<\/li>\n<li>1x 4-7segment display<\/li>\n<li>4x Resistor 330 ohm<\/li>\n<li>12x Jumper wires (generic)<\/li>\n<\/ul>\n<h2>Schematics<\/h2>\n<p>I have the &#8220;<strong><em>hs420561k-32<\/em><\/strong>&#8221; model.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47seg-pinout.jpg\" alt=\"\" width=\"1500\" height=\"816\" class=\"alignnone size-full wp-image-1077\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47seg-pinout.jpg 1500w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47seg-pinout-300x163.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47seg-pinout-768x418.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47seg-pinout-1024x557.jpg 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47seg-pinout-624x339.jpg 624w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><br \/>\n<small>Picture1: component Schematics<\/small><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/gpio-283x300.png\" alt=\"\" width=\"283\" height=\"300\" class=\"alignnone size-medium wp-image-1078\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/gpio-283x300.png 283w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/gpio-768x815.png 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/gpio-624x662.png 624w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/gpio.png 824w\" sizes=\"auto, (max-width: 283px) 100vw, 283px\" \/><br \/>\n<small>Table1: Pins and GPIOs mapping<\/small><\/p>\n<p style=\"background-color: #bde5f8;color: #00529b;border: 1px solid;border-radius: 2px;margin: 10px 0px;padding: 15px 10px;\"><strong>Note<\/strong>: Pi4J (by default) uses an abstract pin numbering scheme to help insulate software from hardware changes.Pi4J implements the same pin number scheme as the Wiring Pi <\/p>\n<p>This is the Number for the PI 3 B model.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2020\/09\/Pi4J_GPIO-165x300.png\" alt=\"\" width=\"165\" height=\"300\" class=\"alignnone size-medium wp-image-797\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2020\/09\/Pi4J_GPIO-165x300.png 165w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2020\/09\/Pi4J_GPIO.png 500w\" sizes=\"auto, (max-width: 165px) 100vw, 165px\" \/><br \/>\n<small>Picture2: PI4J GPIO<\/small><\/p>\n<h2>Idea<\/h2>\n<p>An application that reads available timezones from worldtimeapi.org and displays them in an autocomplete list. When a region is selected it calls the Qurakus REST API passing the current time and Quarkus set the time value on the segment display.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_app01.png\" alt=\"\" width=\"1625\" height=\"1192\" class=\"alignnone size-full wp-image-1079\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_app01.png 1625w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_app01-300x220.png 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_app01-768x563.png 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_app01-1024x751.png 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_app01-624x458.png 624w\" sizes=\"auto, (max-width: 1625px) 100vw, 1625px\" \/><br \/>\n<small>Picture3: End-to-end flow<\/small><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_sequence.png\" alt=\"\" width=\"1716\" height=\"1023\" class=\"alignnone size-full wp-image-1080\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_sequence.png 1716w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_sequence-300x179.png 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_sequence-768x458.png 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_sequence-1024x610.png 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/47segment_sequence-624x372.png 624w\" sizes=\"auto, (max-width: 1716px) 100vw, 1716px\" \/><br \/>\n<small>Picture4: Sequence Diagram<\/small><\/p>\n<p>The way that you get each digit displaying something different is to switch them on and off again, in turn, faster than the eye can observe. Using the same circuitry to control more than one \u2018thing\u2019 is called multiplexing. <\/p>\n<h2>Code<\/h2>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/><\/div><\/td><td><div class=\"java codecolorer\"><span class=\"kw1\">package<\/span> <span class=\"co2\">quarkus47segments.igor<\/span><span class=\"sy0\">;<\/span><br \/>\n...<br \/>\n<br \/>\n@Path<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;\/clock&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw1\">class<\/span> Main <span class=\"br0\">&#123;<\/span> &nbsp; &nbsp;<br \/>\n<br \/>\n<span class=\"kw1\">final<\/span> GpioController gpio <span class=\"sy0\">=<\/span> GpioFactory.<span class=\"me1\">getInstance<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; GpioPinDigitalOutput pin01 <span class=\"sy0\">=<\/span> gpio.<span class=\"me1\">provisionDigitalOutputPin<\/span><span class=\"br0\">&#40;<\/span>RaspiPin.<span class=\"me1\">GPIO_08<\/span>, <span class=\"st0\">&quot;1&quot;<\/span>, PinState.<span class=\"me1\">LOW<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n...<br \/>\n<br \/>\n&nbsp; &nbsp; @GET<br \/>\n&nbsp; &nbsp; @Path<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;\/{name}&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">public<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> greeting<span class=\"br0\">&#40;<\/span>@PathParam<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;name&quot;<\/span><span class=\"br0\">&#41;<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> name<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">throws<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+interruptedexception\"><span class=\"kw3\">InterruptedException<\/span><\/a> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Time &quot;<\/span> <span class=\"sy0\">+<\/span> name<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; setClockValue<span class=\"br0\">&#40;<\/span>name<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"st0\">&quot;hello &quot;<\/span> <span class=\"sy0\">+<\/span> name<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">public<\/span> <span class=\"kw4\">void<\/span> setClockValue<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> value<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">throws<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+interruptedexception\"><span class=\"kw3\">InterruptedException<\/span><\/a> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; ...<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">public<\/span> <span class=\"kw4\">void<\/span> display<span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span> number<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; ...<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>The code itself is pretty ugly. I could make it into a library so that everything looks nice and clean. But bla bla bla &#8230;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/code_meme01-1024x485.jpg\" alt=\"\" width=\"625\" height=\"296\" class=\"alignnone size-large wp-image-1088\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/code_meme01-1024x485.jpg 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/code_meme01-300x142.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/code_meme01-768x364.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/code_meme01-624x295.jpg 624w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/code_meme01.jpg 1143w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><br \/>\n<small>Picture5: meme<\/small><\/p>\n<p>Kudos to <a href=\"https:\/\/www.linkedin.com\/in\/elaineakemi\/\" rel=\"noopener\" target=\"_blank\">Elaine Akemi<\/a> that created the React app for me. You can get the React code <a href=\"https:\/\/github.com\/elaineakemi\/react-timezone\" rel=\"noopener\" target=\"_blank\">here<\/a>.<br \/>\nYou can get the Quarkus code on my <a href=\"https:\/\/github.com\/igfasouza\/timezone-quarkus47display\" rel=\"noopener\" target=\"_blank\">GitHub<\/a>.<\/p>\n<h2>Result<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/react01.jpg\" alt=\"\" width=\"1013\" height=\"653\" class=\"alignnone size-full wp-image-1083\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/react01.jpg 1013w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/react01-300x193.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/react01-768x495.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/react01-624x402.jpg 624w\" sizes=\"auto, (max-width: 1013px) 100vw, 1013px\" \/><br \/>\n<small>Picture6: React app with an auto-complete Combobox<\/small><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/PXL_20210417_215558015-1024x768.jpg\" alt=\"\" width=\"625\" height=\"469\" class=\"alignnone size-large wp-image-1082\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/PXL_20210417_215558015-1024x768.jpg 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/PXL_20210417_215558015-300x225.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/PXL_20210417_215558015-768x576.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/PXL_20210417_215558015-624x468.jpg 624w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><br \/>\n<small>Picture7: example<\/small><\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/mWyrUolRldE\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<h2>Links<\/h2>\n<p><a href=\"https:\/\/pi4j.com\/\" rel=\"noopener\" target=\"_blank\">https:\/\/pi4j.com\/<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/Pi4J\/pi4j\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/Pi4J\/pi4j<\/a><\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Multiplexing\" rel=\"noopener\" target=\"_blank\">https:\/\/en.wikipedia.org\/wiki\/Multiplexing<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How\u2019s the lad? 2021\/04\/18 This post is to show how I created an app demo to control a 4-7 segment display with a Raspberry PI. This is another blog about Java on Raspberry PI. It\u2019s kind of a continuation from&hellip; <a href=\"http:\/\/www.igfasouza.com\/blog\/4x7-segment-display\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1076,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,24],"tags":[17,28,13],"class_list":["post-1074","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","category-raspberry-pi","tag-java","tag-quarkus","tag-raspberry-pi"],"_links":{"self":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/comments?post=1074"}],"version-history":[{"count":18,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1074\/revisions"}],"predecessor-version":[{"id":1145,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1074\/revisions\/1145"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media\/1076"}],"wp:attachment":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media?parent=1074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/categories?post=1074"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/tags?post=1074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}