{"id":310,"date":"2018-09-07T07:31:36","date_gmt":"2018-09-07T07:31:36","guid":{"rendered":"https:\/\/ta-laboratories.com\/blog\/?p=310"},"modified":"2018-09-07T16:48:59","modified_gmt":"2018-09-07T16:48:59","slug":"recreating-a-7-segment-display-with-adafruit-gfx-ssd1306-oled","status":"publish","type":"post","link":"https:\/\/ta-laboratories.com\/blog\/2018\/09\/07\/recreating-a-7-segment-display-with-adafruit-gfx-ssd1306-oled\/","title":{"rendered":"Recreating a 7 segment display with Adafruit GFX &#038; SSD1306 OLED"},"content":{"rendered":"<p><strong>Git Repository &#8211;<br \/>\n<a href=\"https:\/\/bitbucket.org\/ta-labs\/7-seg_adagfx_ssd1306\/src\/master\/\" rel=\"noopener\" target=\"_blank\">7-seg_adagfx_ssd1306.git<\/a><br \/>\n<\/strong><br \/>\n<strong>I had a project come up recently where I needed to display some numbers that looked like an old 7-segment display. The only problem, I was using a 128&#215;64 OLED driven by a SSD1306 driver. Luckily this display is a lot more capable than the vacuum fluorescent and 7-segment displays of the past, we should be able to overcome this dilemma with some simple code.<\/p>\n<p>First things first before we can write any code, we first have to understand the basic operation of a 7-segment display. Lets start by looking at why they call it a 7-segment display. <\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ta-laboratories.com\/blog\/wp-content\/uploads\/2018\/09\/330px-7_Segment_Display_with_Labeled_Segments.svg_.png\" alt=\"\" width=\"330\" height=\"440\" class=\"alignnone size-full wp-image-317\" srcset=\"https:\/\/ta-laboratories.com\/blog\/wp-content\/uploads\/2018\/09\/330px-7_Segment_Display_with_Labeled_Segments.svg_.png 330w, https:\/\/ta-laboratories.com\/blog\/wp-content\/uploads\/2018\/09\/330px-7_Segment_Display_with_Labeled_Segments.svg_-225x300.png 225w\" sizes=\"auto, (max-width: 330px) 100vw, 330px\" \/><\/p>\n<p><strong>It&#8217;s pretty obvious when you look at the diagram above where the name came from, any digit 0-9 can be shown by activating the right combination of 7 segments. That&#8217;s it, pretty simple right! Now how can we do this pragmatically? <\/p>\n<p>One easy solution is to use something called a truth table, to store our truth table we will need to create a multi-dimensional array. Multi-dimensional arrays may sound scary if you have never used one, however if you are familiar with basic arrays already then you can think of them simply as an array of arrays.<\/p>\n<p><a href=\"https:\/\/www.arduino.cc\/reference\/en\/language\/variables\/data-types\/array\/\" rel=\"noopener\" target=\"_blank\">Arduino Reference &#8211; Arrays<\/a><\/p>\n<p>We will define our array as a const integer since it will never change, we will need 10 unique arrays to store 0-9 values with 7 positions in each array, one for each segment.<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ta-laboratories.com\/blog\/wp-content\/uploads\/2018\/09\/truth-table.png\" alt=\"\" width=\"395\" height=\"477\" class=\"alignnone size-full wp-image-352\" srcset=\"https:\/\/ta-laboratories.com\/blog\/wp-content\/uploads\/2018\/09\/truth-table.png 395w, https:\/\/ta-laboratories.com\/blog\/wp-content\/uploads\/2018\/09\/truth-table-248x300.png 248w\" sizes=\"auto, (max-width: 395px) 100vw, 395px\" \/><\/p>\n<p><strong><\/p>\n<div class=\"codecolorer-container c blackboard\" style=\"overflow:auto;white-space:nowrap;width:300px;\"><div class=\"c codecolorer\"><span class=\"co1\">\/\/ define segment truth table for each digit<\/span><br \/>\n<span class=\"kw4\">static<\/span> <span class=\"kw4\">const<\/span> <span class=\"kw4\">int<\/span> digit_array<span class=\"br0\">&#91;<\/span><span class=\"nu0\">10<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">7<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 0<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 1<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 2<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 3<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 4<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 5<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 6<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 7<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 8<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span> &nbsp; <span class=\"co1\">\/\/ 9<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><\/strong><br \/>\n<strong><br \/>\nLets take a look at the function render_digit() from the example code. <\/p>\n<p>Parameters: render_digit(x_pos, y_pos, digit, color)<\/p>\n<p>The default starting position is x0,y0 which will render in the top left corner of the screen, to add an offset use X_pos\/Y_pos. We use a for loop to run through our truth table and check which segments need to be active for the currently selected (digit). We then use a switch case to draw a rectangle to display any active segments. Note this will only display a single digit if called, to display multiple digits check the display_digits() function!<\/strong><\/p>\n<div class=\"codecolorer-container c blackboard\" style=\"overflow:auto;white-space:nowrap;width:500px;height:300px;\"><div class=\"c codecolorer\"><span class=\"kw4\">void<\/span> render_digit<span class=\"br0\">&#40;<\/span><span class=\"kw4\">uint8_t<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"kw4\">uint8_t<\/span> pos_y<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw4\">uint8_t<\/span> digit<span class=\"sy0\">,<\/span> <span class=\"kw4\">uint8_t<\/span> color<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ loop through 7 segments<\/span><br \/>\n&nbsp; <span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">uint8_t<\/span> i <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span> i <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">7<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">++<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; bool seg_on <span class=\"sy0\">=<\/span> digit_array<span class=\"br0\">&#91;<\/span>digit<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ if seg_on is true draw segment<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>seg_on<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">switch<\/span> <span class=\"br0\">&#40;<\/span>i<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG a<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">10<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG b<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">10<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">12<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG c<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">20<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG d<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">4<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">12<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG e<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">5<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG f<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">6<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">10<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG g<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; seg_on <span class=\"sy0\">=<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p><strong>So now that we have a grasp on rendering a single digit lets try rendering multiple! We will use the modulo operation to pull each digit from an integer and place each into an array. Then we render that digit in the appropriate location based on the starting position and the character spacing defined. <\/strong><\/p>\n<div class=\"codecolorer-container c blackboard\" style=\"overflow:auto;white-space:nowrap;width:500px;\"><div class=\"c codecolorer\"><span class=\"kw4\">void<\/span> render_digits<span class=\"br0\">&#40;<\/span><span class=\"kw4\">uint8_t<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"kw4\">uint8_t<\/span> pos_y<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"kw4\">uint8_t<\/span> spacing_x<span class=\"sy0\">,<\/span> <span class=\"kw4\">uint16_t<\/span> digit<span class=\"sy0\">,<\/span> <span class=\"kw4\">uint8_t<\/span> color<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"kw4\">uint8_t<\/span> digit_array<span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span>digit <span class=\"sy0\">\/<\/span> <span class=\"nu0\">100<\/span> <span class=\"sy0\">%<\/span> <span class=\"nu0\">10<\/span><span class=\"sy0\">,<\/span> digit <span class=\"sy0\">\/<\/span> <span class=\"nu0\">10<\/span> <span class=\"sy0\">%<\/span> <span class=\"nu0\">10<\/span><span class=\"sy0\">,<\/span> digit <span class=\"sy0\">%<\/span> <span class=\"nu0\">10<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>digit <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">99<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; render_digit<span class=\"br0\">&#40;<\/span>pos_x<span class=\"sy0\">,<\/span> pos_y<span class=\"sy0\">,<\/span> digit_array<span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>digit <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">9<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; render_digit<span class=\"br0\">&#40;<\/span>pos_x <span class=\"sy0\">+<\/span> spacing_x<span class=\"sy0\">,<\/span> pos_y<span class=\"sy0\">,<\/span> digit_array<span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; render_digit<span class=\"br0\">&#40;<\/span>pos_x <span class=\"sy0\">+<\/span> <span class=\"br0\">&#40;<\/span>spacing_x <span class=\"sy0\">*<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> pos_y<span class=\"sy0\">,<\/span> digit_array<span class=\"br0\">&#91;<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p><\/strong><br \/>\n<\/strong><\/p>\n<p><strong>That&#8217;s it, pretty simple right? Fun fact this code could be modified and used to drive a real 7 segment display too, all that would be needed is to configure 7 GPIO pins and toggle them in the render_digit() switch case.<br \/>\n<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ta-laboratories.com\/blog\/wp-content\/uploads\/2018\/09\/display-7seg-225x300.jpg\" alt=\"\" width=\"225\" height=\"300\" class=\"alignnone size-medium wp-image-333\" srcset=\"https:\/\/ta-laboratories.com\/blog\/wp-content\/uploads\/2018\/09\/display-7seg-225x300.jpg 225w, https:\/\/ta-laboratories.com\/blog\/wp-content\/uploads\/2018\/09\/display-7seg-768x1024.jpg 768w, https:\/\/ta-laboratories.com\/blog\/wp-content\/uploads\/2018\/09\/display-7seg.jpg 960w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/p>\n<p><strong>Arduino code!<\/strong><\/p>\n<p><strong>Adafruit Libraries:<\/strong><br \/>\n<a href=\"https:\/\/github.com\/adafruit\/Adafruit-GFX-Library\" rel=\"noopener\" target=\"_blank\">Git-hub Adafruit-GFX Library<\/a><br \/>\n<a href=\"https:\/\/github.com\/adafruit\/Adafruit_SSD1306\" rel=\"noopener\" target=\"_blank\">Git-hub Adafruit-SSD1306 Library<\/a><\/p>\n<div class=\"codecolorer-container c blackboard\" style=\"overflow:auto;white-space:nowrap;width:500px;height:300px;\"><div class=\"c codecolorer\"><span class=\"co1\">\/\/ EXAMPLE 7 SEGMENT DISPLAY RENDERING FOR ADAFRUIT_GFX &amp; SSD1306<\/span><br \/>\n<span class=\"co1\">\/\/ Copyright 2018 T&amp;A Laboratories LLC<\/span><br \/>\n<span class=\"co1\">\/\/ writen by: Aaron Williams on 9\/7\/2018<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Do not distribute without permission of the author<\/span><br \/>\n<span class=\"co1\">\/\/ !!!!!!!<\/span><br \/>\n<br \/>\n<span class=\"co2\">#include &lt;Wire.h&gt;<\/span><br \/>\n<span class=\"co2\">#include &lt;Adafruit_GFX.h&gt;<\/span><br \/>\n<span class=\"co2\">#include &lt;Adafruit_SSD1306.h&gt;<\/span><br \/>\n<br \/>\n<span class=\"co2\">#define OLED_RESET 11<\/span><br \/>\nAdafruit_SSD1306 display<span class=\"br0\">&#40;<\/span>OLED_RESET<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ define segment truth table for each digit<\/span><br \/>\n<span class=\"kw4\">static<\/span> <span class=\"kw4\">const<\/span> <span class=\"kw4\">int<\/span> digit_array<span class=\"br0\">&#91;<\/span><span class=\"nu0\">10<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">7<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 0<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 1<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 2<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 3<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 4<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 5<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 6<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 7<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"co1\">\/\/ 8<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#125;<\/span> &nbsp; <span class=\"co1\">\/\/ 9<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw4\">void<\/span> setup<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; Serial.<span class=\"me1\">begin<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">9600<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; display.<span class=\"me1\">begin<\/span><span class=\"br0\">&#40;<\/span>SSD1306_SWITCHCAPVCC<span class=\"sy0\">,<\/span> <span class=\"nu12\">0x3C<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> &nbsp;<span class=\"co1\">\/\/ initialize with the I2C addr 0x3D (for the 128x64)<\/span><br \/>\n&nbsp; display.<span class=\"me1\">clearDisplay<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> &nbsp; <span class=\"co1\">\/\/ Clear the buffer.<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ func params: render_digits(pox_x, pos_y, spacing, color)<\/span><br \/>\n&nbsp; render_digits<span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">18<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">999<\/span><span class=\"sy0\">,<\/span> WHITE<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; display.<span class=\"me1\">display<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; delay<span class=\"br0\">&#40;<\/span><span class=\"nu0\">2000<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw4\">void<\/span> loop<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ count up to 999<\/span><br \/>\n&nbsp; <span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span> cnt <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span> cnt <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">1000<\/span><span class=\"sy0\">;<\/span> cnt<span class=\"sy0\">++<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; display.<span class=\"me1\">clearDisplay<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> &nbsp; <span class=\"co1\">\/\/ Clear the buffer.<\/span><br \/>\n&nbsp; &nbsp; render_digits<span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">18<\/span><span class=\"sy0\">,<\/span> cnt<span class=\"sy0\">,<\/span> WHITE<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; display.<span class=\"me1\">display<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ RENDER DIGITS:<\/span><br \/>\n<span class=\"co1\">\/\/ use this funtion to print digits<\/span><br \/>\n<span class=\"co1\">\/\/ valid range range: 0-999<\/span><br \/>\n<span class=\"kw4\">void<\/span> render_digits<span class=\"br0\">&#40;<\/span><span class=\"kw4\">uint8_t<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"kw4\">uint8_t<\/span> pos_y<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"kw4\">uint8_t<\/span> spacing_x<span class=\"sy0\">,<\/span> <span class=\"kw4\">uint16_t<\/span> digit<span class=\"sy0\">,<\/span> <span class=\"kw4\">uint8_t<\/span> color<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"kw4\">uint8_t<\/span> digit_array<span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span>digit <span class=\"sy0\">\/<\/span> <span class=\"nu0\">100<\/span> <span class=\"sy0\">%<\/span> <span class=\"nu0\">10<\/span><span class=\"sy0\">,<\/span> digit <span class=\"sy0\">\/<\/span> <span class=\"nu0\">10<\/span> <span class=\"sy0\">%<\/span> <span class=\"nu0\">10<\/span><span class=\"sy0\">,<\/span> digit <span class=\"sy0\">%<\/span> <span class=\"nu0\">10<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>digit <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">99<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; render_digit<span class=\"br0\">&#40;<\/span>pos_x<span class=\"sy0\">,<\/span> pos_y<span class=\"sy0\">,<\/span> digit_array<span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>digit <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">9<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; render_digit<span class=\"br0\">&#40;<\/span>pos_x <span class=\"sy0\">+<\/span> spacing_x<span class=\"sy0\">,<\/span> pos_y<span class=\"sy0\">,<\/span> digit_array<span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; render_digit<span class=\"br0\">&#40;<\/span>pos_x <span class=\"sy0\">+<\/span> <span class=\"br0\">&#40;<\/span>spacing_x <span class=\"sy0\">*<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> pos_y<span class=\"sy0\">,<\/span> digit_array<span class=\"br0\">&#91;<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ RENDER DIGIT<\/span><br \/>\n<span class=\"co1\">\/\/ don't use this unless you only need a single digit<\/span><br \/>\n<span class=\"co1\">\/\/ use render_digits() func above instead<\/span><br \/>\n<span class=\"kw4\">void<\/span> render_digit<span class=\"br0\">&#40;<\/span><span class=\"kw4\">uint8_t<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"kw4\">uint8_t<\/span> pos_y<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw4\">uint8_t<\/span> digit<span class=\"sy0\">,<\/span> <span class=\"kw4\">uint8_t<\/span> color<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ loop through 7 segments<\/span><br \/>\n&nbsp; <span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">uint8_t<\/span> i <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span> i <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">7<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">++<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; bool seg_on <span class=\"sy0\">=<\/span> digit_array<span class=\"br0\">&#91;<\/span>digit<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ if seg_on is true draw segment<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>seg_on<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">switch<\/span> <span class=\"br0\">&#40;<\/span>i<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG a<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">10<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG b<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">10<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">12<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG c<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">20<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG d<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">4<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">12<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG e<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">5<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG f<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"nu0\">6<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display.<span class=\"me1\">fillRoundRect<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span> <span class=\"sy0\">+<\/span> pos_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">10<\/span> <span class=\"sy0\">+<\/span> pos_y<span class=\"sy0\">,<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> color<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ SEG g<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; seg_on <span class=\"sy0\">=<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Git Repository &#8211; 7-seg_adagfx_ssd1306.git I had a project come up recently where I needed to display some numbers that looked like an old 7-segment display. The only problem, I was using a 128&#215;64 OLED driven by a SSD1306 driver. Luckily&#8230; <a href=\"https:\/\/ta-laboratories.com\/blog\/2018\/09\/07\/recreating-a-7-segment-display-with-adafruit-gfx-ssd1306-oled\/\" class=\"read-more\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":314,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,16,5],"tags":[],"class_list":["post-310","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-c-c","category-programming"],"_links":{"self":[{"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/posts\/310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/comments?post=310"}],"version-history":[{"count":44,"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions"}],"predecessor-version":[{"id":359,"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions\/359"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/media\/314"}],"wp:attachment":[{"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/media?parent=310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/categories?post=310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ta-laboratories.com\/blog\/wp-json\/wp\/v2\/tags?post=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}