<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arduino Projects Archives - Tutorial45</title>
	<atom:link href="https://tutorial45.com/category/arduino-projects/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Tutorials and Tech</description>
	<lastBuildDate>Tue, 27 Feb 2024 08:59:45 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://tutorial45.com/wp-content/uploads/2015/04/cropped-text125d52-32x32.png</url>
	<title>Arduino Projects Archives - Tutorial45</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Charlieplexing LEDs With The Arduino Board</title>
		<link>https://tutorial45.com/charlieplexing-arduino-leds/</link>
					<comments>https://tutorial45.com/charlieplexing-arduino-leds/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Andreea]]></dc:creator>
		<pubDate>Tue, 27 Feb 2024 08:58:55 +0000</pubDate>
				<category><![CDATA[Arduino Projects]]></category>
		<guid isPermaLink="false">https://tutorial45.com/?p=10041</guid>

					<description><![CDATA[<p><a href="https://tutorial45.com/charlieplexing-arduino-leds/">Charlieplexing LEDs With The Arduino Board</a></p>
<p>Adding LEDs to a project soon uses up valuable pins. What if you could control a row of 12 LEDs to show changing values with only 4 digital pins? There is a way and it is called Charlieplexing. It was first proposed in 1995 by Charlie Allen. It relies on two properties that you may ... </p>
<p class="read-more-container"><a title="Charlieplexing LEDs With The Arduino Board" class="read-more button" href="https://tutorial45.com/charlieplexing-arduino-leds/#more-10041" aria-label="More on Charlieplexing LEDs With The Arduino Board">Read more</a></p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://tutorial45.com/charlieplexing-arduino-leds/">Charlieplexing LEDs With The Arduino Board</a></p>

<p class="wp-block-paragraph">Adding LEDs to a project soon uses up valuable pins. What if you could control a row of 12 LEDs to show changing values with only 4 digital pins? There is a way and it is called Charlieplexing. It was first proposed in 1995 by <a href="https://en.wikipedia.org/wiki/Charlieplexing" target="_blank" rel="noreferrer noopener">Charlie Allen</a>.</p>



<p class="wp-block-paragraph">It relies on two properties that you may not have previously considered useful.</p>



<p class="wp-block-paragraph">LEDs are Light Emitting Diodes and only pass electrical current in one direction. If you connect two of them together, in parallel but facing in opposite directions, you can use just 2 wires to control them.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="702" height="348" src="https://tutorial45.com/wp-content/uploads/2020/07/LED_pair.jpg" alt="Charlieplexing principle" class="wp-image-10045" style="width:702px;height:348px" srcset="https://tutorial45.com/wp-content/uploads/2020/07/LED_pair.jpg 702w, https://tutorial45.com/wp-content/uploads/2020/07/LED_pair-300x149.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/07/LED_pair-585x290.jpg 585w" sizes="(max-width: 702px) 100vw, 702px" /></figure>
</div>


<p class="wp-block-paragraph">If we connect the right-hand end of the circuit to 5V and the left-hand end to GND current will flow from right to left and the upper LED, #2, to light up and the lower LED will stay dark. If we reverse the connections, current will flow in the opposite direction and only the lower LED, #1, will be lit.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="587" height="446" src="https://tutorial45.com/wp-content/uploads/2020/07/oneLED-1.png" alt="Bredboard with LEDs" class="wp-image-10055" srcset="https://tutorial45.com/wp-content/uploads/2020/07/oneLED-1.png 587w, https://tutorial45.com/wp-content/uploads/2020/07/oneLED-1-300x228.png 300w, https://tutorial45.com/wp-content/uploads/2020/07/oneLED-1-585x444.png 585w" sizes="(max-width: 587px) 100vw, 587px" /></figure>
</div>


<p class="wp-block-paragraph">Here is the same setup on a breadboard. I’ve only used one resistor here, 660 Ohms, but it protects both LEDs. Notice that the long legs of the LEDs, the anodes, which are connected to the higher voltage, face in opposite directions.</p>



<h2 class="wp-block-heading">Project #1 – 6 LEDs on 3 wires</h2>



<p class="wp-block-paragraph">If we want more than two LEDs we can add additional pairs of parallel, opposite facing LEDs in different arrangements. Let’s try 6 LEDs in three pairs in the form of a triangle. The blue circle represents a pair of opposed parallel LEDs.</p>



<h3 class="wp-block-heading">Required materials</h3>



<ul class="wp-block-list">
<li>Arduino – an UNO works perfectly</li>



<li>LEDs &#8211; space constraints in project #2 make 3mm LEDs a better proposition</li>



<li>330 Ohm resistors</li>



<li>Breadboard or stripboard</li>



<li>Connecting wire</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="543" height="457" src="https://tutorial45.com/wp-content/uploads/2020/07/TriangleV2.jpg" alt="Charlieplexing schematic" class="wp-image-10047" srcset="https://tutorial45.com/wp-content/uploads/2020/07/TriangleV2.jpg 543w, https://tutorial45.com/wp-content/uploads/2020/07/TriangleV2-300x252.jpg 300w" sizes="(max-width: 543px) 100vw, 543px" /></figure>
</div>


<p class="wp-block-paragraph">We can add the 330 Ohm resistors, the brown rectangles, to each of the corners, to limit the current, protect the LEDs and the Arduino pins. I’ve shown blue, yellow and green wires connected to the resistors.</p>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>BLUE</strong></td><td class="has-text-align-center" data-align="center"><strong>YELLOW</strong></td><td class="has-text-align-center" data-align="center"><strong>GREEN</strong></td><td class="has-text-align-center" data-align="center"><strong>LED ON</strong></td></tr><tr><td class="has-text-align-center" data-align="center">HIGH</td><td class="has-text-align-center" data-align="center">LOW</td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">0</td></tr><tr><td class="has-text-align-center" data-align="center">LOW</td><td class="has-text-align-center" data-align="center">HIGH</td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">1</td></tr><tr><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">HIGH</td><td class="has-text-align-center" data-align="center">LOW</td><td class="has-text-align-center" data-align="center">2</td></tr><tr><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">LOW</td><td class="has-text-align-center" data-align="center">HIGH</td><td class="has-text-align-center" data-align="center">3</td></tr><tr><td class="has-text-align-center" data-align="center">LOW</td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">HIGH</td><td class="has-text-align-center" data-align="center">4</td></tr><tr><td class="has-text-align-center" data-align="center">HIGH</td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">LOW</td><td class="has-text-align-center" data-align="center">5</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">The question marks indicate that the wire is not connected. How can we effectively disconnect a wire while it is physically attached to an Arduino pin?</p>



<p class="wp-block-paragraph">The second property that we seldom think about is that the digital microcontroller pins are tri-state. They can be set HIGH, LOW or used for INPUT. When a pin is set to INPUT MODE it is high impedance. So high that almost no current can flow so it is effectively disconnected.</p>



<p class="wp-block-paragraph">This means we can <a href="https://tutorial45.com/electronic-diy-voice-control-led-project/">control the 6 LEDs</a> with three pins connected to the blue, yellow and green wires and replace the ‘?’ with INPUT mode rather than the OUTPUT mode used for HIGH and LOW.&nbsp;</p>



<p class="wp-block-paragraph">Normally we just set a pin’s mode at the start of the script and leave it alone for the rest of the program. Here we need to keep switching modes and values.</p>



<p class="wp-block-paragraph">Here is one way of coding the previous table:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// LED numbers    0,1,2,3,4,5
byte anodes[]  = {b,y,y,g,g,b};  // HIGH
byte caths[]   = {y,b,g,y,b,g};  // LOW
byte inputs[]  = {g,g,b,b,y,y};  // INPUT" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// LED numbers    0,1,2,3,4,5</span></span>
<span class="line"><span style="color: #ADBAC7">byte anodes[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {b,y,y,g,g,b};  </span><span style="color: #768390">// HIGH</span></span>
<span class="line"><span style="color: #ADBAC7">byte caths[]   </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {y,b,g,y,b,g};  </span><span style="color: #768390">// LOW</span></span>
<span class="line"><span style="color: #ADBAC7">byte inputs[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {g,g,b,b,y,y};  </span><span style="color: #768390">// INPUT</span></span></code></pre></div>



<p class="wp-block-paragraph">b, y, and g are the wire colors, which have been allocated digital pin numbers. Reading vertically, for LED#0 to be switched ON &#8211; BLUE is set to HIGH (anode), YELLOW is set to LOW (cathode), and GREEN is set as an INPUT (disconnected).</p>



<p class="wp-block-paragraph">The arrangement of LEDs in the previous diagram is logical but not very useful. It would be much more helpful if the LEDs were in a straight line. This is quite a tricky topological transformation to keep all the connections correct. What you gain is free pins involve more complicated wiring.</p>



<p class="wp-block-paragraph">Here is the breadboard version:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="573" height="774" src="https://tutorial45.com/wp-content/uploads/2020/07/oneLEDplexers.png" alt="" class="wp-image-10060" srcset="https://tutorial45.com/wp-content/uploads/2020/07/oneLEDplexers.png 573w, https://tutorial45.com/wp-content/uploads/2020/07/oneLEDplexers-222x300.png 222w" sizes="(max-width: 573px) 100vw, 573px" /></figure>
</div>


<p class="wp-block-paragraph">Notice that all the LEDs face the same way with their anode, the longer leg, to the right. Each pair is cross-connected, anode to cathode, with the pink and black links. The blue and yellow wires drive the first pair, the second pair by the yellow and green wires, and the last pair by the green and blue wires. The colored wire is connected directly to the anode of the LED, and it needs to turn ON.</p>



<p class="wp-block-paragraph">Above each LED is its number (0…5) and the wire colors, anode – cathode. This is quite an effort to link up, and the DuPont wires would probably get in the way when observing the flashing LEDs. Below is a photograph of a stripboard version, which, once soldered up, could easily be used in multiple projects. (There are no underside cuts of the copper strip on this board)</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="682" src="https://tutorial45.com/wp-content/uploads/2020/07/board.with_.leds_-1024x682.jpg" alt="Charlieplexing LEDs" class="wp-image-10049" style="width:632px;height:421px" srcset="https://tutorial45.com/wp-content/uploads/2020/07/board.with_.leds_-1024x682.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/07/board.with_.leds_-300x200.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/07/board.with_.leds_-768x512.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/07/board.with_.leds_-585x390.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/07/board.with_.leds_-263x175.jpg 263w, https://tutorial45.com/wp-content/uploads/2020/07/board.with_.leds_.jpg 1037w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">I connected the board to an <strong>Arduino UNO with the blue wire on pin 7, the yellow on pin 6, and the green on pin 5</strong>. I also added a 10 K Ohm potentiometer with the wiper on A0 and the outside connections to&nbsp; 5V and GND to give physical input to the program. You need to twist the pot knob once the LEDs stop flashing left to right.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// CharliePlexing 6 LEDs with multiplexed bar graph
// Tony Goodhew 27 June 2020

#define b 7   // Blue wire
#define y 6   // Yellow wire
#define g 5   // Green wire

#define potPin A0  // 10 K Ohm potentiometer on A0, 5V and GND
int done = false;
int wait = 190;
unsigned long startTime;

// LED numbers    0,1,2,3,4,5
byte anodes[]  = {b,y,y,g,g,b};  // HIGH
byte caths[]   = {y,b,g,y,b,g};  // LOW
byte inputs[]  = {g,g,b,b,y,y};  // INPUT

void show(int p){  // Turn on a single LED ( p = 0...5)
  pinMode(inputs[p], INPUT);   // Disconnect
  pinMode(caths[p], OUTPUT);
  digitalWrite(caths[p], 0);   // GND
  pinMode(anodes[p], OUTPUT);
  digitalWrite(anodes[p], 1);  // 5V
}

void show2(int q) {  // Multiple LEDs from left  
  for (int m = 0; m &lt; q; m++)  {
    show(m);
    delay(3);
  }  
}

void setup() {
  Serial.begin(115200);  // Ready for de-bugging 
  startTime = millis(); 
}

void loop() {
  if (!done) {  // Basic left to right movement
    for (int m = 0; m &lt; 10; m++){  // Cycles
      for (int i = 0; i &lt;6; i++){  // LEDs 
        show(i);
        delay(wait);
        wait = wait - 3;           // Speed things up
      }
    }  
  }
  done = true;  // Finished with counted display
 
  // Twist the pot to change the LED lit up
  int potValue = analogRead(potPin); // Read potentiometer
  int pointer = potValue / 160; // values 0...6
  if (pointer == 0 ) {  // Turn off all LEDs
    pinMode(b, INPUT);  // Disconnect all wires
    pinMode(y, INPUT);
    pinMode(g, INPUT);
  }
  else{
    if (millis() - startTime &lt; 17000) { // 17 seconds
      show(pointer - 1); // Single LED
    }
    else {
      show2(pointer);    // Bar graph
    }
  } 
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// CharliePlexing 6 LEDs with multiplexed bar graph</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 27 June 2020</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define b </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// Blue wire</span></span>
<span class="line"><span style="color: #ADBAC7">#define y </span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// Yellow wire</span></span>
<span class="line"><span style="color: #ADBAC7">#define g </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// Green wire</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define potPin </span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// 10 K Ohm potentiometer on A0, 5V and GND</span></span>
<span class="line"><span style="color: #ADBAC7">int done </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">false</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">int wait </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">190</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">unsigned long startTime;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// LED numbers    0,1,2,3,4,5</span></span>
<span class="line"><span style="color: #ADBAC7">byte anodes[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {b,y,y,g,g,b};  </span><span style="color: #768390">// HIGH</span></span>
<span class="line"><span style="color: #ADBAC7">byte caths[]   </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {y,b,g,y,b,g};  </span><span style="color: #768390">// LOW</span></span>
<span class="line"><span style="color: #ADBAC7">byte inputs[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {g,g,b,b,y,y};  </span><span style="color: #768390">// INPUT</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(int p){  </span><span style="color: #768390">// Turn on a single LED ( p = 0...5)</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(inputs[p], </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);   </span><span style="color: #768390">// Disconnect</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(caths[p], </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(caths[p], </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);   </span><span style="color: #768390">// GND</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(anodes[p], </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(anodes[p], </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// 5V</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">(int q) {  </span><span style="color: #768390">// Multiple LEDs from left  </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int m </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; m </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> q; m</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">)  {</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(m);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }  </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">115200</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Ready for de-bugging </span></span>
<span class="line"><span style="color: #ADBAC7">  startTime </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">millis</span><span style="color: #ADBAC7">(); </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">!</span><span style="color: #ADBAC7">done) {  </span><span style="color: #768390">// Basic left to right movement</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int m </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; m </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">; m</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){  </span><span style="color: #768390">// Cycles</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){  </span><span style="color: #768390">// LEDs </span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(i);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(wait);</span></span>
<span class="line"><span style="color: #ADBAC7">        wait </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> wait </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">;           </span><span style="color: #768390">// Speed things up</span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">    }  </span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  done </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">true</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// Finished with counted display</span></span>
<span class="line"><span style="color: #ADBAC7"> </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Twist the pot to change the LED lit up</span></span>
<span class="line"><span style="color: #ADBAC7">  int potValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(potPin); </span><span style="color: #768390">// Read potentiometer</span></span>
<span class="line"><span style="color: #ADBAC7">  int pointer </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> potValue </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">160</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// values 0...6</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (pointer </span><span style="color: #F47067">==</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7"> ) {  </span><span style="color: #768390">// Turn off all LEDs</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(b, </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Disconnect all wires</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(y, </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(g, </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">else</span><span style="color: #ADBAC7">{</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #DCBDFB">millis</span><span style="color: #ADBAC7">() </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> startTime </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">17000</span><span style="color: #ADBAC7">) { </span><span style="color: #768390">// 17 seconds</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(pointer </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Single LED</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">(pointer);    </span><span style="color: #768390">// Bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">  } </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<p class="wp-block-paragraph">The function <strong>show()</strong> does most of the work. It resets pin modes and values to switch on a single LED. It is called multiple times by the function <strong>show2(),</strong> which turns a row of LEDs ON/OFF so quickly that persistence of vision does not allow our eyes to notice the flashing and produces the appearance of a steady a bar graph, if slightly dimmed.</p>



<p class="wp-block-paragraph">In the main loop there are three stages of display:</p>



<ol class="wp-block-list">
<li>A single lit LED appears&nbsp; to move from left to right at faster and faster speeds.</li>



<li>A single LED is lit and its position in the row is controlled by the potentiometer.</li>



<li>A bar graph of lit <a href="https://tutorial45.com/controlling-leds-with-arduino/">LEDs is controlled</a> by the potentiometer – 17 sec into the main loop.</li>
</ol>



<p class="wp-block-paragraph">Here is a second script that demonstrates generating patterns with this limited number of LEDs.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// CharliePlexing 6 LEDs Patterns
// Tony Goodhew 28 June 2020

#define b 7   // Blue wire
#define y 6   // Yellow wire
#define g 5   // Green wire

// LED numbers    0,1,2,3,4,5
byte anodes[]  = {b,y,y,g,g,b};
byte caths[]   = {y,b,g,y,b,g};
byte inputs[]  = {g,g,b,b,y,y};

void show(int p){  // Turn on a single LED ( p = 0...5)
  pinMode(inputs[p], INPUT);   // Disconnect
  pinMode(caths[p], OUTPUT);
  digitalWrite(caths[p], 0);   // GND
  pinMode(anodes[p], OUTPUT);
  digitalWrite(anodes[p], 1);  // 5V
}

void show2(int q) {  // Mulitple LEDs from left  
  for (int m = 0; m &lt; q; m++)  {
    show(m);
    delay(3);
  }  
}

void setup() {
  Serial.begin(115200);  // Ready for de-bugging 
}

void loop() {
  // Opposites
  for (int m = 0; m &lt; 7; m++){        // Cycles
    for (int i = 0; i &lt;6; i++){       // Move up
      for (int t = 0; t &lt;50; t++)  {  // Flashes 50 times
        show(i);                      // Left LED
        delay(3);                     // 3 millisecond flash
        show(5-i);                    // Right LED
        delay(3);
      } 
    }
  }
    
  // Pair
  for (int m = 0; m &lt; 7; m++){         // Cycles
    for (int i = 0; i &lt; 4; i++){       // Move up
      for (int t = 0; t &lt;100; t++)  {  // Flashes
        show(i);                       // Left LED
        delay(3);
        show(i + 1);                   // Right LED
        delay(3);
      } 
    }
    for (int i = 0; i &lt; 4; i++){      // Move down
     int ii = 4 - i;
     for (int t = 0; t &lt;100; t++)  {  // Flashes 50 times
        show(ii);                     // Left LED
        delay(3);
        show(ii + 1);                 // Right LED
        delay(3);
      } 
    }
  }
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// CharliePlexing 6 LEDs Patterns</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 28 June 2020</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define b </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// Blue wire</span></span>
<span class="line"><span style="color: #ADBAC7">#define y </span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// Yellow wire</span></span>
<span class="line"><span style="color: #ADBAC7">#define g </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// Green wire</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// LED numbers    0,1,2,3,4,5</span></span>
<span class="line"><span style="color: #ADBAC7">byte anodes[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {b,y,y,g,g,b};</span></span>
<span class="line"><span style="color: #ADBAC7">byte caths[]   </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {y,b,g,y,b,g};</span></span>
<span class="line"><span style="color: #ADBAC7">byte inputs[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {g,g,b,b,y,y};</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(int p){  </span><span style="color: #768390">// Turn on a single LED ( p = 0...5)</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(inputs[p], </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);   </span><span style="color: #768390">// Disconnect</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(caths[p], </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(caths[p], </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);   </span><span style="color: #768390">// GND</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(anodes[p], </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(anodes[p], </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// 5V</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">(int q) {  </span><span style="color: #768390">// Mulitple LEDs from left  </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int m </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; m </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> q; m</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">)  {</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(m);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }  </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">115200</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Ready for de-bugging </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Opposites</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int m </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; m </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">; m</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){        </span><span style="color: #768390">// Cycles</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){       </span><span style="color: #768390">// Move up</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int t </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; t </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">; t</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">)  {  </span><span style="color: #768390">// Flashes 50 times</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(i);                      </span><span style="color: #768390">// Left LED</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);                     </span><span style="color: #768390">// 3 millisecond flash</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">5</span><span style="color: #F47067">-</span><span style="color: #ADBAC7">i);                    </span><span style="color: #768390">// Right LED</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      } </span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">    </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Pair</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int m </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; m </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">; m</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){         </span><span style="color: #768390">// Cycles</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){       </span><span style="color: #768390">// Move up</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int t </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; t </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">; t</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">)  {  </span><span style="color: #768390">// Flashes</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(i);                       </span><span style="color: #768390">// Left LED</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(i </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);                   </span><span style="color: #768390">// Right LED</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      } </span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){      </span><span style="color: #768390">// Move down</span></span>
<span class="line"><span style="color: #ADBAC7">     int ii </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> i;</span></span>
<span class="line"><span style="color: #ADBAC7">     </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int t </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; t </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">; t</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">)  {  </span><span style="color: #768390">// Flashes 50 times</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(ii);                     </span><span style="color: #768390">// Left LED</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(ii </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);                 </span><span style="color: #768390">// Right LED</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      } </span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<h2 class="wp-block-heading">Project #2 &#8211; 12 LEDs with 4 wires</h2>



<p class="wp-block-paragraph">We can arrange the 6 pairs of LEDs in a square with a resistor at each corner.</p>



<p class="has-text-align-center wp-block-paragraph">image</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1019" height="794" src="https://tutorial45.com/wp-content/uploads/2020/07/12LED_SQ_wires-1.jpg" alt="Schematic Charlieplexing" class="wp-image-10051" style="width:518px;height:403px" srcset="https://tutorial45.com/wp-content/uploads/2020/07/12LED_SQ_wires-1.jpg 1019w, https://tutorial45.com/wp-content/uploads/2020/07/12LED_SQ_wires-1-300x234.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/07/12LED_SQ_wires-1-768x598.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/07/12LED_SQ_wires-1-585x456.jpg 585w" sizes="(max-width: 1019px) 100vw, 1019px" /></figure>
</div>


<p class="wp-block-paragraph">We can code this in a similar way to the previous script but we will need to set two lines as inputs.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// LED numbers    0,1,2,3,4,5,6,7,8,9,10,11
byte anodes[]  = {b,y,y,g,g,r,r,b,y,r, b, g};
byte caths[]   = {y,b,g,y,r,g,b,r,r,y, g, b};
byte input1[]  = {g,g,b,b,b,b,y,y,b,b, r ,r};
byte input2[]  = {r,r,r,r,y,y,g,g,g,g, y, y};" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// LED numbers    0,1,2,3,4,5,6,7,8,9,10,11</span></span>
<span class="line"><span style="color: #ADBAC7">byte anodes[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {b,y,y,g,g,r,r,b,y,r, b, g};</span></span>
<span class="line"><span style="color: #ADBAC7">byte caths[]   </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {y,b,g,y,r,g,b,r,r,y, g, b};</span></span>
<span class="line"><span style="color: #ADBAC7">byte input1[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {g,g,b,b,b,b,y,y,b,b, r ,r};</span></span>
<span class="line"><span style="color: #ADBAC7">byte input2[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {r,r,r,r,y,y,g,g,g,g, y, y};</span></span></code></pre></div>



<p class="wp-block-paragraph">Here is a photograph of the stripboard version. The boards were 24 holes wide so there was just enough room to place twelve 3mm LEDs across the width of the board. (5mm LEDs are too wide, unfortunately, and need a single hole space between them). </p>



<p class="wp-block-paragraph">Once again all the LEDs are facing the same way with the longer leg, anode, to the right. The copper strips on the underside of the board, underneath the resistors, are cut.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="800" height="607" src="https://tutorial45.com/wp-content/uploads/2020/07/12board-sm-1.jpg" alt="Charlieplexing board with LEDs" class="wp-image-10052" style="width:458px;height:347px" srcset="https://tutorial45.com/wp-content/uploads/2020/07/12board-sm-1.jpg 800w, https://tutorial45.com/wp-content/uploads/2020/07/12board-sm-1-300x228.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/07/12board-sm-1-768x583.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/07/12board-sm-1-585x444.jpg 585w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>


<p class="wp-block-paragraph">The board is well worth soldering up and keeping for use in other projects.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// CharliePlexing 12 LEDs
// Tony Goodhew 27 June 2020

#define b 7   // Blue wire
#define y 6   // Yellow wire
#define g 5   // Green wire
#define r 4   // red wire
#define potPin A0  // 10 K Ohm potentiometer on A0

// pin numbers    0,1,2,3,4,5,6,7,8,9,10,11
byte anodes[]  = {b,y,y,g,g,r,r,b,y,r, b, g};
byte caths[]   = {y,b,g,y,r,g,b,r,r,y, g, b};
byte input1[]  = {g,g,b,b,b,b,y,y,b,b, r, r};
byte input2[]  = {r,r,r,r,y,y,g,g,g,g, y, y};

void show(int p) {  // Turn on a single LED ( p = 0...5)
  pinMode(input1[p], INPUT);     // Disconnect
  pinMode(input2[p], INPUT);
  pinMode(caths[p], OUTPUT);
  digitalWrite(caths[p], 0);   // GND
  pinMode(anodes[p], OUTPUT);
  digitalWrite(anodes[p], 1);  // 5V
}

void show2(int p) {
  for (int m = 0; m &lt; p; m++)  {
    show(m);
    delay(2);  // Reduced wait time to remove flicker
  }
}

void setup() {
  Serial.begin(115200);  // Ready for de-bugging  
}

void loop() {
  int potValue = analogRead(potPin); // Read potentiometer
  int pointer = potValue / 80; // values 0...12
  if (pointer == 0) {  
    pinMode(b, INPUT);  // Turn off all LEDs
    pinMode(y, INPUT);  // Disconnect all wires

    pinMode(g, INPUT);
    pinMode(r, INPUT);
  }
  else{
    show2(pointer);     // Bar graph display
  } 
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// CharliePlexing 12 LEDs</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 27 June 2020</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define b </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// Blue wire</span></span>
<span class="line"><span style="color: #ADBAC7">#define y </span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// Yellow wire</span></span>
<span class="line"><span style="color: #ADBAC7">#define g </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// Green wire</span></span>
<span class="line"><span style="color: #ADBAC7">#define r </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// red wire</span></span>
<span class="line"><span style="color: #ADBAC7">#define potPin </span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// 10 K Ohm potentiometer on A0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// pin numbers    0,1,2,3,4,5,6,7,8,9,10,11</span></span>
<span class="line"><span style="color: #ADBAC7">byte anodes[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {b,y,y,g,g,r,r,b,y,r, b, g};</span></span>
<span class="line"><span style="color: #ADBAC7">byte caths[]   </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {y,b,g,y,r,g,b,r,r,y, g, b};</span></span>
<span class="line"><span style="color: #ADBAC7">byte input1[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {g,g,b,b,b,b,y,y,b,b, r, r};</span></span>
<span class="line"><span style="color: #ADBAC7">byte input2[]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {r,r,r,r,y,y,g,g,g,g, y, y};</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(int p) {  </span><span style="color: #768390">// Turn on a single LED ( p = 0...5)</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(input1[p], </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);     </span><span style="color: #768390">// Disconnect</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(input2[p], </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(caths[p], </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(caths[p], </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);   </span><span style="color: #768390">// GND</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(anodes[p], </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(anodes[p], </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// 5V</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">(int p) {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int m </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; m </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> p; m</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">)  {</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(m);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Reduced wait time to remove flicker</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">115200</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Ready for de-bugging  </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  int potValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(potPin); </span><span style="color: #768390">// Read potentiometer</span></span>
<span class="line"><span style="color: #ADBAC7">  int pointer </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> potValue </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">80</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// values 0...12</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (pointer </span><span style="color: #F47067">==</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">) {  </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(b, </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Turn off all LEDs</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(y, </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Disconnect all wires</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(g, </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(r, </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">else</span><span style="color: #ADBAC7">{</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">(pointer);     </span><span style="color: #768390">// Bar graph display</span></span>
<span class="line"><span style="color: #ADBAC7">  } </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<p class="wp-block-paragraph">This is just an update of the previous code to allow for the extra LEDs and save you typing. This is just the minimum to check wiring. Note that the time delay in the <strong>show2()</strong> loop has been reduced to remove flicker. Try 3 or 4 milliseconds to see the difference.</p>



<h2 class="wp-block-heading"><strong>Things to try&nbsp;&nbsp;</strong></h2>



<p class="wp-block-paragraph">Modify the code to extend the patterns supplied for the 6 LED board:</p>



<ul class="wp-block-list">
<li>One LED moving left and right at speeds controlled by the potentiometer</li>



<li>2 or 3 LEDs moving together left and right&nbsp; or mirroring</li>



<li>Bar graph with input from a different <a href="https://tutorial45.com/arduino-project-ultrasonic-distance-sensor/">sensor such as an ultrasonic distance</a> sensor (SR04) or temperature sensor (TMP36 or DS18B20).</li>



<li>Wire up a compact 10 <a href="https://tutorial45.com/arduino-7-segment-display/">segment bar graph display</a> and control it with 4 pins. I put an additional normal red LED at one end and a green LED at the other. If you try this remember to cut the tracks under the bar graph display. The display has cathodes on one side and anodes on the other with the LED between them. Using the resistors to make the connections is much quicker than stripping the insulation from wires. I suggest you test each LED as you build these boards, this is much easier than fault finding at the end.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="748" height="805" src="https://tutorial45.com/wp-content/uploads/2020/07/TryThis-sm-1.jpg" alt="Charlieplexing LEDs bar graph" class="wp-image-10044" style="width:458px;height:493px" srcset="https://tutorial45.com/wp-content/uploads/2020/07/TryThis-sm-1.jpg 748w, https://tutorial45.com/wp-content/uploads/2020/07/TryThis-sm-1-279x300.jpg 279w, https://tutorial45.com/wp-content/uploads/2020/07/TryThis-sm-1-585x630.jpg 585w" sizes="(max-width: 748px) 100vw, 748px" /></figure>
</div>


<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">I trust you enjoyed the topic and consider constructing one of the boards yourself. While we may save on the number of pins used to operate these boards, the complex nature of the wiring and code compensates for this. Our exploration does not have to conclude with 12 LEDs. The control capacity for the number of LEDs increases with every additional wire introduced, as per the formula</p>



<p class="wp-block-paragraph">L = n(n-1)</p>



<p class="wp-block-paragraph">where L is the maximum number of LEDs controlled and n the number of pins used.</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Pins</strong></td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr><tr><td><strong>LEDs</strong></td><td>2</td><td>6</td><td>12</td><td>20</td><td>30</td><td>42</td><td>56</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Another useful application would be on an interactive map or school project display with individual button switches on a menu lighting LEDs at different positions on the display. Examples include naming the features of an ancient castle or tourist attractions on a map of the local area.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tutorial45.com/charlieplexing-arduino-leds/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino to LCD projects &#8211; Using 3 Different Types of LCDs</title>
		<link>https://tutorial45.com/arduino-to-lcd-projects/</link>
					<comments>https://tutorial45.com/arduino-to-lcd-projects/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Andreea]]></dc:creator>
		<pubDate>Tue, 27 Feb 2024 08:52:48 +0000</pubDate>
				<category><![CDATA[Arduino Projects]]></category>
		<guid isPermaLink="false">https://tutorial45.com/?p=10070</guid>

					<description><![CDATA[<p><a href="https://tutorial45.com/arduino-to-lcd-projects/">Arduino to LCD projects &#8211; Using 3 Different Types of LCDs</a></p>
<p>The Arduino IDE provides a serial monitor window which proves to be quite useful when it comes to printing values to debug a project. However, you can further enhance this functionality by attaching a small screen to your project that can provide feedback, display menus, and show results, improving its utility significantly. Moreover, this modification ... </p>
<p class="read-more-container"><a title="Arduino to LCD projects &#8211; Using 3 Different Types of LCDs" class="read-more button" href="https://tutorial45.com/arduino-to-lcd-projects/#more-10070" aria-label="More on Arduino to LCD projects &#8211; Using 3 Different Types of LCDs">Read more</a></p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://tutorial45.com/arduino-to-lcd-projects/">Arduino to LCD projects &#8211; Using 3 Different Types of LCDs</a></p>

<p class="wp-block-paragraph">The Arduino IDE provides a serial monitor window which proves to be quite useful when it comes to printing values to debug a project. However, you can further enhance this functionality by attaching a small screen to your project that can provide feedback, display menus, and show results, improving its utility significantly. Moreover, this modification can also help to make your project completely portable.</p>



<p class="wp-block-paragraph">I will be looking at three small and inexpensive LED screens that you can easily connect to your Arduino.</p>



<h2 class="wp-block-heading">The Technology</h2>



<p class="wp-block-paragraph">These devices are Liquid Crystal Displays and have been around for some time. They do not emit light but block it. They may have a back-light or rely on reflected light.&nbsp;</p>



<p class="wp-block-paragraph">Each display is made up of several layers and makes use of polarised light. If you polarise light horizontally with one filter you can cut off the light completely with a vertically polarised filter. Some liquids will twist the angle of polarisation when a voltage is applied to them allowing polarised light to pass through the filters. </p>



<p class="wp-block-paragraph">They are called “twisted nematic liquid crystals”. If you sandwich such a crystal between two polarizers, crossed at 90°, the light would normally be blocked. If a voltage is applied to the crystal it ‘twists’ the light’s polarisation as it passes through the crystal and it is allowed through the second polarizing filter. A liquid crystal display is made up of many layers but remains very thin.</p>



<p class="wp-block-paragraph">The one of the first uses of <a href="https://tutorial45.com/arduino-projects-arduino-lcd-display/">LCD displays</a> was with electronic calculators in the early 1970s, replacing the previous tiny red 8 segment displays with magnifying lenses. These small monochrome devices were soon used in clocks, watches and other small, low power applications.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Advantages </strong></td><td><strong>Disadvantages</strong></td></tr><tr><td>High contrast<br>Low cost<br>Low power<br>Compact and very light</td><td>Often need an additional light source<br>Fragile<br>Slow to react<br>Limited temperature range – avoid freezing</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">The Display Modules</h2>



<p class="wp-block-paragraph">I’m going to be looking at 3 different boards:</p>



<ul class="wp-block-list">
<li>MakerHawk 12C OLED display with 128&#215;64 pixels (blue)&nbsp;</li>



<li>MakerHawk 12C OLED display with 128&#215;32 pixels (white)</li>



<li>AZ-Delivery HD44780 2004 Display with I2C converter (4 rows of 20 characters)</li>
</ul>



<p class="wp-block-paragraph">The first two can display graphic elements (lines, circles, pictures etc and text) while the last is a character only display.</p>



<h3 class="wp-block-heading">MakerHawk OLED displays with SSD1306 driver chip</h3>



<p class="wp-block-paragraph">These are I2C devices and only need to be connected to 3.3V-5V, GND, SCL, and SDA. They are very small (diagonals are 0.96” and 0.91” respectively) lightweight, with tiny pixels and excellent contrast, making them very easy to read. The larger display is blue while the smaller is white. </p>



<p class="wp-block-paragraph">They do not have a backlight and rely on reflection. The larger is supplied with 40 colored DuPont F-F cables and connection pins that need to be soldered to the board. You get two of the smaller displays in the packet, but no connection pins, sockets, or cables. There is no information supplied on how to connect them up to your Arduino or how to control them. The screens are protected with a plastic cover. (Take off carefully as the screens are delicate.) The four connections for I2C are clearly marked on the boards. Both devices have I2C addresses of 0x3C.</p>



<p class="wp-block-paragraph">The next step is to solder on the pins or sockets and connect them up to your Arduino.</p>



<h4 class="wp-block-heading">MakerHawk 12C OLED display with 128&#215;64 (blue)</h4>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="825" height="1024" src="https://tutorial45.com/wp-content/uploads/2020/07/ssd1306_128x64-1-825x1024.jpg" alt="" class="wp-image-10079" style="width:273px;height:339px" srcset="https://tutorial45.com/wp-content/uploads/2020/07/ssd1306_128x64-1-825x1024.jpg 825w, https://tutorial45.com/wp-content/uploads/2020/07/ssd1306_128x64-1-242x300.jpg 242w, https://tutorial45.com/wp-content/uploads/2020/07/ssd1306_128x64-1-768x953.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/07/ssd1306_128x64-1-585x726.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/07/ssd1306_128x64-1.jpg 1025w" sizes="(max-width: 825px) 100vw, 825px" /></figure>
</div>


<h4 class="wp-block-heading">MakerHawk 12C OLED display with 128&#215;32 pixels (white)</h4>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="392" height="293" src="https://tutorial45.com/wp-content/uploads/2020/07/ssd1306128x32_1.jpg" alt="" class="wp-image-10080" srcset="https://tutorial45.com/wp-content/uploads/2020/07/ssd1306128x32_1.jpg 392w, https://tutorial45.com/wp-content/uploads/2020/07/ssd1306128x32_1-300x224.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/07/ssd1306128x32_1-320x240.jpg 320w" sizes="(max-width: 392px) 100vw, 392px" /></figure>
</div>


<h2 class="wp-block-heading">Project #1: Using Arduino with the LCD 128&#215;64 pixel SSD1306 board</h2>



<p class="wp-block-paragraph"><strong>Materials needed:</strong></p>



<ul class="wp-block-list">
<li>Arduino – standard or cloned UNO&nbsp;</li>



<li>MakerHawk 12C OLED display with 128&#215;64</li>



<li>Connecting wires</li>



<li>10K Ohm potentiometer</li>
</ul>



<p class="wp-block-paragraph">For these demonstrations the potentiometer will provide a variable input voltage on the A0 pin of the Arduino.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="362" height="577" src="https://tutorial45.com/wp-content/uploads/2020/07/UNO_SSD1306_Pictorial.jpg" alt="LCD 128x64 pixel SSD1306 board" class="wp-image-10072" srcset="https://tutorial45.com/wp-content/uploads/2020/07/UNO_SSD1306_Pictorial.jpg 362w, https://tutorial45.com/wp-content/uploads/2020/07/UNO_SSD1306_Pictorial-188x300.jpg 188w" sizes="(max-width: 362px) 100vw, 362px" /></figure>
</div>


<p class="wp-block-paragraph">A4 is the SDA pin and A5 is the SCL pin on an Arduino UNO. Other boards may have different pins so check before you connect up.&nbsp; VCC goes to 5V and GND to GND.&nbsp; The wiper of the potentiometer goes to A0 on the Arduino and the other pins to 5V and GND.</p>



<p class="wp-block-paragraph">Now we need to obtain suitable libraries for the SSD1306 boards and for the graphics routines. Adafruit has provided some very useful libraries which are easy to install on the current version of the Arduino IDE.</p>



<p class="wp-block-paragraph">Start the Arduino software and use the Library Manager to search for and install the Adafruit SSD1306 library (2.2.1 at the time of writing). It covers both sizes of board and I2C and SPI versions. It also installs all the dependencies. Take the option to install the GFX library and the BusIO library at the same time. (<a aria-label="undefined (opens in a new tab)" href="https://github.com/adafruit/Adafruit_SSD1306" target="_blank" rel="noreferrer noopener nofollow">https://github.com/adafruit/Adafruit_SSD1306</a>)&nbsp;</p>



<p class="wp-block-paragraph">Check at the bottom of the <strong>Examples Menu</strong> that all necessary libraries have been installed.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="351" height="194" src="https://tutorial45.com/wp-content/uploads/2020/07/LibCheck-1.jpg" alt="Adding Arduino library" class="wp-image-10073" srcset="https://tutorial45.com/wp-content/uploads/2020/07/LibCheck-1.jpg 351w, https://tutorial45.com/wp-content/uploads/2020/07/LibCheck-1-300x166.jpg 300w" sizes="(max-width: 351px) 100vw, 351px" /></figure>
</div>


<p class="wp-block-paragraph">Notice that the library covers both sizes of screen as well as SPI and I2C protocols.</p>



<p class="wp-block-paragraph">Now we are ready to see can see what the display can do. I’ve provided a couple of scripts to demonstrate the versatility of these displays. The first shows the graphical capabilities, without any user intervention via the potentiometer. I’ve included plenty of comments so you can see what is going on.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="401" height="224" src="https://tutorial45.com/wp-content/uploads/2020/07/Sinewave-1.jpg" alt="SSD1306" class="wp-image-10081" style="width:263px;height:147px" srcset="https://tutorial45.com/wp-content/uploads/2020/07/Sinewave-1.jpg 401w, https://tutorial45.com/wp-content/uploads/2020/07/Sinewave-1-300x168.jpg 300w" sizes="(max-width: 401px) 100vw, 401px" /></figure>
</div>


<p class="wp-block-paragraph">The screen origin is top left (0,0) with 128 horizontal pixels (0…127) moving right and 64 vertical pixels (0…63) moving down.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="383" height="212" src="https://tutorial45.com/wp-content/uploads/2020/07/Size-1.jpg" alt="SSD1306" class="wp-image-10082" style="width:280px;height:155px" srcset="https://tutorial45.com/wp-content/uploads/2020/07/Size-1.jpg 383w, https://tutorial45.com/wp-content/uploads/2020/07/Size-1-300x166.jpg 300w" sizes="(max-width: 383px) 100vw, 383px" /></figure>
</div>


<p class="wp-block-paragraph">The screen may be small but it is very clear and sharp with enough room to be very useful.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="/* SSD1306 128x64 I2C OLED display with Arduino UNO
 * Illustrates text elements and graphics
 * Tony Goodhew  3rd July 2020
 * Tutorial45.com
 */

#include &lt;Wire.h&gt;
#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_SSD1306.h&gt;

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &amp;Wire, OLED_RESET);

void show() { // Often used sequence - Function to simplify code
  display.display();
  delay(2000);
  display.fillScreen(SSD1306_BLACK);
}
void show2() { // Faster
  display.display();
  delay(400);
  display.fillScreen(SSD1306_BLACK);
}
void setup() {
  Serial.begin(9600);
  randomSeed(analogRead(0));
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Old Address 0x3D for 128x64
    Serial.println(F(&quot;SSD1306 allocation failed&quot;));
    for(;;); // Don't proceed, loop forever
  }
  
// Initialise some variables
  int cw = SSD1306_WHITE; // colour white
  int cb = SSD1306_BLACK; // colour black
  int wait = 2000; // 2 second delay
  int x0 = 7; // 3 pairs of co-ordinates
  int y0 = 7;
  int x1 = 123;
  int y1 = 23;
  int x2 = 50;
  int y2 = 61;
  int w = 117; // Width
  int h = 56;  // Height
  
// Draw a Title screen
  display.clearDisplay();
  display.setTextSize(2);              // Middle
  display.setTextColor(cw);
  display.setCursor(0,15);
  display.println(&quot;SSD1306&quot;);
  display.println(&quot;       GFX&quot;);
  display.setCursor(10,53);
  display.setTextSize(1);
  display.println(&quot;Tutorial45.com&quot;);
  display.display(); delay(wait);
  randomSeed(analogRead(1));
  display.fillScreen(cw);              // Fill screen WHITE
  display.setTextColor(cb);
  display.setCursor(40,53);
  display.println(&quot;Tutorial45.com&quot;);
  display.setTextColor(cw);
  display.display(); delay(wait); 
  display.fillScreen(cb);              // Fill screen BLACK
  display.display();
  
// Display some Pixels
  for (int m = 0; m &lt;= 17; m++)  {     // 17 random pixels
    int xx = random(127);
    int yy = random(63);
    display.drawPixel(xx, yy, cw);
    display.display();
    delay(130);
  }
  delay(wait); 
  display.clearDisplay();
  
// Draw a Sine curve
  float sine[127]; 
// Initialise variables
  display.fillScreen(cb);
  display.setTextColor(cw);
  display.setCursor(10,56);
  display.setTextSize(1);
  display.println(&quot;Sine Curve&quot;);
  display.drawFastHLine(0, 32, 127 ,cw);
  for (int i = 0; i &lt; 128; i++){
    sine[i] = (sin(radians(i *2.8125))) * -1; 
    display.drawPixel(i,int(sine[i]*25+32),cw);
    display.display();
  }
  show();

// Demonstrate basic shapes
  display.drawLine(x0, y0, x1, y1 + 30, cw);
  show2();
  display.drawFastVLine(50, 12, h, cw);  // Fast vertical line of length l
  show2();
  display.drawFastHLine(5, 45, w ,cw);   // Fast horizontal line of length w 
  show2();
  // Random lines
  for( int m = 0; m &lt;10; m++) {
    int xr = random(127);
    int yr = random(63);
    int xl = random(127);
    int yl = random(63);
    display.drawLine(xr,yr,xl,yl,cw);
    display.display();
  }
  show();
  display.drawRect(x0, y0, w, h, cw);
  show2();
  display.fillRect(x0, y0, w, h, cw);
  show2();
  display.drawRoundRect(x0, y0, w, h, 14, cw);  // Rounded corners of radius 14  
  show2();
  display.fillRoundRect(x0, y0, w, h, 14, cw);
  show2();

// Grid
  for (int x =0; x &lt; 130; x=x +10) {
    display.drawFastVLine(x, 0, 64, cw);
  display.display();
  }
  for (int y = 0; y &lt; 64; y = y + 10) {
    display.drawFastHLine(0, y, 127 ,cw);
  display.display();
  }
  show();
    
// A few circles
  for (int r = 5;r &lt;32; r=r+5){
    display.drawCircle(63, 31, r, cw);
    display.display();
    delay(500);
  }
  display.fillCircle(63, 31, 31, cw);
  show();
  display.drawTriangle(x0, y0, x1, y1, x2, y2, cw);
  show();
  display.fillTriangle(x0, y0, x1, y1, x2, y2, cw);
  show();

// Screen rotation - 4 0ptions 0, 90 180 and 270 degrees 
  display.clearDisplay();
  display.setCursor(25,32);   // Title splash
  display.print(&quot;Rotate Screen&quot;);
  display.display(); delay(wait);
  for (int rt = 0; rt &lt;= 4; rt++){
    display.setRotation(rt % 4);               // Values 0..3
    display.clearDisplay();
    display.fillTriangle(0,0,0,30,30,0,cw);     // (x,y,x1,y1,x2,y2,colour)
    display.fillTriangle(0,15,40,50,15,0,cw);
    display.fillTriangle(15,0,50,40,0,15,cw);
    display.fillTriangle(40,50,50,40,20,20,cw);
    display.setTextSize(2);                     // Middle size
    display.setTextColor(cb); 
    display.setCursor(5,5);             
    display.println(rt % 4);
    display.display(); delay(wait);  
  }

// Text Sizes
  display.clearDisplay();
  display.setTextSize(1);                // Normal 1:1 pixel scale
  display.setTextColor(cw);   // Draw white text
  display.setCursor(0,0);                // Start at top-left corner
  display.println(&quot;Text Sizes&quot;);
  display.setTextSize(2);                // Medium
  display.println(&quot;SSD1306&quot;);
  display.setTextSize(3);                // Large - rather blocky  
  display.println(&quot;SSD1306&quot;);
  display.setTextSize(1);
  display.setCursor(40,53);
  display.println(&quot;Tutorial45.com&quot;);
  show();
  display.clearDisplay();

// Text along a path
  char msg[] =  &quot;+++ Tutorial45.com +++&quot;;
  display.clearDisplay();
  for (int n = 0; n &lt; 21; n++){
    char ch = msg[n];
    int p = n*6;
    float y1 = (sin(radians(p *2.8125)) * -1);
    int yy = int(y1 *25.0 + 32);
    display.drawChar(p, yy, ch, cw, cb, 1);
    display.display();
  }
  show();
  display.clearDisplay();
  char msg2[] = &quot;SSD1306+Arduino=MAGIC&quot;;
  for (int n = 0; n &lt; 21; n++){
    char ch = msg2[n];
    int p = n*6;
    float y1 = (cos(radians(p *2.8125)) * -1);
    int yy = int(y1 *25.0 + 32);
    display.drawChar(p, yy, ch, cw, cb, 1);
    display.display();
  }
  show();
  display.clearDisplay();
  char Msg[] = &quot;.+Arduino+.&quot;;
  y2 = 50;
  for (int n = 0; n &lt; 11; n++){
    char ch = Msg[n];
    int xx = n*12;
    display.drawChar(xx, y2, ch, cw, cb, 2); // (x,y,Char,foreGnd,backGnd,size)
    y2 = y2 - 5;  // Moving up the screen
    display.display();
  }
  show();
  
// Finish up
  display.setTextSize(1);             // Normal 1:1 pixel scale
  display.setTextColor(cw); 
  display.setCursor(0,25);
  display.setTextSize(2);             
  display.println(&quot;Finished&quot;);
  display.setCursor(40,53);
  display.setTextSize(1); 
  display.println(&quot;Tutorial45.com&quot;);
  display.display();
}
void loop() {
  // Empty - Linear program which halts
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">/* SSD1306 128x64 I2C OLED display with Arduino UNO</span></span>
<span class="line"><span style="color: #768390"> * Illustrates text elements and graphics</span></span>
<span class="line"><span style="color: #768390"> * Tony Goodhew  3rd July 2020</span></span>
<span class="line"><span style="color: #768390"> * Tutorial45.com</span></span>
<span class="line"><span style="color: #768390"> */</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Wire.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_GFX.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_SSD1306.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">SCREEN_WIDTH</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">128</span><span style="color: #ADBAC7"> </span><span style="color: #768390">// OLED display width, in pixels</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">SCREEN_HEIGHT</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7"> </span><span style="color: #768390">// OLED display height, in pixels</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">OLED_RESET</span><span style="color: #ADBAC7">     </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7"> </span><span style="color: #768390">// Reset pin # (or -1 if sharing Arduino reset pin)</span></span>
<span class="line"><span style="color: #ADBAC7">Adafruit_SSD1306 </span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SCREEN_WIDTH</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">SCREEN_HEIGHT</span><span style="color: #ADBAC7">, </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7">Wire, </span><span style="color: #6CB6FF">OLED_RESET</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">() { </span><span style="color: #768390">// Often used sequence - Function to simplify code</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SSD1306_BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">() { </span><span style="color: #768390">// Faster</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">400</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SSD1306_BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">randomSeed</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">));</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7">(</span><span style="color: #F47067">!</span><span style="color: #ADBAC7">display.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SSD1306_SWITCHCAPVCC</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0x3C</span><span style="color: #ADBAC7">)) { </span><span style="color: #768390">// Old Address 0x3D for 128x64</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">F</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;SSD1306 allocation failed&quot;</span><span style="color: #ADBAC7">));</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(;;); </span><span style="color: #768390">// Don&#39;t proceed, loop forever</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #768390">// Initialise some variables</span></span>
<span class="line"><span style="color: #ADBAC7">  int cw </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">SSD1306_WHITE</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// colour white</span></span>
<span class="line"><span style="color: #ADBAC7">  int cb </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">SSD1306_BLACK</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// colour black</span></span>
<span class="line"><span style="color: #ADBAC7">  int wait </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// 2 second delay</span></span>
<span class="line"><span style="color: #ADBAC7">  int x0 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// 3 pairs of co-ordinates</span></span>
<span class="line"><span style="color: #ADBAC7">  int y0 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int x1 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">123</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int y1 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">23</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int x2 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int y2 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">61</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int w </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">117</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// Width</span></span>
<span class="line"><span style="color: #ADBAC7">  int h </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">56</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// Height</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #768390">// Draw a Title screen</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);              </span><span style="color: #768390">// Middle</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;SSD1306&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;       GFX&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">53</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">(); </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(wait);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">randomSeed</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">));</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(cw);              </span><span style="color: #768390">// Fill screen WHITE</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(cb);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">53</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">(); </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(wait); </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(cb);              </span><span style="color: #768390">// Fill screen BLACK</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #768390">// Display some Pixels</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int m </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; m </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">17</span><span style="color: #ADBAC7">; m</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">)  {     </span><span style="color: #768390">// 17 random pixels</span></span>
<span class="line"><span style="color: #ADBAC7">    int xx </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">127</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">63</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(xx, yy, cw);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">130</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(wait); </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #768390">// Draw a Sine curve</span></span>
<span class="line"><span style="color: #ADBAC7">  float sine[</span><span style="color: #6CB6FF">127</span><span style="color: #ADBAC7">]; </span></span>
<span class="line"><span style="color: #768390">// Initialise variables</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(cb);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">56</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Sine Curve&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawFastHLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">127</span><span style="color: #ADBAC7"> ,cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">128</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    sine[i] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (</span><span style="color: #DCBDFB">sin</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">radians</span><span style="color: #ADBAC7">(i </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">2.8125</span><span style="color: #ADBAC7">))) </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">; </span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(i,</span><span style="color: #DCBDFB">int</span><span style="color: #ADBAC7">(sine[i]</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">25</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">),cw);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Demonstrate basic shapes</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawLine</span><span style="color: #ADBAC7">(x0, y0, x1, y1 </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawFastVLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">12</span><span style="color: #ADBAC7">, h, cw);  </span><span style="color: #768390">// Fast vertical line of length l</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawFastHLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">, w ,cw);   </span><span style="color: #768390">// Fast horizontal line of length w </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Random lines</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">( int m </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; m </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">; m</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    int xr </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">127</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    int yr </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">63</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    int xl </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">127</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    int yl </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">63</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">drawLine</span><span style="color: #ADBAC7">(xr,yr,xl,yl,cw);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawRect</span><span style="color: #ADBAC7">(x0, y0, w, h, cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(x0, y0, w, h, cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawRoundRect</span><span style="color: #ADBAC7">(x0, y0, w, h, </span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">, cw);  </span><span style="color: #768390">// Rounded corners of radius 14  </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillRoundRect</span><span style="color: #ADBAC7">(x0, y0, w, h, </span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">, cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show2</span><span style="color: #ADBAC7">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Grid</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int x </span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; x </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">130</span><span style="color: #ADBAC7">; x</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">drawFastVLine</span><span style="color: #ADBAC7">(x, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7">, cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; y </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7">; y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> y </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">drawFastHLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, y, </span><span style="color: #6CB6FF">127</span><span style="color: #ADBAC7"> ,cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">    </span></span>
<span class="line"><span style="color: #768390">// A few circles</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">;r </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; r</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">r</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">drawCircle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">63</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">, r, cw);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">500</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillCircle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">63</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">, cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawTriangle</span><span style="color: #ADBAC7">(x0, y0, x1, y1, x2, y2, cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillTriangle</span><span style="color: #ADBAC7">(x0, y0, x1, y1, x2, y2, cw);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Screen rotation - 4 0ptions 0, 90 180 and 270 degrees </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">25</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">);   </span><span style="color: #768390">// Title splash</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Rotate Screen&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">(); </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(wait);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int rt </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; rt </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">; rt</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">setRotation</span><span style="color: #ADBAC7">(rt </span><span style="color: #F47067">%</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);               </span><span style="color: #768390">// Values 0..3</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">fillTriangle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,cw);     </span><span style="color: #768390">// (x,y,x1,y1,x2,y2,colour)</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">fillTriangle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,cw);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">fillTriangle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">,cw);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">fillTriangle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,cw);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);                     </span><span style="color: #768390">// Middle size</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(cb); </span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">);             </span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(rt </span><span style="color: #F47067">%</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">(); </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(wait);  </span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Text Sizes</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);                </span><span style="color: #768390">// Normal 1:1 pixel scale</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(cw);   </span><span style="color: #768390">// Draw white text</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);                </span><span style="color: #768390">// Start at top-left corner</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Text Sizes&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);                </span><span style="color: #768390">// Medium</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;SSD1306&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);                </span><span style="color: #768390">// Large - rather blocky  </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;SSD1306&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">53</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Text along a path</span></span>
<span class="line"><span style="color: #ADBAC7">  char msg[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7">  </span><span style="color: #96D0FF">&quot;+++ Tutorial45.com +++&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int n </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; n </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">21</span><span style="color: #ADBAC7">; n</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    char ch </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> msg[n];</span></span>
<span class="line"><span style="color: #ADBAC7">    int p </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> n</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    float y1 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (</span><span style="color: #DCBDFB">sin</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">radians</span><span style="color: #ADBAC7">(p </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">2.8125</span><span style="color: #ADBAC7">)) </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">int</span><span style="color: #ADBAC7">(y1 </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">25.0</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">drawChar</span><span style="color: #ADBAC7">(p, yy, ch, cw, cb, </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  char msg2[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;SSD1306+Arduino=MAGIC&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int n </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; n </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">21</span><span style="color: #ADBAC7">; n</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    char ch </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> msg2[n];</span></span>
<span class="line"><span style="color: #ADBAC7">    int p </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> n</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    float y1 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (</span><span style="color: #DCBDFB">cos</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">radians</span><span style="color: #ADBAC7">(p </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">2.8125</span><span style="color: #ADBAC7">)) </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">int</span><span style="color: #ADBAC7">(y1 </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">25.0</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">drawChar</span><span style="color: #ADBAC7">(p, yy, ch, cw, cb, </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  char Msg[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;.+Arduino+.&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  y2 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int n </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; n </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">11</span><span style="color: #ADBAC7">; n</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    char ch </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> Msg[n];</span></span>
<span class="line"><span style="color: #ADBAC7">    int xx </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> n</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">12</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">drawChar</span><span style="color: #ADBAC7">(xx, y2, ch, cw, cb, </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// (x,y,Char,foreGnd,backGnd,size)</span></span>
<span class="line"><span style="color: #ADBAC7">    y2 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> y2 </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// Moving up the screen</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #768390">// Finish up</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);             </span><span style="color: #768390">// Normal 1:1 pixel scale</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(cw); </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">25</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);             </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Finished&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">53</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Empty - Linear program which halts</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<p class="wp-block-paragraph">The most important thing to remember is that none of the changes specified by the script will actually appear on the screen until the instruction <strong>display.display()</strong> is executed. The changes go on in the background and this instruction forces updates to the display. In this script it is often hidden inside the <strong>show()</strong> routine.</p>



<p class="wp-block-paragraph">The documentation for the library is found here: <a href="https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf" target="_blank" aria-label="undefined (opens in a new tab)" rel="noreferrer noopener">https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf</a></p>



<p class="wp-block-paragraph">Remember that these are simple monochrome displays so we only have two colours.</p>



<p class="wp-block-paragraph">The second example demonstrates the user updating the display by changing the physical input. As the potentiometer is twisted some of the values displayed change and the bar graph changes in length.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="345" height="238" src="https://tutorial45.com/wp-content/uploads/2020/07/Propot.jpg" alt="SSD1306" class="wp-image-10083" style="width:275px;height:190px" srcset="https://tutorial45.com/wp-content/uploads/2020/07/Propot.jpg 345w, https://tutorial45.com/wp-content/uploads/2020/07/Propot-300x207.jpg 300w" sizes="(max-width: 345px) 100vw, 345px" /></figure>
</div>


<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="/* SSD1306 128x64 I2C OLED display, Arduino UNO and 10K Ohm pot on A0
 * Tony Goodhew  3rd July 2020
 * Tutorial45.com
 */

#include &lt;Wire.h&gt;              
#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_SSD1306.h&gt;

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &amp;Wire, OLED_RESET);

int sensorPin = A0;   // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  Serial.begin(9600);
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F(&quot;SSD1306 allocation failed&quot;));
    for(;;); // Don't proceed, loop forever
  }
  display.clearDisplay();
  display.setTextSize(1);             // Small
  display.setTextColor(SSD1306_WHITE); 
  display.setCursor(0,0);             // Top Left corner
  display.println(&quot;SSD1306 Project&quot;);
  display.setCursor(20,10);
  display.println(&quot;Volts - Turn Pot&quot;);
  display.setCursor(64,118);
  display.setCursor(0,57);
  display.println(&quot;  Raw Pot    Volts&quot;);
  display.display();
}
// Functions for right alignment of integers
int iAlign2(int s){  // Space in 100s and 10s
  if (s &lt; 100) {display.print(&quot; &quot;);}
    if (s &lt; 10) {display.print(&quot; &quot;);}    
}
int iAlign3(int s){  // Space in 1000s
  if (s &lt; 1000) {display.print(&quot; &quot;);}
  iAlign2(s);
}
int bar(int yy,int v) {
  display.drawLine(0,yy,0,yy+14, SSD1306_WHITE);
  display.fillRect(1,yy+2,127,10,SSD1306_BLACK);
  display.fillRect(0,yy+2,v,10, SSD1306_WHITE);
  display.setCursor(102,yy+2);
  iAlign2(v);
  display.print(v);
  display.println(&quot;%&quot;);
  display.display();
}
// ++++++++++++Main Loop ++++++++++++++
void loop() {
  // Read pot and display values
  sensorValue = analogRead(sensorPin); // Read the value from the sensor
  float volts = (sensorValue * 5.0 / 1023.0);  // Calculate voltage
  int x = float(sensorValue * 100.0/1018);     // Calculate percentage
  bar(20,x);  // Redraw bar graph
  display.fillRect(0, 40, 127, 15, SSD1306_BLACK); // Clear line
  display.setCursor(5,40);
  display.setTextSize(2);
  iAlign3(sensorValue);  
  display.println(sensorValue);  // Raw pot value
  display.setCursor(78,40);
  display.print(volts);          // Equivalent voltage
  display.setTextSize(1);
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">/* SSD1306 128x64 I2C OLED display, Arduino UNO and 10K Ohm pot on A0</span></span>
<span class="line"><span style="color: #768390"> * Tony Goodhew  3rd July 2020</span></span>
<span class="line"><span style="color: #768390"> * Tutorial45.com</span></span>
<span class="line"><span style="color: #768390"> */</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Wire.h</span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7">              </span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_GFX.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_SSD1306.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">SCREEN_WIDTH</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">128</span><span style="color: #ADBAC7"> </span><span style="color: #768390">// OLED display width, in pixels</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">SCREEN_HEIGHT</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7"> </span><span style="color: #768390">// OLED display height, in pixels</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">OLED_RESET</span><span style="color: #ADBAC7">     </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7"> </span><span style="color: #768390">// Reset pin # (or -1 if sharing Arduino reset pin)</span></span>
<span class="line"><span style="color: #ADBAC7">Adafruit_SSD1306 </span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SCREEN_WIDTH</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">SCREEN_HEIGHT</span><span style="color: #ADBAC7">, </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7">Wire, </span><span style="color: #6CB6FF">OLED_RESET</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">int sensorPin </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">;   </span><span style="color: #768390">// select the input pin for the potentiometer</span></span>
<span class="line"><span style="color: #ADBAC7">int sensorValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// variable to store the value coming from the sensor</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7">(</span><span style="color: #F47067">!</span><span style="color: #ADBAC7">display.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SSD1306_SWITCHCAPVCC</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0x3C</span><span style="color: #ADBAC7">)) { </span><span style="color: #768390">// Address 0x3D for 128x64</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">F</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;SSD1306 allocation failed&quot;</span><span style="color: #ADBAC7">));</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(;;); </span><span style="color: #768390">// Don&#39;t proceed, loop forever</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);             </span><span style="color: #768390">// Small</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SSD1306_WHITE</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);             </span><span style="color: #768390">// Top Left corner</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;SSD1306 Project&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Volts - Turn Pot&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">118</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">57</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;  Raw Pot    Volts&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #768390">// Functions for right alignment of integers</span></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">iAlign2</span><span style="color: #ADBAC7">(int s){  </span><span style="color: #768390">// Space in 100s and 10s</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (s </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">) {display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7">);}</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (s </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">) {display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7">);}    </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">iAlign3</span><span style="color: #ADBAC7">(int s){  </span><span style="color: #768390">// Space in 1000s</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (s </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">) {display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7">);}</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">iAlign2</span><span style="color: #ADBAC7">(s);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">bar</span><span style="color: #ADBAC7">(int yy,int v) {</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,yy,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,yy</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">SSD1306_WHITE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">,yy</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">127</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">SSD1306_BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,yy</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">,v,</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">SSD1306_WHITE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">102</span><span style="color: #ADBAC7">,yy</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">iAlign2</span><span style="color: #ADBAC7">(v);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(v);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;%&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #768390">// ++++++++++++Main Loop ++++++++++++++</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Read pot and display values</span></span>
<span class="line"><span style="color: #ADBAC7">  sensorValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(sensorPin); </span><span style="color: #768390">// Read the value from the sensor</span></span>
<span class="line"><span style="color: #ADBAC7">  float volts </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (sensorValue </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5.0</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1023.0</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Calculate voltage</span></span>
<span class="line"><span style="color: #ADBAC7">  int x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">float</span><span style="color: #ADBAC7">(sensorValue </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100.0</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">1018</span><span style="color: #ADBAC7">);     </span><span style="color: #768390">// Calculate percentage</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">bar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,x);  </span><span style="color: #768390">// Redraw bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">127</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">SSD1306_BLACK</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Clear line</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">iAlign3</span><span style="color: #ADBAC7">(sensorValue);  </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(sensorValue);  </span><span style="color: #768390">// Raw pot value</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">78</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(volts);          </span><span style="color: #768390">// Equivalent voltage</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<p class="wp-block-paragraph">Notice that the whole screen is not updated. The top two lines and the bottom line are written in the <strong>setup()</strong> section. In the loop we update the bar graph and the 3 values. Flicker is minimal and caused by the ADC rather than the screen. The Raw Pot value has been right aligned by add spaces with the functions.</p>



<h2 class="wp-block-heading">Project #2 Using the Arduino with the LCD SSD1306 128&#215;32 pixel board</h2>



<p class="wp-block-paragraph">I’m now going to look at the smaller board. Obviously, it has half the screen size of the previous board, but this may have advantages if you only want to display a small amount of information or fit the display into a very confined space.&nbsp;</p>



<p class="wp-block-paragraph">The connections are the same as on the previous display and properly labeled so just swap over the displays. This is a digital voltmeter using the potentiometer as input.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="/* SSD1306 128x32 I2C OLED display, Arduino UNO and 10K Ohm pot on A0
 * Tony Goodhew  3rd July 2020
 * Tutorial45.com
 */

#include &lt;Wire.h&gt;              
#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_SSD1306.h&gt;

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &amp;Wire, OLED_RESET);

int sensorPin = A0;   // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  Serial.begin(9600);
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F(&quot;SSD1306 allocation failed&quot;));
    for(;;); // Don't proceed, loop forever
  }

// Title screen
  display.clearDisplay();
  display.setTextSize(2);             // Medium size
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(5,5);
  display.println(&quot;Volt Meter&quot;);
  display.setCursor(40,24);
  display.setTextSize(1); 
  display.println(&quot;Tutorial45.com&quot;);
  display.display();
  delay(3000);
// Static part of screen
  display.clearDisplay();
  display.setTextSize(1);             // Small
  display.setTextColor(SSD1306_WHITE); 
  display.setCursor(0,0);             // Top Left corner
  display.println(&quot;Volts - Turn Pot&quot;);
}

int wedge(int v,float vv) {  // Wedge shaped bar graph - like Volume control
  display.drawLine(0,12,0,31, SSD1306_WHITE);
  display.fillRect(1,12,127,20,SSD1306_BLACK);
  display.fillTriangle(0,31,v,31,v,(31 - (19*v / 100)),SSD1306_WHITE);
  display.setCursor(102,20);
  display.print(vv);
  display.display();
}
// ++++++++++++Main Loop ++++++++++++++
void loop() {
  // Read pot and display values
  sensorValue = analogRead(sensorPin); // Read the value from the sensor
  float volts = (sensorValue * 5.0 / 1023.0);  // Calculate voltage
  int x = float(sensorValue * 100.0/1023);     // Calculate percentage
  wedge(x,volts);  // Redraw bar graph
  delay(100);      // Delay to reduce jitter  
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">/* SSD1306 128x32 I2C OLED display, Arduino UNO and 10K Ohm pot on A0</span></span>
<span class="line"><span style="color: #768390"> * Tony Goodhew  3rd July 2020</span></span>
<span class="line"><span style="color: #768390"> * Tutorial45.com</span></span>
<span class="line"><span style="color: #768390"> */</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Wire.h</span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7">              </span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_GFX.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_SSD1306.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">SCREEN_WIDTH</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">128</span><span style="color: #ADBAC7"> </span><span style="color: #768390">// OLED display width, in pixels</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">SCREEN_HEIGHT</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7"> </span><span style="color: #768390">// OLED display height, in pixels</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">OLED_RESET</span><span style="color: #ADBAC7">     </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7"> </span><span style="color: #768390">// Reset pin # (or -1 if sharing Arduino reset pin)</span></span>
<span class="line"><span style="color: #ADBAC7">Adafruit_SSD1306 </span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SCREEN_WIDTH</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">SCREEN_HEIGHT</span><span style="color: #ADBAC7">, </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7">Wire, </span><span style="color: #6CB6FF">OLED_RESET</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">int sensorPin </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">;   </span><span style="color: #768390">// select the input pin for the potentiometer</span></span>
<span class="line"><span style="color: #ADBAC7">int sensorValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// variable to store the value coming from the sensor</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7">(</span><span style="color: #F47067">!</span><span style="color: #ADBAC7">display.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SSD1306_SWITCHCAPVCC</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0x3C</span><span style="color: #ADBAC7">)) { </span><span style="color: #768390">// Address 0x3D for 128x64</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">F</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;SSD1306 allocation failed&quot;</span><span style="color: #ADBAC7">));</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(;;); </span><span style="color: #768390">// Don&#39;t proceed, loop forever</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Title screen</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);             </span><span style="color: #768390">// Medium size</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SSD1306_WHITE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Volt Meter&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">24</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #768390">// Static part of screen</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);             </span><span style="color: #768390">// Small</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SSD1306_WHITE</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);             </span><span style="color: #768390">// Top Left corner</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Volts - Turn Pot&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">wedge</span><span style="color: #ADBAC7">(int v,float vv) {  </span><span style="color: #768390">// Wedge shaped bar graph - like Volume control</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">12</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">SSD1306_WHITE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">12</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">127</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">SSD1306_BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillTriangle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,v,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,v,(</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> (</span><span style="color: #6CB6FF">19</span><span style="color: #F47067">*</span><span style="color: #ADBAC7">v </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">)),</span><span style="color: #6CB6FF">SSD1306_WHITE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">102</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(vv);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #768390">// ++++++++++++Main Loop ++++++++++++++</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Read pot and display values</span></span>
<span class="line"><span style="color: #ADBAC7">  sensorValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(sensorPin); </span><span style="color: #768390">// Read the value from the sensor</span></span>
<span class="line"><span style="color: #ADBAC7">  float volts </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (sensorValue </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5.0</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1023.0</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Calculate voltage</span></span>
<span class="line"><span style="color: #ADBAC7">  int x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">float</span><span style="color: #ADBAC7">(sensorValue </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100.0</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">1023</span><span style="color: #ADBAC7">);     </span><span style="color: #768390">// Calculate percentage</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">wedge</span><span style="color: #ADBAC7">(x,volts);  </span><span style="color: #768390">// Redraw bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);      </span><span style="color: #768390">// Delay to reduce jitter  </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<p class="wp-block-paragraph">There are two ways of overwriting text on the screen. Print the same text on top of the previous text in the background colour. This has the disadvantage of having to store the old value for reprinting. Alternatively, you can draw a background coloured filled rectangle over the text. I’ve used the latter in these examples.</p>



<h3 class="wp-block-heading">Conclusion</h3>



<p class="wp-block-paragraph">These displays are inexpensive, very simple to connect up, use few Arduino pins and are easy to program. They are very clear and support a range of graphical elements. They may be a bit too small, especially the 128&#215;32 board.&nbsp;</p>



<h3 class="wp-block-heading">Suggested projects</h3>



<ul class="wp-block-list">
<li>Using a temperature sensor build a Current and Max-Min digital thermometer.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Using two temperature sensors and a humidity sensor build an Outside/Inside&nbsp; temperature &amp; Humidity display.</li>
</ul>



<ul class="wp-block-list">
<li>Using a joystick as an input device (Horizonal plus vertical potentiometers and a button switch) with the larger screen build an ‘Etch-A-Sketch’ type game. The current position of the ‘pen’ could be shown by small dots on the four edges of the display and the button used to switch between foreground and background colours.</li>
</ul>



<h2 class="wp-block-heading">AZ-Delivery HD44780 2004 LCD Display Bundle 4&#215;20</h2>



<p class="wp-block-paragraph">This beautifully packed product was supplied from Deggendorf, German. I bought it through Amazon UK which advertised, “The included E-Book provides useful information on how to begin your project, helps with a quick setup, and saves time on the configuration process.” I sent AZ an email requesting the E-Book and it arrived impressively quickly.</p>



<p class="wp-block-paragraph">There was one small problem. The pdf describes how to use the bare display with its many connections but not how to use the I2C adaptor.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="363" height="363" src="https://tutorial45.com/wp-content/uploads/2020/07/HD44780-2004LCD-1.png" alt="LCD front face" class="wp-image-10086" srcset="https://tutorial45.com/wp-content/uploads/2020/07/HD44780-2004LCD-1.png 363w, https://tutorial45.com/wp-content/uploads/2020/07/HD44780-2004LCD-1-300x300.png 300w, https://tutorial45.com/wp-content/uploads/2020/07/HD44780-2004LCD-1-150x150.png 150w, https://tutorial45.com/wp-content/uploads/2020/07/HD44780-2004LCD-1-65x65.png 65w" sizes="(max-width: 363px) 100vw, 363px" /></figure>
</div>


<p class="wp-block-paragraph">Luckily, I have used these before and know that you have to solder the interface board onto the display board. Normal practice is to solder it underneath with connection I2Cpins pointing out the side at the top left.</p>



<p class="wp-block-paragraph">Alternatives:</p>



<ul class="wp-block-list">
<li>Leave it off and use the board as outlined in the AZ guide – uses too many pins!</li>



<li>Solder on a row sockets; above or below the board so you can remove the backpack.</li>



<li>Solder a row of sockets with long legs so that you can use the display on a breadboard or put the adapter into the sockets.&nbsp;</li>
</ul>



<p class="wp-block-paragraph">Putting the interface board on the back has the advantage of gently tilting the display forward making it easier to read while working at your bench.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1000" height="714" src="https://tutorial45.com/wp-content/uploads/2020/07/HD44780-2004LCD-2-1.jpg" alt="LCD back" class="wp-image-10087" style="width:435px;height:310px" srcset="https://tutorial45.com/wp-content/uploads/2020/07/HD44780-2004LCD-2-1.jpg 1000w, https://tutorial45.com/wp-content/uploads/2020/07/HD44780-2004LCD-2-1-300x214.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/07/HD44780-2004LCD-2-1-768x548.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/07/HD44780-2004LCD-2-1-585x418.jpg 585w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>
</div>


<p class="wp-block-paragraph">You will need a small screwdriver to adjust the setting of the blue trim-pot once the display is connected and running a script.</p>



<p class="wp-block-paragraph">This is another I2C device so we connect up as before. Take care as the SCL and SDA pins are in a different order from the SSD1306! The I2C address of the backpack was 0x27. </p>



<p class="wp-block-paragraph">There has been a great deal of chat on the various <a href="https://tutorial45.com/charlieplexing-arduino-leds/">Arduino forums over the years about these backpack boards</a> available from many manufacturers. They come with various I2C addresses but the many libraries available, often with the same name, do not make the address configurable and will only work with a specific board. </p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>LCD 2004 Display</strong></td><td><strong>Arduino UNO</strong></td></tr><tr><td>GND</td><td>GND</td></tr><tr><td>VCC</td><td>5V</td></tr><tr><td>SDA</td><td>A4</td></tr><tr><td>SCL</td><td>A5</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Before we can run the script, we need to download a suitable library for this I2C version of the 2004 LCD. Unfortunately, AZ-Direct did not suggest a suitable site. I’ve been using the library at <a aria-label="undefined (opens in a new tab)" href="https://github.com/johnrickman/LiquidCrystal_I2C" target="_blank" rel="noreferrer noopener">https://github.com/johnrickman/LiquidCrystal_I2C</a></p>



<p class="wp-block-paragraph">and found that it works well with this interface board.</p>



<p class="wp-block-paragraph">Once the library is installed, we are ready to try out the display.&nbsp;</p>



<p class="wp-block-paragraph">Try this short script to test your connections:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="/ LCD I2C 2004 Test
// Tony Goodhew 4th July 2020
// Tutorial45.com
#include &lt;LiquidCrystal_I2C.h&gt;
// https://github.com/johnrickman/LiquidCrystal_I2C
// Set LCD address to 0x27 with 20 chars by 4 lines display
LiquidCrystal_I2C lcd(0x27, 20, 4);  //(0x27, 16, 2) small LCD

// Character definitions - 5 cols x 7 rows
byte pi[8]  = {0,1,14,26,10,10,10};  // Compact version

byte smiley[8] = {                   // Easy but verbose version
  B00000,
  B01010,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};
byte sad[8] = {
  B00000,
  B01010,
  B00000,
  B00000,
  B01110,
  B10001,
  B00000,
};
void setup() {
  // Initialize the LCD
  lcd.init();
  // Create 3 new characters Max of 8 (0…7)
  lcd.createChar(0, pi);
  lcd.createChar(1, smiley);
  lcd.createChar(2, sad);
  
  // Set Cursor position and print text
  lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print(&quot;Hello, world!&quot;);
  lcd.setCursor(3,1);
  lcd.print(&quot;Arduinos Rock&quot;);
  lcd.setCursor(0,2);
  lcd.print(&quot;Arduino LCD 2004 I2C&quot;);
  lcd.setCursor(3,3);
  lcd.print(&quot;Tutorial45.com&quot;);
  delay(2000);            //  Wait 2 seconds
  
  // print special characters to 4 corners of screen
  lcd.setCursor(0,3);
  lcd.write(0);
  lcd.setCursor(0,0);
  lcd.write(1);
  lcd.setCursor(19,0);
  lcd.write(2);
  lcd.setCursor(19,3);
  lcd.write(255);  // solid 5x8 block – built in
}

void loop(){}
" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">LCD</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">I2C</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2004</span><span style="color: #ADBAC7"> Test</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 4th July 2020</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">LiquidCrystal_I2C.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #768390">// https://github.com/johnrickman/LiquidCrystal_I2C</span></span>
<span class="line"><span style="color: #768390">// Set LCD address to 0x27 with 20 chars by 4 lines display</span></span>
<span class="line"><span style="color: #ADBAC7">LiquidCrystal_I2C </span><span style="color: #DCBDFB">lcd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x27</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">//(0x27, 16, 2) small LCD</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Character definitions - 5 cols x 7 rows</span></span>
<span class="line"><span style="color: #ADBAC7">byte pi[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">26</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">};  </span><span style="color: #768390">// Compact version</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">byte smiley[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {                   </span><span style="color: #768390">// Easy but verbose version</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B01010,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B10001,</span></span>
<span class="line"><span style="color: #ADBAC7">  B01110,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">byte sad[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B01010,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B01110,</span></span>
<span class="line"><span style="color: #ADBAC7">  B10001,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Initialize the LCD</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">init</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Create 3 new characters Max of 8 (0…7)</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, pi);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">, smiley);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">, sad);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Set Cursor position and print text</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">backlight</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Hello, world!&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Arduinos Rock&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Arduino LCD 2004 I2C&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);            </span><span style="color: #768390">//  Wait 2 seconds</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// print special characters to 4 corners of screen</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">write</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">write</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">19</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">write</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">19</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">write</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// solid 5x8 block – built in</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">(){}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">You should be able to see clear, bright, white characters on a bright blue background. You will probably need to adjust the small blue trim-pot on the back-board to get the best contrast.</p>



<p class="wp-block-paragraph">Once again, the origin is top left with the corner character at (0, 0). There are 20 characters on a line (0…19) and four rows (0&#8230;3).</p>



<p class="wp-block-paragraph">We need to be very carful about running over the end of a line.&nbsp;</p>



<p class="wp-block-paragraph">Change </p>



<pre class="wp-block-preformatted">lcd.print("Arduino LCD i2c 2004");</pre>



<p class="wp-block-paragraph">to </p>



<pre class="wp-block-preformatted">lcd.print("Arduino LCD i2c 2004xx*");</pre>



<p class="wp-block-paragraph">And change </p>



<pre class="wp-block-preformatted">lcd.print("Hello, world!");</pre>



<p class="wp-block-paragraph">to </p>



<pre class="wp-block-preformatted">lcd.print("Hello, world!123456");</pre>



<p class="wp-block-paragraph">When we run the script again, we find that line 0 overflows into line 2 and line 1 overflows onto the&nbsp; 3 line but the “*” gets immediately overwritten by the “T”.&nbsp;</p>



<p class="wp-block-paragraph">This can cause some problems so take care not to overrun lines.</p>



<p class="wp-block-paragraph">This script also demonstrates the definition of special characters. The user can define up to 8 characters on a 7 by 5 grid. This is easily carried out. Just look carefully at the happy and sad face definitions. The 1 bits indicate a white pixel.</p>



<pre class="wp-block-preformatted">byte pi[8]&nbsp; = {0,1,14,26,10,10,10};</pre>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-center" data-align="center"><strong>16</strong></th><th class="has-text-align-center" data-align="center">8</th><th class="has-text-align-center" data-align="center">4</th><th class="has-text-align-center" data-align="center">2</th><th class="has-text-align-center" data-align="center">1</th><th class="has-text-align-center" data-align="center"> </th></tr></thead><tbody><tr><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">0</td></tr><tr><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center">1</td></tr><tr><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">14</td></tr><tr><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">26</td></tr><tr><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">10</td></tr><tr><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">10</td></tr><tr><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center">10</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">If you run the script again you will find these defined characters in the corners of the screen. The large block at the bottom right is predefined character 255.  <a aria-label="undefined (opens in a new tab)" href="https://cdn-shop.adafruit.com/datasheets/TC2004A-01.pdf" target="_blank" rel="noreferrer noopener">https://cdn-shop.adafruit.com/datasheets/TC2004A-01.pdf</a></p>



<p class="wp-block-paragraph">This is a long but exciting document and shows the complete ‘built-in’ character set and how the characters you send to the screen are stored. </p>



<p class="wp-block-paragraph">Here is a script to display all of the available characters.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Display LCD 2004 character set
// Tony Goodhew 7th July 2020
// Tutorial45.com
#include &lt;Wire.h&gt;
#include &lt;LiquidCrystal_I2C.h&gt;
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 and 20x4

byte heart[8] = {0,10,31,31,14,4,0};
byte bknht[8] = {10,31,0,31,14,4,0};
byte ok[8] = {0,1,3,22,28,8,0};
byte no[8] = {0,27,14,4,14,27,0};
byte bong[8]  = {4,14,14,14,31,0,4}; 
byte music[8]  = {2,3,2,14,30,12,0};
byte clk[8] =  {0,14,21,29,17,14,0};
byte turn[8] = {1,1,5,9,31,8,4};

void setup(){
  lcd.init();  // initialize the lcd 
  lcd.backlight();
  lcd.createChar(1, heart);
  lcd.createChar(2, bknht);
  lcd.createChar(3, ok);
  lcd.createChar(4, no);
  lcd.createChar(5, bong);
  lcd.createChar(6, music);
  lcd.createChar(7, clk);
  lcd.createChar(0, turn);
  lcd.home();

// Show the character
  int n = 0;
  while (n &lt; 255) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(&quot;ASCII Codes: &quot;);
    lcd.setCursor(4,1);
    lcd.print(&quot;Dec: &quot;);
    lcd.print(n);
    lcd.print(&quot;-&quot;);
    lcd.print(n+15);
    lcd.setCursor(4,2);
    lcd.print(&quot;Hex: &quot;);
    lcd.print(n, HEX);
    lcd.print(&quot;-&quot;);
    lcd.print(n+15, HEX);
    lcd.setCursor(2, 3);
    for (int m=0; m&lt;16; m++) {
      lcd.write(n+m);
    }
    n = n + 16;
    delay(2000);
  }
 }
void loop() {}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Display LCD 2004 character set</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 7th July 2020</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Wire.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">LiquidCrystal_I2C.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">LiquidCrystal_I2C </span><span style="color: #DCBDFB">lcd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x27</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// set the LCD address to 0x27 and 20x4</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">byte heart[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">byte bknht[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">byte ok[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">28</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">byte no[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">27</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">27</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">byte bong[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">}; </span></span>
<span class="line"><span style="color: #ADBAC7">byte music[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">12</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">byte clk[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7">  {</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">21</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">29</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">17</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">byte turn[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">9</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">};</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">init</span><span style="color: #ADBAC7">();  </span><span style="color: #768390">// initialize the lcd </span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">backlight</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">, heart);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">, bknht);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">, ok);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">, no);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">, bong);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">, music);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">, clk);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, turn);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">home</span><span style="color: #ADBAC7">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Show the character</span></span>
<span class="line"><span style="color: #ADBAC7">  int n </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">while</span><span style="color: #ADBAC7"> (n </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">clear</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;ASCII Codes: &quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Dec: &quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(n);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;-&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(n</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Hex: &quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(n, </span><span style="color: #6CB6FF">HEX</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;-&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(n</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">HEX</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int m</span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; m</span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">16</span><span style="color: #ADBAC7">; m</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">      lcd.</span><span style="color: #DCBDFB">write</span><span style="color: #ADBAC7">(n</span><span style="color: #F47067">+</span><span style="color: #ADBAC7">m);</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    n </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> n </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">16</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7"> }</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {}</span></span></code></pre></div>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="400" height="140" src="https://tutorial45.com/wp-content/uploads/2020/07/screen1-2.jpg" alt="" class="wp-image-10090" srcset="https://tutorial45.com/wp-content/uploads/2020/07/screen1-2.jpg 400w, https://tutorial45.com/wp-content/uploads/2020/07/screen1-2-300x105.jpg 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure>
</div>


<h2 class="wp-block-heading">Project #3 Using Arduino with the AZ-Delivery LCD 2004 and FC-113 I2C backpack</h2>



<h3 class="wp-block-heading">Materials needed</h3>



<ul class="wp-block-list">
<li>Arduino – standard or cloned UNO&nbsp;</li>



<li>AZ-Delivery LCD 2004 and FC-113 I2C backpack Connecting wires</li>



<li>3 x 10K Ohm potentiometer</li>



<li>1 x RGB LED or single Red, green and Blue resistors</li>



<li>3 x 560 Ohm resistors – nearby value</li>



<li>Breadboard or stripboard</li>



<li>Connecting wire</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="341" height="748" src="https://tutorial45.com/wp-content/uploads/2020/07/3rd.png" alt="pictorial of lCD 2004" class="wp-image-10095" srcset="https://tutorial45.com/wp-content/uploads/2020/07/3rd.png 341w, https://tutorial45.com/wp-content/uploads/2020/07/3rd-137x300.png 137w" sizes="(max-width: 341px) 100vw, 341px" /></figure>
</div>


<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// LCD I2C 2004 Project
// Tony Goodhew 4th July 2020
// LCD i2c, Arduino, RGB LED and 3 10K Ohm potentiometers
#include &lt;LiquidCrystal_I2C.h&gt;
// https://github.com/johnrickman/LiquidCrystal_I2C

// Set the LCD address to 0x27 &amp; 20 chars by 2 lines display
LiquidCrystal_I2C lcd(0x27, 20, 4);  //(0x27, 16, 2) small LCD

#define r 6  // Red LED pin
#define g 5  // Green LED pin
#define b 3  // Blue LED pin

// Character definitions - 5 cols x 7 rows
byte smiley[8] = {
  B00000,
  B01010,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};
byte sad[8] = {
  B00000,
  B01010,
  B00000,
  B00000,
  B01110,
  B10001,
  B00000,
};
byte block[8]  = {0,31,31,31,31,31,31};

void align(int v){                // Right align number with spaces
  if (v &lt; 100) {lcd.print(&quot; &quot;);}
  if (v &lt; 10 ) {lcd.print(&quot; &quot;);}
}
void setup() {
  // Initialize the LCD
  lcd.init(); 
  // Create  new characters - Max of 8
  lcd.createChar(0, smiley);
  lcd.createChar(1, sad);
  lcd.createChar(2, block);  // For bar graph
  lcd.backlight(); 
  
  // Set up static Text
  lcd.clear();
  lcd.setCursor(6,3);
  lcd.print(&quot;Tutorial45.com&quot;); // Banner
  delay(1500);
  lcd.setCursor(0,0);
  lcd.print(&quot;LCD 2004 I2C Project&quot;);
  lcd.setCursor(0,1);
  lcd.print(&quot;R:     G:     B:    &quot;);  // Headings 
  lcd.setCursor(0,2);
  lcd.print(&quot;Power:            &quot;);
}

void loop(){
  int rValue = analogRead(A0)/4;  // Get Red
  analogWrite(r, rValue);
  lcd.setCursor(2,1);
  align(rValue);
  lcd.print(rValue);  
  int gValue = analogRead(A1)/4;  // Get Green
  analogWrite(g, gValue);
  lcd.setCursor(9,1);
  align(gValue);
  lcd.print(gValue);
  int bValue = analogRead(A2)/4;  // Get Blue
  analogWrite(b, bValue);
  lcd.setCursor(16,1);
  align(bValue);
  lcd.print(bValue);
  int t = (rValue + gValue + bValue) *10 / 255 / 3; // Calc Power
  lcd.setCursor(6,2);
  lcd.print(&quot;          &quot;);  // Clear bar graph
  lcd.setCursor(17,2);      // Display power number
  align(t);
  lcd.print(t);
  lcd.setCursor(6,2);
  for (int i=0; i&lt;t; i++) {  // Bar graph
    lcd.write(2); 
  }
  lcd.setCursor(0,3); // Bottom left corner
  if (t &gt; 5) {
    lcd.write(0);     // Happy face
  }
  else {
    lcd.write(1);     // Sad face
  }
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// LCD I2C 2004 Project</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 4th July 2020</span></span>
<span class="line"><span style="color: #768390">// LCD i2c, Arduino, RGB LED and 3 10K Ohm potentiometers</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">LiquidCrystal_I2C.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #768390">// https://github.com/johnrickman/LiquidCrystal_I2C</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Set the LCD address to 0x27 &amp; 20 chars by 2 lines display</span></span>
<span class="line"><span style="color: #ADBAC7">LiquidCrystal_I2C </span><span style="color: #DCBDFB">lcd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x27</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">//(0x27, 16, 2) small LCD</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define r </span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// Red LED pin</span></span>
<span class="line"><span style="color: #ADBAC7">#define g </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// Green LED pin</span></span>
<span class="line"><span style="color: #ADBAC7">#define b </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// Blue LED pin</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Character definitions - 5 cols x 7 rows</span></span>
<span class="line"><span style="color: #ADBAC7">byte smiley[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B01010,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B10001,</span></span>
<span class="line"><span style="color: #ADBAC7">  B01110,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">byte sad[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B01010,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">  B01110,</span></span>
<span class="line"><span style="color: #ADBAC7">  B10001,</span></span>
<span class="line"><span style="color: #ADBAC7">  B00000,</span></span>
<span class="line"><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">byte block[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">]  </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">};</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">align</span><span style="color: #ADBAC7">(int v){                </span><span style="color: #768390">// Right align number with spaces</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (v </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">) {lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7">);}</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (v </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7"> ) {lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7">);}</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Initialize the LCD</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">init</span><span style="color: #ADBAC7">(); </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Create  new characters - Max of 8</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, smiley);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">, sad);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">createChar</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">, block);  </span><span style="color: #768390">// For bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">backlight</span><span style="color: #ADBAC7">(); </span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Set up static Text</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">clear</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Banner</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1500</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;LCD 2004 I2C Project&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;R:     G:     B:    &quot;</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Headings </span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Power:            &quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">  int rValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">)</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// Get Red</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">analogWrite</span><span style="color: #ADBAC7">(r, rValue);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">align</span><span style="color: #ADBAC7">(rValue);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(rValue);  </span></span>
<span class="line"><span style="color: #ADBAC7">  int gValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">A1</span><span style="color: #ADBAC7">)</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// Get Green</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">analogWrite</span><span style="color: #ADBAC7">(g, gValue);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">align</span><span style="color: #ADBAC7">(gValue);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(gValue);</span></span>
<span class="line"><span style="color: #ADBAC7">  int bValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">A2</span><span style="color: #ADBAC7">)</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// Get Blue</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">analogWrite</span><span style="color: #ADBAC7">(b, bValue);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">16</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">align</span><span style="color: #ADBAC7">(bValue);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(bValue);</span></span>
<span class="line"><span style="color: #ADBAC7">  int t </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (rValue </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> gValue </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> bValue) </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// Calc Power</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;          &quot;</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Clear bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">17</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);      </span><span style="color: #768390">// Display power number</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">align</span><span style="color: #ADBAC7">(t);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(t);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i</span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">t; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">) {  </span><span style="color: #768390">// Bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">write</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Bottom left corner</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (t </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">write</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);     </span><span style="color: #768390">// Happy face</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">    lcd.</span><span style="color: #DCBDFB">write</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);     </span><span style="color: #768390">// Sad face</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="400" height="141" src="https://tutorial45.com/wp-content/uploads/2020/07/screen21.jpg" alt="lcd 2002 i2c" class="wp-image-10091" srcset="https://tutorial45.com/wp-content/uploads/2020/07/screen21.jpg 400w, https://tutorial45.com/wp-content/uploads/2020/07/screen21-300x106.jpg 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure>
</div>


<p class="wp-block-paragraph">Once again, we need to be careful when we overwrite. If you overwrite ‘100’ with ‘99’ you will get ‘990’. Always fill all of the character positions with new characters. It is easy to write 3 spaces, reset the cursor and write the number.</p>



<p class="wp-block-paragraph">You can set the cursor to flash, but I’ve never found it useful.</p>



<p class="wp-block-paragraph">After many days and e-mails back and forth with AZ-Delivery in Germany, I found that there is a separate E-book for the backpack board, called LCD16x2_FC-113.pdf &#8211; but it is only available in German.&nbsp;</p>



<p class="wp-block-paragraph">It tells you to use the &#8220;New LiquidCrystal&#8221; library at: <a href="https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/" target="_blank" aria-label="undefined (opens in a new tab)" rel="noreferrer noopener">https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/</a></p>



<p class="wp-block-paragraph">and provides this minimal script (adapted for 20 characters and 4 lines) to get you started:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Uses the new-liquidcrystal_i2c library
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/
// This is the Test Script from AZ-Delivery matched with the 
// FC-113 Serial LCD Adapter Board Module I2C Interface

#include &lt;Wire.h&gt; 
#include &lt;LCD.h&gt;
#include &lt;LiquidCrystal_I2C.h&gt;

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);  // Set the LCD I2C address

void setup()
{
  lcd.begin(20,4);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(&quot;&gt;AZ-Delivery.de&lt;&quot;);
  lcd.setCursor(0,1);
  lcd.print(&quot;&gt;20x4 &amp; FC-113!&lt;&quot;);
}

void loop()
{
   lcd.setBacklight(HIGH);  // blink the backlight
   delay(1000);
   lcd.setBacklight(LOW);
   delay(1000);
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Uses the new-liquidcrystal_i2c library</span></span>
<span class="line"><span style="color: #768390">// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/</span></span>
<span class="line"><span style="color: #768390">// This is the Test Script from AZ-Delivery matched with the </span></span>
<span class="line"><span style="color: #768390">// FC-113 Serial LCD Adapter Board Module I2C Interface</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Wire.h</span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">LCD</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">LiquidCrystal_I2C.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">LiquidCrystal_I2C </span><span style="color: #DCBDFB">lcd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x27</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">POSITIVE</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Set the LCD I2C address</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">()</span></span>
<span class="line"><span style="color: #ADBAC7">{</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">clear</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;&gt;AZ-Delivery.de&lt;&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  lcd.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;&gt;20x4 &amp; FC-113!&lt;&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">()</span></span>
<span class="line"><span style="color: #ADBAC7">{</span></span>
<span class="line"><span style="color: #ADBAC7">   lcd.</span><span style="color: #DCBDFB">setBacklight</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">HIGH</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// blink the backlight</span></span>
<span class="line"><span style="color: #ADBAC7">   </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">   lcd.</span><span style="color: #DCBDFB">setBacklight</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">LOW</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">   </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="400" height="140" src="https://tutorial45.com/wp-content/uploads/2020/07/33.jpg" alt="printing through lcd" class="wp-image-10093" srcset="https://tutorial45.com/wp-content/uploads/2020/07/33.jpg 400w, https://tutorial45.com/wp-content/uploads/2020/07/33-300x105.jpg 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure>
</div>


<h3 class="wp-block-heading">Conclusion</h3>



<p class="wp-block-paragraph">This screen is large and much easier to read. Its update rate is quite slow. If you re-write the whole screen in one go, you can see a ripple across the display. The main drawback is that it cannot display graphical objects. </p>



<p class="wp-block-paragraph">There is a slight problem with the documentation supplied to English-speaking customers by AZ-Delivery. However, the suppliers of the SSD1306 boards provided no help or documentation. Finding a suitable Arduino library that works properly could be a problem. The SSD1602 and 2004 LCDs are very popular with Arduino users and the I2C backpack does leave more pins free for your projects.</p>



<h3 class="wp-block-heading">Project suggestions</h3>



<ul class="wp-block-list">
<li>Define some more characters.</li>



<li>Connect up some sensors and display the values received on the screen. You could use temperature, humidity, air pressure, distance, tilt, or accelerometer sensors.&nbsp;</li>
</ul>



<h2 class="wp-block-heading">Comparing the boards</h2>



<figure class="wp-block-table"><table><tbody><tr><td></td><td><strong>SSD1306 128&#215;64</strong></td><td><strong>SSD1306 128&#215;32</strong></td><td><strong>LCD 2004</strong></td></tr><tr><td><strong>Advantages</strong></td><td>Excellent graphics3 sizes of charactersExcellent support libraryVery clear – high contrastOnly needs 2 pinsInexpensiveFree cables</td><td>Excellent graphics3 sizes of charactersExcellent support libraryVery clear – high contrastOnly needs 2 pins(2 in the packet)Cheap</td><td>Very easy to readLarge charactersEasy to see from a distanceOnly needs 2 pins with backpack</td></tr><tr><td><strong>Disadvantages</strong></td><td>A bit small</td><td>Probably too small</td><td>Cannot display graphicsFinding a suitable library</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Overview</h3>



<p class="wp-block-paragraph">I&#8217;ve had the LCD 1602 and LCD2004 boards in my possession for quite a while now, acquiring them shortly after my initial Arduino purchase. Their utility has been significantly increased by the backpack. The larger SSD1306 board has been in use by me for approximately 18 months and I have found it to be exceedingly beneficial. The scope of what one can do with this small display is expansive. Which board to choose essentially comes down to &#8216;horses for courses&#8217;; it depends on the specifics of your project and the viewing distance required.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tutorial45.com/arduino-to-lcd-projects/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Nokia 5110 Arduino Project From Start to Hero</title>
		<link>https://tutorial45.com/nokia-5110-arduino-lcd/</link>
					<comments>https://tutorial45.com/nokia-5110-arduino-lcd/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Andreea]]></dc:creator>
		<pubDate>Tue, 27 Feb 2024 08:46:36 +0000</pubDate>
				<category><![CDATA[Arduino Projects]]></category>
		<guid isPermaLink="false">https://tutorial45.com/?p=10099</guid>

					<description><![CDATA[<p><a href="https://tutorial45.com/nokia-5110-arduino-lcd/">Nokia 5110 Arduino Project From Start to Hero</a></p>
<p>The Philips PCD8544 driver chip is connected to a recycled screen from the popular Nokia 5110 phone. Because the screens are second-hand, the glass cover often has small scratches/blemishes. They are rehoused in a metal box on a PCB with 8 connections. You need to solder on the supplied pins. The screen is a Liquid ... </p>
<p class="read-more-container"><a title="Nokia 5110 Arduino Project From Start to Hero" class="read-more button" href="https://tutorial45.com/nokia-5110-arduino-lcd/#more-10099" aria-label="More on Nokia 5110 Arduino Project From Start to Hero">Read more</a></p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://tutorial45.com/nokia-5110-arduino-lcd/">Nokia 5110 Arduino Project From Start to Hero</a></p>

<p class="wp-block-paragraph">The Philips PCD8544 driver chip is connected to a recycled screen from the popular Nokia 5110 phone. Because the screens are second-hand, the glass cover often has small scratches/blemishes. </p>



<p class="wp-block-paragraph">They are rehoused in a metal box on a PCB with 8 connections. You need to solder on the supplied pins. The screen is a Liquid Crystal Display, LCD.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="799" height="570" src="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-LCD.jpg" alt="Nokia 5110 unboxing" class="wp-image-10236" srcset="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-LCD.jpg 799w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-LCD-300x214.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-LCD-768x548.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-LCD-585x417.jpg 585w" sizes="(max-width: 799px) 100vw, 799px" /></figure>



<p class="wp-block-paragraph">You can obtain a copy of the documentation for the driver chip from <a aria-label="undefined (opens in a new tab)" href="https://www.sparkfun.com/datasheets/LCD/Monochrome/Nokia5110.pdf" target="_blank" rel="noreferrer noopener">here</a> and <a href="https://cdn.shopify.com/s/files/1/1509/1638/files/LCD_Display_84x48_Pixel_Datenblatt.pdf?6488019443713923040" target="_blank" rel="noreferrer noopener">here</a>.</p>



<p class="wp-block-paragraph">AZ Delivery supply a free, <a href="https://tutorial45.com/wp-content/uploads/2020/08/Nokia5110_-_ENG.pdf" target="_blank" rel="noreferrer noopener">9-page pdf guide</a> to using the device.&nbsp;</p>



<p class="wp-block-paragraph">If we look more closely at the board, we find that the 8 connection pins are labeled on the bottom surface, and there appear to be 4 resistors near each of the LEDs, illuminating the screen from the sides. </p>



<p class="wp-block-paragraph">The two sets of pads are interconnected so you can use either set. (Other suppliers of similar boards do not include resistors, which need to be added to the input line by the user. With these boards, you can control the brightness with a PWM pin supplying power to the LEDs. The connections on such boards may be in a different order – beware!) </p>



<p class="wp-block-paragraph">There appear to be jumper pads (JP) linking something to GND, but the documentation has no information.</p>



<p class="has-vivid-red-color has-pale-cyan-blue-background-color has-text-color has-background wp-block-paragraph"><strong>Important</strong>! This is a 3.3V device and will be damaged if connected directly to 5V.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="262" height="267" src="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-7.jpg" alt="Nokia 5110" class="wp-image-10235" srcset="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-7.jpg 262w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-7-65x65.jpg 65w" sizes="(max-width: 262px) 100vw, 262px" /></figure>
</div>


<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Pin: Description&nbsp;</strong></td><td><strong>Additional information</strong></td></tr><tr><td>1 RST (Reset )</td><td>Input&nbsp;</td></tr><tr><td>2 CE (Chip Enable)</td><td>Input&nbsp;</td></tr><tr><td>3 DC (Data/Control)</td><td>Input&nbsp;</td></tr><tr><td>4 DIN (Data in)</td><td>Input&nbsp;</td></tr><tr><td>5 CLK (Clock)</td><td>Input&nbsp;</td></tr><tr><td>6 VCC&nbsp;</td><td>Power supply &#8211; max. 3.3V!&nbsp;</td></tr><tr><td>7 LIGHT</td><td>LED active when connected to GND&nbsp;</td></tr><tr><td>8 GND (Ground)</td><td>Ground</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">The AZ Delivery documentation gives a Fritzing circuit <a href="https://tutorial45.com/wp-content/uploads/2020/08/Nokia5110_-_ENG.pdf" target="_blank" rel="noreferrer noopener">showing the connections to an Arduino UNO</a> using voltage shifters to protect the display.</p>



<p class="wp-block-paragraph">This involves a great deal of wiring and extra expense for the voltage shifters.</p>



<p class="wp-block-paragraph">A more compact and cheaper arrangement is to connect the data lines with 10K Ohm protection resistors as shown below. Make sure that VCC goes to the 3.3V outlet on the Arduino UNO.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="641" height="350" src="https://tutorial45.com/wp-content/uploads/2020/08/nokia-Arduino-lcd-1.jpg" alt="schematic Nokia 5110 Arduino Project" class="wp-image-10245" srcset="https://tutorial45.com/wp-content/uploads/2020/08/nokia-Arduino-lcd-1.jpg 641w, https://tutorial45.com/wp-content/uploads/2020/08/nokia-Arduino-lcd-1-300x164.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/08/nokia-Arduino-lcd-1-585x319.jpg 585w" sizes="(max-width: 641px) 100vw, 641px" /></figure>
</div>


<p class="wp-block-paragraph">The simplest solution would be to use a 3.3V Arduino microcontroller with direct connection.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Display Pin&nbsp;</strong></td><td><strong>Comment&nbsp;</strong></td><td><strong>UNO Pin</strong></td></tr><tr><td>1 RST (Reset )&nbsp;</td><td>Input&nbsp;</td><td>3</td></tr><tr><td>2 CE (Chip Enable)</td><td>Input&nbsp;</td><td>4</td></tr><tr><td>3 DC (Data/Control)&nbsp;</td><td>Input&nbsp;</td><td>5</td></tr><tr><td>4 DIN (Data in)</td><td>Input&nbsp;</td><td>6</td></tr><tr><td>5 CLK (Clock)</td><td>Input&nbsp;</td><td>7</td></tr><tr><td>6 VCC&nbsp;</td><td>Max. 3.3V!</td><td>3.3V</td></tr><tr><td>7 LIGHT&nbsp;</td><td>To GND on breadboard&nbsp;</td><td>GND&nbsp;</td></tr><tr><td>8 GND (Ground)</td><td>&nbsp;Ground</td><td>GND&nbsp;</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">With the black link between pins 7 &amp; 8 the LEDs are always on.</p>



<p class="wp-block-paragraph">The documentation gives an example sketch to write pixels directly to the display using commands to the PCD8544. This is a pretty advanced method of driving the display and very a tedious method of creating images. You have to count pixels on graph paper and calculate the values of bytes.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Control Nokia 5110 LCD Display
// AZDelivery Example script
#define CLK 7  // More convenient pins
#define DIN 6
#define DC 5
#define CE 4
#define RST 3
static const byte LOGOTBL[] = { //AZ Delivery Bitmap Logo
0x0F,0x5,0x5,0x0F,0x90,0xD0,0xB0,0x90,0x00,0x00,0x08,0x08,0x08,0x08,0x00,
0x00,0xFF,0x81,0x81,0x81,0x81,0x7E,0x00,
0xFF,0x89,0x89,0x81,0x81,0x81,0x00,0xFF,0x80,0x80,0x80,0x80,0x80,0x00,
0xFF,0x00,0x07,0x38,0xC0,0xC0,0x38,0x07,
0x00,0xFF,0x89,0x89,0x81,0x81,0x81,0x00,0xFF,0x09,0x19,0x29,0x49,0x86,
0x00,0xF,0x90,0x90,0x90,0x90,0xF7
};
// Functions
void LcdWriteCmd(byte order) { // Send command to display
  digitalWrite(DC, LOW); // DC Pin is LOW for commands to the display
  shiftOut(DIN, CLK, MSBFIRST, order); // Transmit data byte serially
  // with MSB (most significant byte) first
 }
void LcdWriteData(byte data) { // Send data to display
  digitalWrite(DC, HIGH); // DC Pin is HIGH for data to the display
  shiftOut(DIN, CLK, MSBFIRST, data); // Transmit data byte serial
  // with MSB (most significant byte) first
 }

void LcdWriteLogo() {
  digitalWrite(CE, LOW); // Chip Enable Pin is LOW,
  // data transfer is activated
  LcdWriteCmd(0x80); // Jump to row 0 column 0, Jump Column
  LcdWriteCmd(0x40); // Skip row

  // Clear screen completely
  for(int i=0; i &lt; 504; i++) { 
  LcdWriteData(0x00); // Delete complete display
 }

  // Output AZ logo
  for(int i=0; i &lt; 66; i++) {
  LcdWriteData(LOGOTBL[i]); // Write logo data into display
 }

  digitalWrite(CE, HIGH); // Chip Enable Pin is HIGH,
  // data transfer is deactivated
}

void setup() {
  pinMode(CLK, OUTPUT); // Switch pin to output
  pinMode(DIN, OUTPUT); // Switch pin to output
  pinMode(DC, OUTPUT); // Switch pin to output
  pinMode(CE, OUTPUT); // Switch pin to output
  pinMode(RST, OUTPUT); // Switch pin to output
  digitalWrite(RST, HIGH); // Reset signal to Nokia display
  delay(100);

  // forward
  digitalWrite(RST, LOW);
  delay(100);
  digitalWrite(RST, HIGH);
  delay(100);

  // Initialization of the display according to data sheet
  digitalWrite(CE, LOW); // Chip Enable Pin is LOW,
  // data transfer is activated
  LcdWriteCmd(0x21); // Extended command set LCD
  LcdWriteCmd(0x90); // set LCD Vop
  LcdWriteCmd(0x20); // Normal command LCD
  LcdWriteCmd(0x0C); // LCD Normal Mode
  digitalWrite(CE, HIGH); // Chip Enable Pin is HIGH,
  // data transfer is deactivated
}

void loop() {
  LcdWriteLogo();
  delay(20000);
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Control Nokia 5110 LCD Display</span></span>
<span class="line"><span style="color: #768390">// AZDelivery Example script</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">CLK</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// More convenient pins</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">DIN</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">6</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">DC</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">CE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">RST</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span></span>
<span class="line"><span style="color: #ADBAC7">static </span><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">byte</span><span style="color: #ADBAC7"> LOGOTBL[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> { </span><span style="color: #768390">//AZ Delivery Bitmap Logo</span></span>
<span class="line"><span style="color: #6CB6FF">0x0F</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x0F</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x90</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xD0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xB0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x90</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x08</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x08</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x08</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x08</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x81</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x81</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x81</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x81</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x7E</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #6CB6FF">0xFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x89</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x89</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x81</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x81</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x81</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x80</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x80</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x80</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x80</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x80</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #6CB6FF">0xFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x07</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x38</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xC0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xC0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x38</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x07</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x89</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x89</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x81</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x81</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x81</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x09</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x19</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x29</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x49</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x86</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x90</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x90</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x90</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x90</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xF7</span></span>
<span class="line"><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #768390">// Functions</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(byte order) { </span><span style="color: #768390">// Send command to display</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">DC</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LOW</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// DC Pin is LOW for commands to the display</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">shiftOut</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">DIN</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">CLK</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">MSBFIRST</span><span style="color: #ADBAC7">, order); </span><span style="color: #768390">// Transmit data byte serially</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// with MSB (most significant byte) first</span></span>
<span class="line"><span style="color: #ADBAC7"> }</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">LcdWriteData</span><span style="color: #ADBAC7">(byte data) { </span><span style="color: #768390">// Send data to display</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">DC</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">HIGH</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// DC Pin is HIGH for data to the display</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">shiftOut</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">DIN</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">CLK</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">MSBFIRST</span><span style="color: #ADBAC7">, data); </span><span style="color: #768390">// Transmit data byte serial</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// with MSB (most significant byte) first</span></span>
<span class="line"><span style="color: #ADBAC7"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">LcdWriteLogo</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CE</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LOW</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Chip Enable Pin is LOW,</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// data transfer is activated</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x80</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Jump to row 0 column 0, Jump Column</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x40</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Skip row</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Clear screen completely</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(int i</span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">504</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">) { </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">LcdWriteData</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x00</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Delete complete display</span></span>
<span class="line"><span style="color: #ADBAC7"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Output AZ logo</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(int i</span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">66</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">LcdWriteData</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">LOGOTBL</span><span style="color: #ADBAC7">[i]); </span><span style="color: #768390">// Write logo data into display</span></span>
<span class="line"><span style="color: #ADBAC7"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CE</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">HIGH</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Chip Enable Pin is HIGH,</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// data transfer is deactivated</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CLK</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Switch pin to output</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">DIN</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Switch pin to output</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">DC</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Switch pin to output</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CE</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Switch pin to output</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">RST</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Switch pin to output</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">RST</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">HIGH</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Reset signal to Nokia display</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// forward</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">RST</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LOW</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">RST</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">HIGH</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Initialization of the display according to data sheet</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CE</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LOW</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Chip Enable Pin is LOW,</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// data transfer is activated</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x21</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Extended command set LCD</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x90</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// set LCD Vop</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x20</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Normal command LCD</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x0C</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// LCD Normal Mode</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CE</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">HIGH</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Chip Enable Pin is HIGH,</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// data transfer is deactivated</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">LcdWriteLogo</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">20000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<p class="wp-block-paragraph">On executing the script, I was pretty disappointed at this point as nothing appeared on the screen.</p>



<p class="wp-block-paragraph">I looked in the datasheet and found that it was possible to change Vop (operational voltage?) and Bias.</p>



<p class="wp-block-paragraph">I replaced</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="LcdWriteCmd(0x90); // set LCD Vop" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x90</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// set LCD Vop</span></span></code></pre></div>



<p class="wp-block-paragraph">With these 3 lines and ran the script again.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="LcdWriteCmd(0xBF); // set LCD Vop
LcdWriteCmd(0x04); // Set Temp coefficient
LcdWriteCmd(0x13); // Bias mode 1:40" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0xBF</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// set LCD Vop</span></span>
<span class="line"><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x04</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Set Temp coefficient</span></span>
<span class="line"><span style="color: #DCBDFB">LcdWriteCmd</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x13</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Bias mode 1:40</span></span></code></pre></div>



<p class="wp-block-paragraph">The expected display appeared.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="262" height="263" src="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-5.jpg" alt="Nokia 5110 Arduino Project first test" class="wp-image-10227" srcset="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-5.jpg 262w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-5-150x150.jpg 150w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-5-65x65.jpg 65w" sizes="(max-width: 262px) 100vw, 262px" /></figure>
</div>


<p class="wp-block-paragraph">The method works but we need to find an easier method of obtaining the bytes for a screen image. I decided to use Paint.net, to create the image, and LCDAssistant to convert a bitmap file to a list of bytes.</p>



<ul class="wp-block-list">
<li><a aria-label="undefined (opens in a new tab)" href="https://www.getpaint.net/download.html" target="_blank" rel="noreferrer noopener">https://www.getpaint.net/download.html</a></li>



<li><a aria-label="undefined (opens in a new tab)" href="http://en.radzio.dxp.pl/bitmap_converter/" target="_blank" rel="noreferrer noopener">http://en.radzio.dxp.pl/bitmap_converter/</a></li>
</ul>



<p class="wp-block-paragraph">Starting with Paint.net (<em>This could also be done using MS paint</em>)</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="677" height="415" src="https://tutorial45.com/wp-content/uploads/2020/08/tuto.jpg" alt="image to convert" class="wp-image-10259" srcset="https://tutorial45.com/wp-content/uploads/2020/08/tuto.jpg 677w, https://tutorial45.com/wp-content/uploads/2020/08/tuto-300x184.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/08/tuto-585x359.jpg 585w" sizes="(max-width: 677px) 100vw, 677px" /></figure>
</div>


<p class="wp-block-paragraph">I defined a drawing area of 84 pixels wide and 48 pixels high. I disabled Antialiasing, added a star shape and some text to make a test piece. I saved the image as a bitmap with automatic depth.</p>



<p class="wp-block-paragraph">I then loaded the saved image into LCDAssistant and used these settings.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="517" height="420" src="https://tutorial45.com/wp-content/uploads/2020/08/LCD_Assistant.jpg" alt="creating images" class="wp-image-10237" srcset="https://tutorial45.com/wp-content/uploads/2020/08/LCD_Assistant.jpg 517w, https://tutorial45.com/wp-content/uploads/2020/08/LCD_Assistant-300x244.jpg 300w" sizes="(max-width: 517px) 100vw, 517px" /></figure>
</div>


<p class="wp-block-paragraph">I saved this to create another file called T45Test, which I then opened in Notepad.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="442" height="423" src="https://tutorial45.com/wp-content/uploads/2020/08/T45Test-1.jpg" alt="COnverting images to code" class="wp-image-10239" srcset="https://tutorial45.com/wp-content/uploads/2020/08/T45Test-1.jpg 442w, https://tutorial45.com/wp-content/uploads/2020/08/T45Test-1-300x287.jpg 300w" sizes="(max-width: 442px) 100vw, 442px" /></figure>
</div>


<p class="wp-block-paragraph">I replaced the data block in the original script, and adjusted this loop to cope with the extra data and name change.</p>



<pre class="wp-block-preformatted">// Output Image
for(int i=0; i &lt; 504; i++) {&nbsp;
&nbsp;&nbsp;LcdWriteData(T45Test[i]); // Write logo data into display
&nbsp;}</pre>



<p class="wp-block-paragraph">This quickly produced the expected display.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="262" height="197" src="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-3.jpg" alt="image on the Nokia 5110" class="wp-image-10228"/></figure>
</div>


<p class="wp-block-paragraph">What we need to be able to do now is write words, graphic elements and numbers to the screen in real-time under program control.&nbsp; Luckily there is an Adafruit library for this device to provide the necessary help.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="675" height="164" src="https://tutorial45.com/wp-content/uploads/2020/08/library.jpg" alt="" class="wp-image-10242" srcset="https://tutorial45.com/wp-content/uploads/2020/08/library.jpg 675w, https://tutorial45.com/wp-content/uploads/2020/08/library-300x73.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/08/library-585x142.jpg 585w" sizes="(max-width: 675px) 100vw, 675px" /></figure>
</div>


<p class="wp-block-paragraph">This library is used with the Adafruit GFX library installed earlier on my computer for another project. Install any dependencies indicated as well. Try the long example script that comes with the library. It may well lack contrast initially.</p>



<p class="wp-block-paragraph">The library handles contrast (Vop) and Bias slightly differently so I wrote a short script to allow investigation of the best settings to overcome the poor contrast.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Set up screen visibility PCD8544 &amp; Nokia 5110 screen
// Tony Goodhew 9th July 2020
// Tutorial45.com
#include &lt;SPI.h&gt;
#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_PCD8544.h&gt;

//   PINS                                   CLK, DIN, DC, CE, RST
Adafruit_PCD8544 display = Adafruit_PCD8544(7,   6,   5,  4,  3);

void setup()   {
  Serial.begin(9600);
  display.begin(); // Initialise display
  int con = 56; // Change up or down by 1 to get
  int bias = 4; // the best settings for your display
  display.setBias(bias);
  display.setContrast(con);
  display.clearDisplay();  
  display.setCursor(0,5);  // INCLUDE ABOVE AT START OF YOUR OWN SCRIPTS
  display.println(&quot;Tutorial45.com&quot;);
  display.setCursor(0,15);
  display.print(&quot;Contrast: &quot;);
  display.println(con);
  display.setCursor(0,25);
  display.print(&quot;Bias: &quot;);  
  display.println(display.getBias());
  display.fillCircle(68, 36, 11, BLACK);
  display.fillCircle(68, 36, 6, WHITE);
  display.display();      // Essential instruction to update visible display
}
void loop() {}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Set up screen visibility PCD8544 &amp; Nokia 5110 screen</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 9th July 2020</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SPI</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_GFX.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_PCD8544.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">//   PINS                                   CLK, DIN, DC, CE, RST</span></span>
<span class="line"><span style="color: #ADBAC7">Adafruit_PCD8544 display </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">Adafruit_PCD8544</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">,   </span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">,   </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,  </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">,  </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">()   {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(); </span><span style="color: #768390">// Initialise display</span></span>
<span class="line"><span style="color: #ADBAC7">  int con </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">56</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// Change up or down by 1 to get</span></span>
<span class="line"><span style="color: #ADBAC7">  int bias </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// the best settings for your display</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setBias</span><span style="color: #ADBAC7">(bias);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setContrast</span><span style="color: #ADBAC7">(con);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();  </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// INCLUDE ABOVE AT START OF YOUR OWN SCRIPTS</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Contrast: &quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(con);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">25</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Bias: &quot;</span><span style="color: #ADBAC7">);  </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(display.</span><span style="color: #DCBDFB">getBias</span><span style="color: #ADBAC7">());</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillCircle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">68</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">36</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">11</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillCircle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">68</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">36</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();      </span><span style="color: #768390">// Essential instruction to update visible display</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {}</span></span></code></pre></div>



<p class="wp-block-paragraph">Settings of con = 56 and bias = 4 gave the best contrast without activating the background (white) pixels on my display. Just try running the script with single unit changes to the values of con and bias until you get good visibility.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="262" height="262" src="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-4.jpg" alt="Nokia 5110 Arduino Project printing letters" class="wp-image-10229" srcset="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-4.jpg 262w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-4-150x150.jpg 150w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-4-65x65.jpg 65w" sizes="(max-width: 262px) 100vw, 262px" /></figure>
</div>


<p class="wp-block-paragraph">Now that the contrast has been fixed, we can see that the display has a slight aspect ratio ‘feature’ and circles appear as ellipses. The lower pixel count means that there is less space to write and draw when compared to other LCD displays – especially when compared with the SSD1306 128&#215;64 display. However, the screen size and pixels are larger aiding visibility from a greater distance.</p>



<p class="wp-block-paragraph">SSD1306 128&#215;64 = 8192 pixels<br>SSD1306 128&#215;32 = 4086 pixels<br>Nokia 86&#215;48        = 4032 pixels</p>



<p class="wp-block-paragraph">We are now ready to check how quickly the screen updates in a useful application. I added a 10K Ohm potentiometer on A0 to provide an input to the script. (You will need 2 potentiometers for a later script.)</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="588" height="666" src="https://tutorial45.com/wp-content/uploads/2020/08/UNO_2Pots.jpg" alt="schematic arduino project with potentiometers" class="wp-image-10230" srcset="https://tutorial45.com/wp-content/uploads/2020/08/UNO_2Pots.jpg 588w, https://tutorial45.com/wp-content/uploads/2020/08/UNO_2Pots-265x300.jpg 265w, https://tutorial45.com/wp-content/uploads/2020/08/UNO_2Pots-585x663.jpg 585w" sizes="(max-width: 588px) 100vw, 588px" /></figure>
</div>


<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Volt Meter on Nokia 5110
// Tony Goodhew 9th July 2020
// Turorial45.com
// 10K Ohm potentiometer on A0
#include &lt;SPI.h&gt;
#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_PCD8544.h&gt;

//   PINS                                   CLK, DIN, DC, CE, RST
Adafruit_PCD8544 display = Adafruit_PCD8544(7,   6,   5,  4,  3);

int sensorPin = A0;   // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup()   {
  Serial.begin(9600);
  display.begin();      // Initialise display
  int con = 56;         // Change up or down by 1 to get
  int bias = 4;         // the best settings for your display
  display.setBias(bias);
  display.setContrast(con);
  display.clearDisplay();
  display.setCursor(0,5);
  display.println(&quot;Tutorial45.com&quot;);
  display.setCursor(0,15);
  display.print(&quot;Volt Meter&quot;);
  display.setCursor(17,40);
  display.print(&quot;Volts:&quot;);
  display.display();  // Static parts of screen written at this point
}

int bar(int v, float vv) {  // Bar graph
  display.drawLine(0,28,0,40, BLACK);  
  display.fillRect(1,30,80,8,WHITE);   // Rub out old bar graph
  display.fillRect(0,30,v,8,BLACK);    // Write new bar graph
  display.fillRect(55,40,26,10,WHITE); // Rub out old text
  display.setCursor(55,40);
  display.print(vv);                   // Write new text
  display.display();                   // Update display
}
// ++++++++++++Main Loop ++++++++++++++
void loop() {
  // Read pot and display values
  sensorValue = analogRead(sensorPin); // Read the value from the sensor
  float volts = (sensorValue * 5.0 / 1023.0);  // Calculate voltage
  int x = float(sensorValue * 80.0/1023);     // Calculate percentage
  bar(x,volts);  // Redraw bar graph
  delay(100);      // Delay to reduce jitter 
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Volt Meter on Nokia 5110</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 9th July 2020</span></span>
<span class="line"><span style="color: #768390">// Turorial45.com</span></span>
<span class="line"><span style="color: #768390">// 10K Ohm potentiometer on A0</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SPI</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_GFX.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_PCD8544.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">//   PINS                                   CLK, DIN, DC, CE, RST</span></span>
<span class="line"><span style="color: #ADBAC7">Adafruit_PCD8544 display </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">Adafruit_PCD8544</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">,   </span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">,   </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,  </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">,  </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">int sensorPin </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">;   </span><span style="color: #768390">// select the input pin for the potentiometer</span></span>
<span class="line"><span style="color: #ADBAC7">int sensorValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// variable to store the value coming from the sensor</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">()   {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">();      </span><span style="color: #768390">// Initialise display</span></span>
<span class="line"><span style="color: #ADBAC7">  int con </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">56</span><span style="color: #ADBAC7">;         </span><span style="color: #768390">// Change up or down by 1 to get</span></span>
<span class="line"><span style="color: #ADBAC7">  int bias </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">;         </span><span style="color: #768390">// the best settings for your display</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setBias</span><span style="color: #ADBAC7">(bias);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setContrast</span><span style="color: #ADBAC7">(con);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Volt Meter&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">17</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Volts:&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();  </span><span style="color: #768390">// Static parts of screen written at this point</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">bar</span><span style="color: #ADBAC7">(int v, float vv) {  </span><span style="color: #768390">// Bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">28</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);  </span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">80</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7">);   </span><span style="color: #768390">// Rub out old bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">,v,</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);    </span><span style="color: #768390">// Write new bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">55</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">26</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Rub out old text</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">55</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(vv);                   </span><span style="color: #768390">// Write new text</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();                   </span><span style="color: #768390">// Update display</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #768390">// ++++++++++++Main Loop ++++++++++++++</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Read pot and display values</span></span>
<span class="line"><span style="color: #ADBAC7">  sensorValue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(sensorPin); </span><span style="color: #768390">// Read the value from the sensor</span></span>
<span class="line"><span style="color: #ADBAC7">  float volts </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (sensorValue </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5.0</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1023.0</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Calculate voltage</span></span>
<span class="line"><span style="color: #ADBAC7">  int x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">float</span><span style="color: #ADBAC7">(sensorValue </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">80.0</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">1023</span><span style="color: #ADBAC7">);     </span><span style="color: #768390">// Calculate percentage</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">bar</span><span style="color: #ADBAC7">(x,volts);  </span><span style="color: #768390">// Redraw bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);      </span><span style="color: #768390">// Delay to reduce jitter </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="262" height="262" src="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-6.jpg" alt="Nokia 5110 Arduino Project printing tutorial45.com" class="wp-image-10231" srcset="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-6.jpg 262w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-6-150x150.jpg 150w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-6-65x65.jpg 65w" sizes="(max-width: 262px) 100vw, 262px" /></figure>
</div>


<p class="wp-block-paragraph">Twisting the knob of the potentiometer changes the length of the bar and updates the voltage value. Notice the slight scratch marks on the bottom left corner of the bar graph.</p>



<h2 class="wp-block-heading">Nokia 5110 Arduino Project with the AZ-Delivery with PCD8544 84&#215;48 Pixel LCD Display</h2>



<p class="wp-block-paragraph">This project illustrates how the display can be changed under the control of a couple of 10K Ohm potentiometers. The potentiometers control the left/right and up/down position of a circular sight in which the player moves to cover the target, indicated by a small cross. As soon as the centers are identical the ‘target’ is destroyed and another target appears at a random position. There are 5 targets in a game. The search time is recorded and displayed at the end of the game.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Game on Nokia 5110 – Search and Destroy
// Tony Goodhew 12th July 2020
// Turorial45.com
// 10K Ohm potentiometers on A0 and A1
#include &lt;SPI.h&gt;
#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_PCD8544.h&gt;

//   PINS                                   CLK, DIN, DC, CE, RST
Adafruit_PCD8544 display = Adafruit_PCD8544(7,   6,   5,  4,  3);

int xPin = A0;   // x potentiometer
int yPin = A1;   // y potentiometer
int ox = 0;      // Old sight position - ring
int oy = 0;
int nx = 20;     // New sight position
int ny = 20;
int tx = 15;     // Target position
int ty = 15;
int count = 0;   // Targets destroyed
float t1 = 0;    // Time increment – for a single target
unsigned long t0;// millis() value when target appears
float total = 0; // Total time spent searching

void setup()   {
  Serial.begin(9600);      // Ready for debugging
  display.begin();         // Initialise display
  int con = 56;            // Change up or down by 1 at a time to get
  int bias = 4;            // the best settings for your display
  display.setBias(bias);
  display.setContrast(con);
  display.clearDisplay();
  display.setTextSize(2);  // Large text for Title screen
  display.setCursor(0, 0);
  display.print(&quot;Search&quot;);
  display.setCursor(0, 16);
  display.print(&quot;and&quot;);
  display.setCursor(0, 32);
  display.print(&quot;Destroy&quot;);
  display.display();
  delay(3000);
  display.setTextSize(1);  // Normal size text for game play
  display.clearDisplay();
}
int target(int x, int y, int c){   // Show target cross
  display.drawLine(x-2,y,x+2,y,c);
  display.drawLine(x,y-2,x,y+2,c);
}
int finish(){                  // Final screen to display total time
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(5,5);
  display.print(&quot;You took:&quot;);
  display.setTextSize(2);
  display.setCursor(20,18);
  display.print(total);
  display.setTextSize(1);
  display.setCursor(0,40);
  display.print(count);
  display.setCursor(8,40);
  display.print(&quot; Targets hit&quot;);
  display.display();
  while(1){}                     // Wait for ever - HALT
}
int ring(int x, int y, int c) {  // Draw a ring - sight
  display.drawCircle(x,y,3,c);   // Radius is 3 pixels
}
int blob(int x, int y, int c){   // Fill a ring - target destroyed
  display.fillCircle(x,y,3,c);
}
int flash(int x,int y){          // Flash location of destroyed target
  t1 = ((millis() - t0)/1000.0); // Incremental search time in seconds
  total = total + t1;            // Update total searching time
  randomSeed(int(t1*100.0));     // Improve randomness
  display.clearDisplay();
  display.display();
  display.setCursor(0,0);
  display.print(total);
  count = count + 1;             // Update targets destroyed
  display.setCursor(78,0);       // Show count - top right
  display.print(count);
  display.display();
  for (int i = 0; i&lt;3; i++){     // Flash the blob - A hit!
    blob(x,y,1);
    display.display();
    delay(300);
    blob(x,y,0);
    display.display();
    delay(300);
  }
  t0 = millis();                 // Reset incremental timer
  if (count == 5){finish();}     // Enough targets destroyed?  
}
// ++++++++++++Main Loop ++++++++++++++
void loop() {
  target(tx,ty,1);                     // Show target
  nx = 3 + int(analogRead(xPin) /14);  // Get x position of sight
  ny = 43 - int(analogRead(yPin) /31); // Get y position of sight
  ring(ox,oy,0);                       // Blank old sight
  ring(nx,ny,1);                       // Show new sight
  ox = nx;                             // New position becomes old position
  oy = ny;
  display.display();
  if ((ox == tx) &amp; (oy == ty)){ // Is it a hit?
    flash(tx,ty);               // Yes – Explode! Update time and targets hit
    tx = random(76) + 3;        // Get new random target position
    ty = random(33) + 10;
  }
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Game on Nokia 5110 – Search and Destroy</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 12th July 2020</span></span>
<span class="line"><span style="color: #768390">// Turorial45.com</span></span>
<span class="line"><span style="color: #768390">// 10K Ohm potentiometers on A0 and A1</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SPI</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_GFX.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_PCD8544.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">//   PINS                                   CLK, DIN, DC, CE, RST</span></span>
<span class="line"><span style="color: #ADBAC7">Adafruit_PCD8544 display </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">Adafruit_PCD8544</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">,   </span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">,   </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,  </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">,  </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">int xPin </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">;   </span><span style="color: #768390">// x potentiometer</span></span>
<span class="line"><span style="color: #ADBAC7">int yPin </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A1</span><span style="color: #ADBAC7">;   </span><span style="color: #768390">// y potentiometer</span></span>
<span class="line"><span style="color: #ADBAC7">int ox </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;      </span><span style="color: #768390">// Old sight position - ring</span></span>
<span class="line"><span style="color: #ADBAC7">int oy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">int nx </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">;     </span><span style="color: #768390">// New sight position</span></span>
<span class="line"><span style="color: #ADBAC7">int ny </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">int tx </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">;     </span><span style="color: #768390">// Target position</span></span>
<span class="line"><span style="color: #ADBAC7">int ty </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">int count </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;   </span><span style="color: #768390">// Targets destroyed</span></span>
<span class="line"><span style="color: #ADBAC7">float t1 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;    </span><span style="color: #768390">// Time increment – for a single target</span></span>
<span class="line"><span style="color: #ADBAC7">unsigned long t0;</span><span style="color: #768390">// millis() value when target appears</span></span>
<span class="line"><span style="color: #ADBAC7">float total </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// Total time spent searching</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">()   {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);      </span><span style="color: #768390">// Ready for debugging</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">();         </span><span style="color: #768390">// Initialise display</span></span>
<span class="line"><span style="color: #ADBAC7">  int con </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">56</span><span style="color: #ADBAC7">;            </span><span style="color: #768390">// Change up or down by 1 at a time to get</span></span>
<span class="line"><span style="color: #ADBAC7">  int bias </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">;            </span><span style="color: #768390">// the best settings for your display</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setBias</span><span style="color: #ADBAC7">(bias);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setContrast</span><span style="color: #ADBAC7">(con);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Large text for Title screen</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Search&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">16</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;and&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Destroy&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Normal size text for game play</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">target</span><span style="color: #ADBAC7">(int x, int y, int c){   </span><span style="color: #768390">// Show target cross</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawLine</span><span style="color: #ADBAC7">(x</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">,y,x</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">,y,c);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawLine</span><span style="color: #ADBAC7">(x,y</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">,x,y</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">,c);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">finish</span><span style="color: #ADBAC7">(){                  </span><span style="color: #768390">// Final screen to display total time</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;You took:&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">18</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(total);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(count);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; Targets hit&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">while</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){}                     </span><span style="color: #768390">// Wait for ever - HALT</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">ring</span><span style="color: #ADBAC7">(int x, int y, int c) {  </span><span style="color: #768390">// Draw a ring - sight</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">drawCircle</span><span style="color: #ADBAC7">(x,y,</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">,c);   </span><span style="color: #768390">// Radius is 3 pixels</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">blob</span><span style="color: #ADBAC7">(int x, int y, int c){   </span><span style="color: #768390">// Fill a ring - target destroyed</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">fillCircle</span><span style="color: #ADBAC7">(x,y,</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">,c);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">flash</span><span style="color: #ADBAC7">(int x,int y){          </span><span style="color: #768390">// Flash location of destroyed target</span></span>
<span class="line"><span style="color: #ADBAC7">  t1 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> ((</span><span style="color: #DCBDFB">millis</span><span style="color: #ADBAC7">() </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> t0)</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">1000.0</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Incremental search time in seconds</span></span>
<span class="line"><span style="color: #ADBAC7">  total </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> total </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> t1;            </span><span style="color: #768390">// Update total searching time</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">randomSeed</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">int</span><span style="color: #ADBAC7">(t1</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">100.0</span><span style="color: #ADBAC7">));     </span><span style="color: #768390">// Improve randomness</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">clearDisplay</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(total);</span></span>
<span class="line"><span style="color: #ADBAC7">  count </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> count </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;             </span><span style="color: #768390">// Update targets destroyed</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">78</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);       </span><span style="color: #768390">// Show count - top right</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(count);</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){     </span><span style="color: #768390">// Flash the blob - A hit!</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">blob</span><span style="color: #ADBAC7">(x,y,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">300</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">blob</span><span style="color: #ADBAC7">(x,y,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">300</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  t0 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">millis</span><span style="color: #ADBAC7">();                 </span><span style="color: #768390">// Reset incremental timer</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (count </span><span style="color: #F47067">==</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">){</span><span style="color: #DCBDFB">finish</span><span style="color: #ADBAC7">();}     </span><span style="color: #768390">// Enough targets destroyed?  </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #768390">// ++++++++++++Main Loop ++++++++++++++</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">target</span><span style="color: #ADBAC7">(tx,ty,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);                     </span><span style="color: #768390">// Show target</span></span>
<span class="line"><span style="color: #ADBAC7">  nx </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">int</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(xPin) </span><span style="color: #F47067">/</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Get x position of sight</span></span>
<span class="line"><span style="color: #ADBAC7">  ny </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">43</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">int</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">analogRead</span><span style="color: #ADBAC7">(yPin) </span><span style="color: #F47067">/</span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Get y position of sight</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">ring</span><span style="color: #ADBAC7">(ox,oy,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);                       </span><span style="color: #768390">// Blank old sight</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">ring</span><span style="color: #ADBAC7">(nx,ny,</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);                       </span><span style="color: #768390">// Show new sight</span></span>
<span class="line"><span style="color: #ADBAC7">  ox </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> nx;                             </span><span style="color: #768390">// New position becomes old position</span></span>
<span class="line"><span style="color: #ADBAC7">  oy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> ny;</span></span>
<span class="line"><span style="color: #ADBAC7">  display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ((ox </span><span style="color: #F47067">==</span><span style="color: #ADBAC7"> tx) </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> (oy </span><span style="color: #F47067">==</span><span style="color: #ADBAC7"> ty)){ </span><span style="color: #768390">// Is it a hit?</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">flash</span><span style="color: #ADBAC7">(tx,ty);               </span><span style="color: #768390">// Yes – Explode! Update time and targets hit</span></span>
<span class="line"><span style="color: #ADBAC7">    tx </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">76</span><span style="color: #ADBAC7">) </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">;        </span><span style="color: #768390">// Get new random target position</span></span>
<span class="line"><span style="color: #ADBAC7">    ty </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">33</span><span style="color: #ADBAC7">) </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="262" height="259" src="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board.jpg" alt="Nokia 5110 Arduino Project search and destroy" class="wp-image-10232" srcset="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board.jpg 262w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-65x65.jpg 65w" sizes="(max-width: 262px) 100vw, 262px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="262" height="263" src="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-1.jpg" alt="Nokia 5110 Arduino Project addition" class="wp-image-10233" srcset="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-1.jpg 262w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-1-150x150.jpg 150w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-1-65x65.jpg 65w" sizes="(max-width: 262px) 100vw, 262px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="262" height="256" src="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-2.jpg" alt="Nokia 5110 Arduino Project printing digits and letters" class="wp-image-10234" srcset="https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-2.jpg 262w, https://tutorial45.com/wp-content/uploads/2020/08/Nokia-5110-board-2-65x65.jpg 65w" sizes="(max-width: 262px) 100vw, 262px" /></figure>
</div>


<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">This display operates at 3.3 volts, and it necessitates additional setup, such as voltage shifters or 10K resistors, particularly when used with 5-volt boards like the UNO. </p>



<p class="wp-block-paragraph">Initially, I was not impressed with the limited documentation and the display&#8217;s low contrast, but now this device has grown on me. Although its pixel count is quite low, supporting only 6 brief lines of text, its display diagonal is larger than that of the SSD1306 128&#215;64, making it more readable from afar. </p>



<p class="wp-block-paragraph">It utilizes five data lines, in contrast to the two lines used by I2C devices. Notably, it has a speed sufficient for basic games and provides real-time feedback.</p>



<h3 class="wp-block-heading">Additional things to try:</h3>



<ul class="wp-block-list">
<li>Exchange the simple potentiometer for an analog potentiometer joystick and see if this brings down your overall time with the game.</li>



<li>Use Paint.net and LCDAssistant to create a series of images to display one after another in a slide show.</li>



<li>Connect a distance sensor such as an HC-SR04 Ultrasonic or VL53L0X Time of Flight sensor and display the distance as you move your hand back and forth in front of the sensor.</li>



<li>Add an accelerometer and build a 2-dimensional ‘bubble-level’.</li>
</ul>



<h3 class="wp-block-heading">Hint</h3>



<p class="wp-block-paragraph">If your instructions are not appearing on the screen, check that you have ended the sequence with </p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="display.display();" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #ADBAC7">display.</span><span style="color: #DCBDFB">display</span><span style="color: #ADBAC7">();</span></span></code></pre></div>



<p class="wp-block-paragraph">This is the essential instruction to force your changes to the screen and it is so easy to forget it.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tutorial45.com/nokia-5110-arduino-lcd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Touch Screen Project</title>
		<link>https://tutorial45.com/arduino-with-touch-screen/</link>
					<comments>https://tutorial45.com/arduino-with-touch-screen/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Andreea]]></dc:creator>
		<pubDate>Tue, 27 Feb 2024 08:16:01 +0000</pubDate>
				<category><![CDATA[Arduino Projects]]></category>
		<category><![CDATA[Electronics and DIY]]></category>
		<guid isPermaLink="false">https://tutorial45.com/?p=10457</guid>

					<description><![CDATA[<p><a href="https://tutorial45.com/arduino-with-touch-screen/">Arduino Touch Screen Project</a></p>
<p>The AZ-Delivery 2.4” TFT LCD Touch Display boasts 320x 240 pixels with 16-bit color. It has Touch capabilities, a built-in SD card drive, and plugs straight onto the top of an Arduino UNO or Mega. Amazon charges less than £11 for this device. It offers a major step up from the tiny SSD1306 128&#215;64 monochrome ... </p>
<p class="read-more-container"><a title="Arduino Touch Screen Project" class="read-more button" href="https://tutorial45.com/arduino-with-touch-screen/#more-10457" aria-label="More on Arduino Touch Screen Project">Read more</a></p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://tutorial45.com/arduino-with-touch-screen/">Arduino Touch Screen Project</a></p>

<p class="wp-block-paragraph">The AZ-Delivery 2.4” TFT LCD Touch Display boasts 320x 240 pixels with 16-bit color. It has Touch capabilities, a built-in SD card drive, and plugs straight onto the top of an Arduino UNO or Mega. Amazon charges less than £11 for this device. It offers a major step up from the tiny SSD1306 128&#215;64 monochrome display.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="998" src="https://tutorial45.com/wp-content/uploads/2020/10/arduino-touch-screen-1-1024x998.jpg" alt="" class="wp-image-10458" style="width:328px;height:320px" srcset="https://tutorial45.com/wp-content/uploads/2020/10/arduino-touch-screen-1-1024x998.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/10/arduino-touch-screen-1-300x293.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/10/arduino-touch-screen-1-768x749.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/10/arduino-touch-screen-1-1170x1141.jpg 1170w, https://tutorial45.com/wp-content/uploads/2020/10/arduino-touch-screen-1-585x570.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/10/arduino-touch-screen-1.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">The TFT screen is much larger than the SSD1306 128&#215;64 and much more colourful. The package includes an SD card reader on the underside and a stylus for accurate touch-screen control.</p>



<p class="wp-block-paragraph">AZ-Delivery usually supply an e-book (pdf document for download) with their boards. The German version comes first followed by other languages. This has just become available and provides setup instructions and a demonstration graphics only sketch.</p>



<p class="wp-block-paragraph">The underside of the board has labels on the pins. As the board is an <a href="https://tutorial45.com/arduino-shields-for-arduino/">Arduino shield</a>, it will only fit on a UNO in one position. The SD card reader sits between USB and the power socket. It will also plug into and <a href="https://tutorial45.com/comparing-microcontrollers-arduino-mega-vs-uno/">Arduino MEGA</a> 2560. J1 and J2 fit into the digital pins, covering D0 to D13, while J3 and J4 fit into the analog and power pins.</p>



<p class="wp-block-paragraph">LCD_D0 to LCD_D7 provide an 8-bit bus with the other LCD pins on J3.</p>



<p class="wp-block-paragraph">The card reader uses the SPI pins, D11, D12, and D13 with chip select on D10. (Not D4 as used in all the Arduino example sketches.)</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="850" height="557" src="https://tutorial45.com/wp-content/uploads/2020/10/touchScreenArduino.jpg" alt="" class="wp-image-10474" style="width:850px;height:557px" srcset="https://tutorial45.com/wp-content/uploads/2020/10/touchScreenArduino.jpg 850w, https://tutorial45.com/wp-content/uploads/2020/10/touchScreenArduino-300x197.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/10/touchScreenArduino-768x503.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/10/touchScreenArduino-585x383.jpg 585w" sizes="(max-width: 850px) 100vw, 850px" /></figure>
</div>


<p class="wp-block-paragraph">This picture shows the underside of the board with an SD card inserted in the card reader.</p>



<p class="wp-block-paragraph">I searched the Web for drivers and examples and found much praise for the TFT graphics, reports of problems with the Touch control, and nothing about the SD card reader on this board.</p>



<p class="wp-block-paragraph">In the end, I installed several libraries (with all dependencies): Adafruit GFX, Adafruit TFT LCD, Adafruit TouchScreen, Adafruit ILI9341, MCUFRIEND_kbv, and SPFD5408-master. (The last 2 are not essential but include some interesting examples). The SD library is included in the basic Arduino set.</p>



<p class="wp-block-paragraph">I’ve used GFX with mono displays such as SSD1306 and soon got the TFT display working. The following script gives some idea about what it can do. I’ve included pixels, text (of varying sizes), lines, rectangles, triangles, squares, graphs, screen rotation, and text on a path. I was very impressed with the clarity, speed, brightness, and colors produced.</p>



<p class="wp-block-paragraph">Here is my first graphics sketch:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="//  AZ-Delivery 2.4&quot; TFT LCD touch shield Demo
//          Shield on Arduino UNO
//  +++ Tony Goodhew 17th September 2020 +++
//  Tutorial45.com

// Essential Adafruit GFX Libraries
#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_TFTLCD.h&gt;

#define LCD_CS A3     // Chip Select goes to Analog 3
#define LCD_CD A2     // Command/Data goes to Analog 2
#define LCD_WR A1     // LCD Write goes to Analog 1
#define LCD_RD A0     // LCD Read goes to Analog 0
#define LCD_RESET A4  // Can alternately just connect to Arduino's reset pin

// Colour definitions for 64k colour mode
// Bits 0..4 -&gt;   Blue 0..4
// Bits 5..10 -&gt;  Green 0..5
// Bits 11..15 -&gt; Red 0..4
#define BLACK 0x0000
#define WHITE 0xFFFF
#define GREY 0x7BEF
#define LT_GREY 0xC618
#define GREEN 0x07E0
#define LIME 0x87E0
#define BLUE 0x001F
#define RED 0xF800
#define AQUA 0x5D1C
#define YELLOW 0xFFE0
#define MAGENTA 0xF81F
#define CYAN 0x07FF
#define DK_CYAN 0x03EF
#define ORANGE 0xFCA0
#define PINK 0xF97F
#define BROWN 0x8200
#define VIOLET 0x9199
#define SILVER 0xA510
#define GOLD 0xA508
#define NAVY 0x000F
#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
// Put colours in an array for random colour access
int tftColours[] = {GREY,LT_GREY,GREEN,LIME,BLUE,RED,AQUA,YELLOW,MAGENTA,CYAN,DK_CYAN,
                   ORANGE,PINK,BROWN,VIOLET,SILVER,GOLD,NAVY,MAROON,PURPLE,OLIVE, WHITE};

// Create the TFT object using all pin assignments
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

// =========== SETUP ================
void setup() {
  Serial.begin(9600); // Useful for debugging
  tft.reset();
  tft.begin(0x9341);  // SDFP5408
  tft.setRotation(3); // 320 wide by 240 high - reset button on left
  tft.fillScreen(BLACK);
  tft.setCursor(30, 50);
  tft.setTextColor(RED);
  tft.setTextSize(3);
  tft.println(&quot;AZ-Delivery&quot;);
  tft.setTextColor(YELLOW);
  tft.setCursor(30, 90);
  tft.println(&quot;2.4 TFT LCD&quot;);
  tft.setCursor(30, 120);
  tft.println(&quot;Touch Display&quot;);
  tft.setCursor(30, 150);
  tft.println(&quot;&amp; SD Drive&quot;);
  tft.setCursor(30, 200);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println(&quot;Tutorial45.com&quot;);
  delay(4000);
  tft.fillScreen(BLACK); // Clears the screen
  
  // Display some Pixels
  for (int m = 0; m &lt;= 4000; m++)  {     // 4000 random pixels
    int xx = random(320);
    int yy = random(240);
    tft.drawPixel(xx, yy, tftColours[random(22)]);   
  }
  delay(2000);
  tft.fillScreen(BLACK);

  int x = 1;
  int y = 50;
  int h = 50;
  int w = 50;
  int xj = 160;
  int yj = 170;
  int t = RED;

  // Quilt
  for (int xx=0; xx &lt; 320; xx = xx + 32){
    for (int yy = 0; yy &lt; 240; yy = yy + 24){
      tft.fillRect(xx,yy,32,24,tftColours[random(22)]);
    }
  }

  delay(2000);
  tft.fillScreen(BLACK);
  // Grid
  tft.fillScreen(BLACK);
  for (int x =0; x &lt; 320; x=x +10) {
    tft.drawFastVLine(x+5, 0, 240, RED);
  }
  for (int y = 0; y &lt; 240; y = y + 10) {
    tft.drawFastHLine(0, y+3, 320 , BLUE);
  }
  delay(2000);
  tft.fillScreen(BLACK);
  for (int x = 60; x &lt; 200; x=x +25) {
    int yy = x-10;
    tft.drawRect(x,yy,40,45,tftColours[random(22)]); 
    //drawRect( x,  y,  w,  h, c)
  }
  delay(2000);
  // Rectangles
  tft.fillScreen(BLACK);
  for (int x = 60; x &lt; 200; x=x +25) {
    int yy = x-10;
    tft.fillRect(x,yy,40,45,tftColours[random(22)]); 
    //fillRect( x,  y,  w,  h, c)
  }
  delay(2000);
  tft.fillScreen(BLACK);
  int r = 5;
  for (int x = 60; x &lt; 200; x=x +25) {
    int yy = x-10;
    tft.drawRoundRect(x,yy,40,45,r,tftColours[random(22)]);
    r = r + 3; 
    //drawRoundRect( x,  y,  w,  h, r, c)
  }
  delay(2000);
  tft.fillScreen(BLACK);
  r = 5;
  for (int x = 60; x &lt; 200; x=x +25) {
    int yy = x-10;
    tft.fillRoundRect(x,yy,40,45,r,tftColours[random(22)]); 
    //fillRoundRect( x,  y,  w,  h, r, c)
    r = r + 3;
  }
  delay(2000);
  // A few circles
  tft.fillScreen(BLACK);
  for (int r = 120;r &gt; 5; r=r-10){
    tft.fillCircle(80, 40, r, tftColours[random(22)]);
    delay(50);
  }
  for (int r = 5;r &lt;120; r=r+10){
    tft.fillCircle(random(200), random(120), r, tftColours[random(22)]);
    delay(50);
  } 
  delay(2000);
  tft.fillScreen(BLACK);
  for (int r = 120;r &gt; 5; r=r-10){
    tft.drawCircle(80 + random(60), 40 + random(70), r, tftColours[random(22)]);
  }
  delay(1000);
  for (int r = 5;r &lt;120; r=r+10){
    tft.drawCircle(random(200), random(120), r, tftColours[random(22)]);
  } 
  delay(2000);
  
  // Draw Sine and Cosine curves  
  float sine[300];
  float cosine[300];
  tft.fillScreen(BLACK);
  tft.setTextColor(YELLOW);
  tft.setCursor(10,220);
  tft.setTextSize(2);
  tft.println(&quot;Sine Curve&quot;);
  tft.setTextColor(RED);
  tft.setCursor(125,20);
  tft.println(&quot;Cosine Curve&quot;);
  tft.drawFastHLine(9, 120, 300 ,BLUE);
  for (int i = 0; i &lt; 300; i++){
    sine[i] = (sin(radians(i *1.2))) * -1; 
    tft.drawPixel(i+9,int(sine[i]*100+120),YELLOW);
    cosine[i] = (cos(radians(i *1.2))) * -1; 
    tft.drawPixel(i+9,int(cosine[i]*100+120),RED);
  }
  delay(2000);
  // Screen rotation - 4 0ptions 0, 90 180 and 270 degrees 
  tft.fillScreen(BLACK);
  tft.setCursor(25,32);   // Title splash
  tft.print(&quot;Rotate Screen&quot;);
  delay(1000);
  tft.fillScreen(BLACK);
  for (int rt = 0; rt &lt;= 3  ; rt++){
    tft.setRotation(rt % 4);               // Values 0..3
    tft.fillScreen(BLACK);
    int cw = WHITE;
    tft.fillTriangle(0,0,0,30,30,0,cw);     // (x,y,x1,y1,x2,y2,colour)
    tft.fillTriangle(0,15,40,50,15,0,cw);
    tft.fillTriangle(15,0,50,40,0,15,cw);
    tft.fillTriangle(40,50,50,40,20,20,cw);
    tft.setTextSize(2);                     // Middle size
    tft.setTextColor(BLACK); 
    tft.setCursor(5,5);             
    tft.println(rt % 4);
    tft.setTextColor(RED);
    tft.setCursor(50,50);
    tft.setTextSize(3);
    tft.println(&quot;TFT LCD&quot;);
    delay(1000);  
  }
  tft.setRotation(3);
  tft.fillScreen(BLACK);
  // Text Sizes

  tft.setTextSize(1);                // Normal 1:1 pixel scale
  tft.setTextColor(WHITE);           // Draw white text
  tft.setCursor(0,0);                // Start at top-left corner
  tft.println(&quot;Text Sizes\n&quot;);
  tft.setTextSize(2);                // Medium
  tft.println(&quot;AZ-Delivery\n&quot;);
  tft.setTextSize(3);                // Large - rather blocky  
  tft.println(&quot;TFT LCD 320x240\n&quot;);
  tft.setTextSize(4);                // Larger - very blocky  
  tft.println(&quot;Touch\n&quot;);
  tft.setTextSize(5);                // Largest - very blocky  
  tft.println(&quot;2.4 inch&quot;);
  tft.setTextSize(1);
  tft.setTextColor(BLUE);
  tft.setCursor(220,220);
  tft.println(&quot;Tutorial45.com&quot;);
  delay(2000);
  
  // Text along a path
  tft.fillScreen(BLACK);
  char msg2[] = &quot;+ TFT LCD+Arduino=MAGIC +&quot;;
  for (int n = 0; n &lt; 25; n++){
    char ch = msg2[n];
    int p = n*12; // was 9
    float y1 = (cos(radians(p *2.8125)) * -1);
    int yy = int(y1 *25.0 + 100);
    tft.drawChar(p + 5, yy, ch, RED, BLACK, 2);
  }
  delay(4000);
  tft.fillScreen(BLACK);
  char msg[] =  &quot;+++ Tutorial45.com +++&quot;;
  tft.fillScreen(BLACK);
  for (int n = 0; n &lt; 22; n++){
    char ch = msg[n];
    int p = n*9;
    float y1 = (sin(radians(p *2.8125)) * -1);
    int yy = int(y1 *25.0 + 100);
    tft.drawChar(p + 60, yy, ch, GREEN, BLACK, 1);
  }
  tft.setTextSize(1);
  tft.setTextColor(BLUE);
  tft.setCursor(220,120);
  tft.println(&quot;Finished&quot;);
}

// ------------ LOOP NOT NEEDED --------------------

void loop() {}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">//  AZ-Delivery 2.4&quot; TFT LCD touch shield Demo</span></span>
<span class="line"><span style="color: #768390">//          Shield on Arduino UNO</span></span>
<span class="line"><span style="color: #768390">//  +++ Tony Goodhew 17th September 2020 +++</span></span>
<span class="line"><span style="color: #768390">//  Tutorial45.com</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Essential Adafruit GFX Libraries</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_GFX.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_TFTLCD.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_CS</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A3</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// Chip Select goes to Analog 3</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_CD</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A2</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// Command/Data goes to Analog 2</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_WR</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A1</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// LCD Write goes to Analog 1</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_RD</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// LCD Read goes to Analog 0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_RESET</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A4</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// Can alternately just connect to Arduino&#39;s reset pin</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Colour definitions for 64k colour mode</span></span>
<span class="line"><span style="color: #768390">// Bits 0..4 -&gt;   Blue 0..4</span></span>
<span class="line"><span style="color: #768390">// Bits 5..10 -&gt;  Green 0..5</span></span>
<span class="line"><span style="color: #768390">// Bits 11..15 -&gt; Red 0..4</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x0000</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xFFFF</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">GREY</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x7BEF</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LT_GREY</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xC618</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">GREEN</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x07E0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LIME</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x87E0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x001F</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xF800</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">AQUA</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x5D1C</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">YELLOW</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xFFE0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MAGENTA</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xF81F</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">CYAN</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x07FF</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">DK_CYAN</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x03EF</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">ORANGE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xFCA0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">PINK</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xF97F</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">BROWN</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x8200</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">VIOLET</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x9199</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">SILVER</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xA510</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">GOLD</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xA508</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">NAVY</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x000F</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MAROON</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x7800</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">PURPLE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x780F</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">OLIVE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x7BE0</span></span>
<span class="line"><span style="color: #768390">// Put colours in an array for random colour access</span></span>
<span class="line"><span style="color: #ADBAC7">int tftColours[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {GREY,LT_GREY,GREEN,LIME,BLUE,RED,AQUA,YELLOW,MAGENTA,CYAN,DK_CYAN,</span></span>
<span class="line"><span style="color: #ADBAC7">                   ORANGE,PINK,BROWN,VIOLET,SILVER,GOLD,NAVY,MAROON,PURPLE,OLIVE, WHITE};</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Create the TFT object using all pin assignments</span></span>
<span class="line"><span style="color: #ADBAC7">Adafruit_TFTLCD </span><span style="color: #DCBDFB">tft</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">LCD_CS</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_CD</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_WR</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_RD</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_RESET</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// =========== SETUP ================</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Useful for debugging</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">reset</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x9341</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// SDFP5408</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setRotation</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// 320 wide by 240 high - reset button on left</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;AZ-Delivery&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">YELLOW</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">90</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;2.4 TFT LCD&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Touch Display&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">150</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;&amp; SD Drive&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">200</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">4000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Clears the screen</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Display some Pixels</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int m </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; m </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4000</span><span style="color: #ADBAC7">; m</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">)  {     </span><span style="color: #768390">// 4000 random pixels</span></span>
<span class="line"><span style="color: #ADBAC7">    int xx </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">320</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">240</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(xx, yy, tftColours[</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">)]);   </span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  int x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int h </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int w </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int xj </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">160</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int yj </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">170</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int t </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Quilt</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int xx</span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; xx </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">320</span><span style="color: #ADBAC7">; xx </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> xx </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; yy </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">240</span><span style="color: #ADBAC7">; yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> yy </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">24</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">      tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(xx,yy,</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">24</span><span style="color: #ADBAC7">,tftColours[</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">)]);</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Grid</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int x </span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; x </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">320</span><span style="color: #ADBAC7">; x</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawFastVLine</span><span style="color: #ADBAC7">(x</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">240</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; y </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">240</span><span style="color: #ADBAC7">; y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> y </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawFastHLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, y</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">320</span><span style="color: #ADBAC7"> , </span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">60</span><span style="color: #ADBAC7">; x </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">200</span><span style="color: #ADBAC7">; x</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">25</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> x</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawRect</span><span style="color: #ADBAC7">(x,yy,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">,tftColours[</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">)]); </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">//drawRect( x,  y,  w,  h, c)</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Rectangles</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">60</span><span style="color: #ADBAC7">; x </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">200</span><span style="color: #ADBAC7">; x</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">25</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> x</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(x,yy,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">,tftColours[</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">)]); </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">//fillRect( x,  y,  w,  h, c)</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">60</span><span style="color: #ADBAC7">; x </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">200</span><span style="color: #ADBAC7">; x</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">25</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> x</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawRoundRect</span><span style="color: #ADBAC7">(x,yy,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">,r,tftColours[</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">)]);</span></span>
<span class="line"><span style="color: #ADBAC7">    r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">; </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">//drawRoundRect( x,  y,  w,  h, r, c)</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">60</span><span style="color: #ADBAC7">; x </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">200</span><span style="color: #ADBAC7">; x</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">25</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> x</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillRoundRect</span><span style="color: #ADBAC7">(x,yy,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">,r,tftColours[</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">)]); </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">//fillRoundRect( x,  y,  w,  h, r, c)</span></span>
<span class="line"><span style="color: #ADBAC7">    r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// A few circles</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">;r </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">; r</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">r</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillCircle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">80</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">, r, tftColours[</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">)]);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">;r </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">; r</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">r</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillCircle</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">200</span><span style="color: #ADBAC7">), </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">), r, tftColours[</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">)]);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  } </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">;r </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">; r</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">r</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawCircle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">80</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">60</span><span style="color: #ADBAC7">), </span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">70</span><span style="color: #ADBAC7">), r, tftColours[</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">)]);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">;r </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">; r</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">r</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawCircle</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">200</span><span style="color: #ADBAC7">), </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">), r, tftColours[</span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">)]);</span></span>
<span class="line"><span style="color: #ADBAC7">  } </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Draw Sine and Cosine curves  </span></span>
<span class="line"><span style="color: #ADBAC7">  float sine[</span><span style="color: #6CB6FF">300</span><span style="color: #ADBAC7">];</span></span>
<span class="line"><span style="color: #ADBAC7">  float cosine[</span><span style="color: #6CB6FF">300</span><span style="color: #ADBAC7">];</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">YELLOW</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">220</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Sine Curve&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">125</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Cosine Curve&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">drawFastHLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">300</span><span style="color: #ADBAC7"> ,</span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">300</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    sine[i] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (</span><span style="color: #DCBDFB">sin</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">radians</span><span style="color: #ADBAC7">(i </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">1.2</span><span style="color: #ADBAC7">))) </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">; </span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(i</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">9</span><span style="color: #ADBAC7">,</span><span style="color: #DCBDFB">int</span><span style="color: #ADBAC7">(sine[i]</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">100</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">),</span><span style="color: #6CB6FF">YELLOW</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    cosine[i] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (</span><span style="color: #DCBDFB">cos</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">radians</span><span style="color: #ADBAC7">(i </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">1.2</span><span style="color: #ADBAC7">))) </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">; </span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(i</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">9</span><span style="color: #ADBAC7">,</span><span style="color: #DCBDFB">int</span><span style="color: #ADBAC7">(cosine[i]</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">100</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">),</span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Screen rotation - 4 0ptions 0, 90 180 and 270 degrees </span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">25</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">);   </span><span style="color: #768390">// Title splash</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Rotate Screen&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int rt </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; rt </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">  ; rt</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setRotation</span><span style="color: #ADBAC7">(rt </span><span style="color: #F47067">%</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);               </span><span style="color: #768390">// Values 0..3</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    int cw </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillTriangle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,cw);     </span><span style="color: #768390">// (x,y,x1,y1,x2,y2,colour)</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillTriangle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,cw);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillTriangle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">,cw);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillTriangle</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,cw);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);                     </span><span style="color: #768390">// Middle size</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">);             </span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(rt </span><span style="color: #F47067">%</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;TFT LCD&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">);  </span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setRotation</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Text Sizes</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);                </span><span style="color: #768390">// Normal 1:1 pixel scale</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7">);           </span><span style="color: #768390">// Draw white text</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);                </span><span style="color: #768390">// Start at top-left corner</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Text Sizes</span><span style="color: #F47067">\n</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);                </span><span style="color: #768390">// Medium</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;AZ-Delivery</span><span style="color: #F47067">\n</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);                </span><span style="color: #768390">// Large - rather blocky  </span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;TFT LCD 320x240</span><span style="color: #F47067">\n</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);                </span><span style="color: #768390">// Larger - very blocky  </span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Touch</span><span style="color: #F47067">\n</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">);                </span><span style="color: #768390">// Largest - very blocky  </span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;2.4 inch&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">220</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">220</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Text along a path</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  char msg2[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;+ TFT LCD+Arduino=MAGIC +&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int n </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; n </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">25</span><span style="color: #ADBAC7">; n</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    char ch </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> msg2[n];</span></span>
<span class="line"><span style="color: #ADBAC7">    int p </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> n</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">12</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// was 9</span></span>
<span class="line"><span style="color: #ADBAC7">    float y1 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (</span><span style="color: #DCBDFB">cos</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">radians</span><span style="color: #ADBAC7">(p </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">2.8125</span><span style="color: #ADBAC7">)) </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">int</span><span style="color: #ADBAC7">(y1 </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">25.0</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawChar</span><span style="color: #ADBAC7">(p </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">, yy, ch, </span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">4000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  char msg[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7">  </span><span style="color: #96D0FF">&quot;+++ Tutorial45.com +++&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int n </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; n </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">22</span><span style="color: #ADBAC7">; n</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    char ch </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> msg[n];</span></span>
<span class="line"><span style="color: #ADBAC7">    int p </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> n</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">9</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    float y1 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (</span><span style="color: #DCBDFB">sin</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">radians</span><span style="color: #ADBAC7">(p </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">2.8125</span><span style="color: #ADBAC7">)) </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    int yy </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">int</span><span style="color: #ADBAC7">(y1 </span><span style="color: #F47067">*</span><span style="color: #6CB6FF">25.0</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">drawChar</span><span style="color: #ADBAC7">(p </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">60</span><span style="color: #ADBAC7">, yy, ch, </span><span style="color: #6CB6FF">GREEN</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">220</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Finished&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// ------------ LOOP NOT NEEDED --------------------</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {}</span></span></code></pre></div>



<p class="wp-block-paragraph"></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="479" height="346" src="https://tutorial45.com/wp-content/uploads/2020/10/black-screen.jpg" alt="" class="wp-image-10475" srcset="https://tutorial45.com/wp-content/uploads/2020/10/black-screen.jpg 479w, https://tutorial45.com/wp-content/uploads/2020/10/black-screen-300x217.jpg 300w" sizes="(max-width: 479px) 100vw, 479px" /></figure>
</div>


<h2 class="wp-block-heading">Color picking</h2>



<p class="wp-block-paragraph">Normally, when setting the color of an RGB LED, you have a range of 0-255 (0-FF hex) for each RGB component, which gives white = F, red = FF000, green FF00, and blue = FF. This is a 24-bit color and takes 3 bytes.  224 gives 16,777,216 different colors. The TFT screen is a 16-bit color device that can display 65,536 colors – more than enough. Here, the range is limited to 5 bits each for red and blue and 6 for green. (Our eyes are more sensitive to green, so It gets the extra bit of accuracy.)</p>



<figure class="wp-block-table"><table style="font-size: 11px"><tbody><tr><td style="background-color: tomato"><strong>R4</strong></td><td style="background-color: tomato"><strong>R3</strong></td><td style="background-color: tomato"><strong>R2</strong></td><td style="background-color: tomato"><strong>R1</strong></td><td style="background-color: tomato"><strong>R0</strong></td><td style="background-color: lightgreen"><strong>G5</strong></td><td style="background-color: lightgreen"><strong>G4</strong></td><td style="background-color: lightgreen"><strong>G3</strong></td><td style="background-color: lightgreen"><strong>G2</strong></td><td style="background-color: lightgreen"><strong>G1</strong></td><td style="background-color: lightgreen"><strong>G0</strong></td><td style="background-color: lightblue"><strong>B4</strong></td><td style="background-color: lightblue"><strong>B3</strong></td><td style="background-color: lightblue"><strong>B2</strong></td><td style="background-color: lightblue"><strong>B1</strong></td><td style="background-color: lightblue"><strong>B0</strong></td></tr style="background-color: lightblue"></tbody></table></figure>



<p class="wp-block-paragraph">To convert a 24-bit colour to a 16-bit colour held in integers r, g and b, each with range 0 – 255.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Convert 24-bit colours to 16-bit colours
// Tony Goodhew 22 Sept 2020
// Tutorial45.com
void setup() {
  Serial.begin(9600);
  int r = 255;
  int g = 255;
  int b = 255;
  unsigned int n = r/8 * 2048 + g/4 * 32 + b/8;
  Serial.println(n,HEX);
}
void loop() {}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Convert 24-bit colours to 16-bit colours</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 22 Sept 2020</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  unsigned int n </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2048</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> g</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> b</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(n,</span><span style="color: #6CB6FF">HEX</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {}</span></span></code></pre></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">The following sketch indicates the colors available by converting an array of 24-bit color values into their 16-bit equivalent and displaying them on the screen with the data. There are not enough pixels on the screen to display all the colors simultaneously, so the last part of the sketch takes out the least significant green bit and displays half the available colors in six ways.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="//  Almost all the colours - several ways
//  AZ-Delivery 2.4&quot; TFT LCD touch shield Demo
//          Shield on Arduino UNO
//  +++ Tony Goodhew 25th September 2020 +++
//  Tutorial45.com

#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_TFTLCD.h&gt;

#define LCD_CS A3     // Chip Select goes to Analog 3
#define LCD_CD A2     // Command/Data goes to Analog 2
#define LCD_WR A1     // LCD Write goes to Analog 1
#define LCD_RD A0     // LCD Read goes to Analog 0
#define LCD_RESET A4  // Can alternately just connect to Arduino's reset pin

#define RED 0xF800
#define YELLOW 0xFFE0
#define BLUE 0x001F
// Create the TFT object with all pin assignments
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

// =========== SETUP ================
int title(String s){
    tft.fillScreen(0); // Clears the screen
    tft.setTextSize(3);
    tft.setCursor(60, 200);
    tft.setTextColor(0xC618); // Lt_Grey
    tft.println(&quot;32768 pixels&quot;);
    tft.setCursor(120, 5);
    tft.println(s);   
  }
void setup() {
  Serial.begin(9600); // Useful for debugging
  tft.reset();
  tft.begin(0x9341);  // SDFP5408 - start the display
  tft.setRotation(3); // 320 wide by 240 high - reset button on left
  tft.fillScreen(0); // Clears the screen
  tft.setCursor(30, 50);
  tft.setTextColor(RED);
  tft.setTextSize(3);
  tft.println(&quot;AZ-Delivery&quot;);
  tft.setTextColor(YELLOW);
  tft.setCursor(30, 90);
  tft.println(&quot;16-bit colours&quot;);
  tft.setCursor(30, 120);
  tft.println(&quot;from&quot;);
  tft.setCursor(30, 150);
  tft.println(&quot;24-bit colours&quot;);
  tft.setTextColor(BLUE);
  tft.setCursor(30, 185);
  tft.setTextSize(2);
  tft.println(&quot;Tutorial45.com&quot;);
  delay(4000);
  // A few interesting 24-bit colours - some dim - some bright!
  unsigned long c1[] = {
        0x000000,0xFFFFFF,0x333333,0x666666,0x999999,0xCCCCCC,0xCCCC99,0x9999CC,0x666699,
        0x660000,0x663300,0x996633,0x003300,0x003333,0x003399,0x000066,0x330066,0x660066,
        0x990000,0x993300,0xCC9900,0x006600,0x336666,0x0033FF,0x000099,0x660099,0x990066,
        0xCC0000,0xCC3300,0xFFCC00,0x009900,0x006666,0x0066FF,0x0000CC,0x663399,0xCC0099,
        0xFF0000,0xFF3300,0xFFFF00,0x00CC00,0x009999,0x0099FF,0x0000FF,0x9900CC,0xFF0099,
        0xCC3333,0xFF6600,0xFFFF33,0x00FF00,0x00CCCC,0x00CCFF,0x3366FF,0x9933FF,0xFF00FF,
        0xFF6666,0xFF6633,0xFFFF66,0x66FF66,0x66CCCC,0x00FFFF,0x3399FF,0x9966FF,0xFF66FF,
        0xFF9999,0xFF9966,0xFFFF99,0x99FF99,0x66FFCC,0x99FFFF,0x66CCFF,0x9999FF,0xFF99FF,
        0xFFCCCC,0xFFCC99,0xFFFFCC,0xCCFFCC,0x99FFCC,0xCCFFFF,0x99CCFF,0xCCCCFF,0xFFCCFF};
  unsigned int c2[80];      
  
  int l = 81;
  tft.fillScreen(0); // Clears the screen
  for (int i = 0; i &lt; l; i++){
    int r = c1[i] &gt;&gt; 16;              // Get red 24-bit component - 0 to 255  
    int g = (c1[i] &amp; 0x00ff00) &gt;&gt; 8;  // Get green
    int b = (c1[i] &amp; 0x0000ff);       // Get blue
    unsigned long col2 = r/8 * 2048 + g/4 * 32 + b/8;  // Create 16-bit value
    // int division removes least significant bits 
    // multiplication shifts bits left 
    tft.fillScreen(0);
    tft.fillRect(40,20,240,120,col2);
    tft.setTextSize(3);
    tft.setCursor(37, 145);
    tft.setTextColor(0xC618); // Lt_Grey
    tft.print(&quot;24-bit: &quot;);   
    tft.println(c1[i] &amp; 0xFFFFFF,HEX);
    tft.println(&quot; RGB: &quot;+String(r) +&quot; &quot;+ String(g) +&quot; &quot;+String(b));
    int col3 = col2 &amp; 0xFFFF;
    c2[i] = col3;
    String q =String(c2[i], HEX);
    q.toUpperCase();
//    String s = String(&quot;   16-bit: &quot;+String(c2[i], HEX));
    String s = String(&quot;   16-bit: &quot;+q);
    tft.println(s);
    delay(800);
  }
  int x = 0;
  int y = 0;
  unsigned int c = 0;
  String s = &quot;R G B&quot;;
  title(s); 
  for (int r = 0; r &lt;32; r = r + 1){
    for (int g = 0; g &lt; 64; g=g+2){
      for (int b = 0; b &lt; 32; b = b + 1){
        unsigned int c = r * 2048 + g * 32 + b;  // Create 16-bit value
        tft.drawPixel(x +30, y+45, c);
        x = x + 1;
          if (x &gt; 255){
            x = 0;
            y = y + 1; } } } }
  delay(1000);
  s = &quot;B G R&quot;;
  title(s);
  x = 0; y = 0;    
  for (int b = 0; b &lt;32; b = b + 1){
    for (int g = 0; g &lt; 64; g = g + 2){
      for (int r = 0; r &lt; 32; r = r + 1){
        unsigned int c = r * 2048 + g * 32 + b;  // Create 16-bit value
        tft.drawPixel(x +30, y+45, c);
        x = x + 1;
          if (x &gt; 255){
            x = 0;
            y = y + 1; } } } }
  delay(1000);
  s = &quot;G B R&quot;;
  title(s);
  x = 0; y = 0; 
  for (int g = 0; g &lt; 64; g = g + 2){    
    for (int b = 0; b &lt;32; b = b + 1){ 
      for (int r = 0; r &lt; 32; r = r + 1){
        unsigned int c = r * 2048 + g * 32 + b;  // Create 16-bit value
        tft.drawPixel(x +30, y+45, c);
        x = x + 1;
          if (x &gt; 255){
            x = 0;
            y = y + 1; } } } }
  delay(1000);
  s = &quot;R B G&quot;;
  title(s);
  x = 0; y = 0;
  for (int r = 0; r &lt; 32; r = r + 1){    
    for (int b = 0; b &lt;32; b = b + 1){ 
      for (int g = 0; g &lt; 64; g = g + 2){
        unsigned int c = r * 2048 + g * 32 + b;  // Create 16-bit value
        tft.drawPixel(x +30, y+45, c);
        x = x + 1;
          if (x &gt; 255){
            x = 0;
            y = y + 1; } } } }
  delay(1000);
  s = &quot;B R G&quot;;
  title(s);
  x = 0; y = 0; 
  for (int b = 0; b &lt;32; b = b + 1){
     for (int r = 0; r &lt; 32; r = r + 1){
        for (int g = 0; g &lt; 64; g = g + 2){ 
        unsigned int c = r * 2048 + g * 32 + b;  // Create 16-bit value
        tft.drawPixel(x +30, y+45, c);
        x = x + 1;
          if (x &gt; 255){
            x = 0;
            y = y + 1; } } } }
  delay(1000);
  s = &quot;G R B&quot;;
  title(s);
  x = 0; y = 0;
  for (int g = 0; g &lt; 64; g = g + 2){
    for (int r = 0; r &lt; 32; r = r + 1){ 
      for (int b = 0; b &lt;32; b = b + 1){
        unsigned int c = r * 2048 + g * 32 + b;  // Create 16-bit value
        tft.drawPixel(x +30, y+45, c);
        x = x + 1;
          if (x &gt; 255){
            x = 0;
            y = y + 1; } } } }
}   
void loop() {} //-- LOOP NOT NEEDED --" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">//  Almost all the colours - several ways</span></span>
<span class="line"><span style="color: #768390">//  AZ-Delivery 2.4&quot; TFT LCD touch shield Demo</span></span>
<span class="line"><span style="color: #768390">//          Shield on Arduino UNO</span></span>
<span class="line"><span style="color: #768390">//  +++ Tony Goodhew 25th September 2020 +++</span></span>
<span class="line"><span style="color: #768390">//  Tutorial45.com</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_GFX.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_TFTLCD.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_CS</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A3</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// Chip Select goes to Analog 3</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_CD</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A2</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// Command/Data goes to Analog 2</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_WR</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A1</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// LCD Write goes to Analog 1</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_RD</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// LCD Read goes to Analog 0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_RESET</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A4</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// Can alternately just connect to Arduino&#39;s reset pin</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xF800</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">YELLOW</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xFFE0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x001F</span></span>
<span class="line"><span style="color: #768390">// Create the TFT object with all pin assignments</span></span>
<span class="line"><span style="color: #ADBAC7">Adafruit_TFTLCD </span><span style="color: #DCBDFB">tft</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">LCD_CS</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_CD</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_WR</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_RD</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_RESET</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// =========== SETUP ================</span></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #DCBDFB">title</span><span style="color: #ADBAC7">(String s){</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Clears the screen</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">60</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">200</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0xC618</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Lt_Grey</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;32768 pixels&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(s);   </span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Useful for debugging</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">reset</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x9341</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// SDFP5408 - start the display</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setRotation</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// 320 wide by 240 high - reset button on left</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Clears the screen</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;AZ-Delivery&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">YELLOW</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">90</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;16-bit colours&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;from&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">150</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;24-bit colours&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">185</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Tutorial45.com&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">4000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// A few interesting 24-bit colours - some dim - some bright!</span></span>
<span class="line"><span style="color: #ADBAC7">  unsigned long c1[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">0x000000</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFFFFFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x333333</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x666666</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x999999</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xCCCCCC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xCCCC99</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x9999CC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x666699</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">0x660000</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x663300</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x996633</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x003300</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x003333</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x003399</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x000066</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x330066</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x660066</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">0x990000</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x993300</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xCC9900</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x006600</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x336666</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x0033FF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x000099</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x660099</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x990066</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">0xCC0000</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xCC3300</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFFCC00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x009900</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x006666</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x0066FF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x0000CC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x663399</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xCC0099</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">0xFF0000</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF3300</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFFFF00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00CC00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x009999</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x0099FF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x0000FF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x9900CC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF0099</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">0xCC3333</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF6600</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFFFF33</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00FF00</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00CCCC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00CCFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x3366FF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x9933FF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF00FF</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">0xFF6666</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF6633</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFFFF66</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x66FF66</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x66CCCC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x00FFFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x3399FF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x9966FF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF66FF</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">0xFF9999</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF9966</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFFFF99</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x99FF99</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x66FFCC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x99FFFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x66CCFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x9999FF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFF99FF</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">0xFFCCCC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFFCC99</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFFFFCC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xCCFFCC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x99FFCC</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xCCFFFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0x99CCFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xCCCCFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0xFFCCFF</span><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">  unsigned int c2[</span><span style="color: #6CB6FF">80</span><span style="color: #ADBAC7">];      </span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #ADBAC7">  int l </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">81</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Clears the screen</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> l; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> c1[i] </span><span style="color: #F47067">&gt;&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">16</span><span style="color: #ADBAC7">;              </span><span style="color: #768390">// Get red 24-bit component - 0 to 255  </span></span>
<span class="line"><span style="color: #ADBAC7">    int g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (c1[i] </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x00ff00</span><span style="color: #ADBAC7">) </span><span style="color: #F47067">&gt;&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// Get green</span></span>
<span class="line"><span style="color: #ADBAC7">    int b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (c1[i] </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x0000ff</span><span style="color: #ADBAC7">);       </span><span style="color: #768390">// Get blue</span></span>
<span class="line"><span style="color: #ADBAC7">    unsigned long col2 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2048</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> g</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> b</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// Create 16-bit value</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// int division removes least significant bits </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// multiplication shifts bits left </span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">240</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">,col2);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">37</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">145</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0xC618</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Lt_Grey</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;24-bit: &quot;</span><span style="color: #ADBAC7">);   </span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(c1[i] </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xFFFFFF</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">HEX</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; RGB: &quot;</span><span style="color: #F47067">+</span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(r) </span><span style="color: #F47067">+</span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(g) </span><span style="color: #F47067">+</span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #F47067">+</span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(b));</span></span>
<span class="line"><span style="color: #ADBAC7">    int col3 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> col2 </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xFFFF</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    c2[i] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> col3;</span></span>
<span class="line"><span style="color: #ADBAC7">    String q </span><span style="color: #F47067">=</span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(c2[i], </span><span style="color: #6CB6FF">HEX</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    q.</span><span style="color: #DCBDFB">toUpperCase</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #768390">//    String s = String(&quot;   16-bit: &quot;+String(c2[i], HEX));</span></span>
<span class="line"><span style="color: #ADBAC7">    String s </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;   16-bit: &quot;</span><span style="color: #F47067">+</span><span style="color: #ADBAC7">q);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(s);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">800</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  int x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  unsigned int c </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  String s </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;R G B&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">title</span><span style="color: #ADBAC7">(s); </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7">; g</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">g</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> b </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">        unsigned int c </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2048</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> b;  </span><span style="color: #768390">// Create 16-bit value</span></span>
<span class="line"><span style="color: #ADBAC7">        tft.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, y</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">, c);</span></span>
<span class="line"><span style="color: #ADBAC7">        x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> x </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (x </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">            x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">            y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> y </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">; } } } }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  s </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;B G R&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">title</span><span style="color: #ADBAC7">(s);</span></span>
<span class="line"><span style="color: #ADBAC7">  x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;    </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> b </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">        unsigned int c </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2048</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> b;  </span><span style="color: #768390">// Create 16-bit value</span></span>
<span class="line"><span style="color: #ADBAC7">        tft.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, y</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">, c);</span></span>
<span class="line"><span style="color: #ADBAC7">        x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> x </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (x </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">            x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">            y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> y </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">; } } } }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  s </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;G B R&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">title</span><span style="color: #ADBAC7">(s);</span></span>
<span class="line"><span style="color: #ADBAC7">  x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">){    </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> b </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){ </span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">        unsigned int c </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2048</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> b;  </span><span style="color: #768390">// Create 16-bit value</span></span>
<span class="line"><span style="color: #ADBAC7">        tft.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, y</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">, c);</span></span>
<span class="line"><span style="color: #ADBAC7">        x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> x </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (x </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">            x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">            y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> y </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">; } } } }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  s </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;R B G&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">title</span><span style="color: #ADBAC7">(s);</span></span>
<span class="line"><span style="color: #ADBAC7">  x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){    </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> b </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){ </span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">        unsigned int c </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2048</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> b;  </span><span style="color: #768390">// Create 16-bit value</span></span>
<span class="line"><span style="color: #ADBAC7">        tft.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, y</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">, c);</span></span>
<span class="line"><span style="color: #ADBAC7">        x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> x </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (x </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">            x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">            y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> y </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">; } } } }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  s </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;B R G&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">title</span><span style="color: #ADBAC7">(s);</span></span>
<span class="line"><span style="color: #ADBAC7">  x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> b </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">     </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">){ </span></span>
<span class="line"><span style="color: #ADBAC7">        unsigned int c </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2048</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> b;  </span><span style="color: #768390">// Create 16-bit value</span></span>
<span class="line"><span style="color: #ADBAC7">        tft.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, y</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">, c);</span></span>
<span class="line"><span style="color: #ADBAC7">        x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> x </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (x </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">            x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">            y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> y </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">; } } } }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1000</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  s </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;G R B&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">title</span><span style="color: #ADBAC7">(s);</span></span>
<span class="line"><span style="color: #ADBAC7">  x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">64</span><span style="color: #ADBAC7">; g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){ </span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7">; b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> b </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">        unsigned int c </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> r </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2048</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> g </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> b;  </span><span style="color: #768390">// Create 16-bit value</span></span>
<span class="line"><span style="color: #ADBAC7">        tft.</span><span style="color: #DCBDFB">drawPixel</span><span style="color: #ADBAC7">(x </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">, y</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">, c);</span></span>
<span class="line"><span style="color: #ADBAC7">        x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> x </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (x </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">            x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">            y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> y </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">; } } } }</span></span>
<span class="line"><span style="color: #ADBAC7">}   </span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {} </span><span style="color: #768390">//-- LOOP NOT NEEDED --</span></span></code></pre></div>



<p class="wp-block-paragraph"></p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="479" height="410" src="https://tutorial45.com/wp-content/uploads/2020/10/touch-screen-arduino.jpg" alt="" class="wp-image-10476" style="width:479px;height:auto" srcset="https://tutorial45.com/wp-content/uploads/2020/10/touch-screen-arduino.jpg 479w, https://tutorial45.com/wp-content/uploads/2020/10/touch-screen-arduino-300x257.jpg 300w" sizes="(max-width: 479px) 100vw, 479px" /></figure>
</div>


<h2 class="wp-block-heading">Using the SD card reader</h2>



<p class="wp-block-paragraph">Looking at the bottom of the board there are 4 pins used for communication with the SD card reader:</p>



<p class="wp-block-paragraph">SD_SS pin 10-SS = Chip Select<br>SD_DI pin 11- MOSI<br>SD_DO pin 12-MISO<br>SD_SCK pin 13-CLOCK</p>



<p class="wp-block-paragraph">This is a standard SD card reader and uses the SPI pins on the UNO and pin 10 as the Chip Select.</p>



<p class="wp-block-paragraph">The Arduino.cc site lists the following SPI pins on their different boards</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Arduino / Genuino Board</strong></td><td><strong>MOSI</strong></td><td><strong>MISO</strong></td><td><strong>SCK</strong></td><td><strong>SS (slave)</strong></td><td><strong>SS (master)</strong></td><td><strong>Level</strong></td></tr><tr><td><strong>Uno or Duemilanove</strong></td><td>11 or ICSP-4</td><td>12 or ICSP-1</td><td>13 or ICSP-3</td><td>10</td><td>&#8211;</td><td>5V</td></tr><tr><td><strong>Mega1280 or Mega2560</strong></td><td>51 or ICSP-4</td><td>50 or ICSP-1</td><td>52 or ICSP-3</td><td>53</td><td>&#8211;</td><td>5V</td></tr><tr><td><strong>Leonardo</strong></td><td>ICSP-4</td><td>ICSP-1</td><td>ICSP-3</td><td>&#8211;</td><td>&#8211;</td><td>5V</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">If you need to use the SD card with a MEGA you will need to run the board via jumper leads.</p>



<p class="wp-block-paragraph">The SD card reader library is included with the basic setup, so we do not need to load a fresh library. The examples cover the simple tasks of creating, writing to, reading from and deleting files at a very basic level, all with strings.</p>



<p class="wp-block-paragraph">I used a 16GB SD-HC class 4 card. It is easy to insert into the reader with a gentle push. Push in again to extract if necessary.</p>



<p class="wp-block-paragraph">To check that everything is in order you can run the “CardInfo” sketch from the Examples tab of the File muenu. (File =&gt;&gt; Examples =&gt;&gt; SD =&gt;&gt; CardInfo.)&nbsp; Make sure you set:</p>



<p class="wp-block-paragraph">const int chipSelect = 10;</p>



<p class="wp-block-paragraph">on the line before the setup routine. I got the following with my card, which I had been using earlier.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="516" height="361" src="https://tutorial45.com/wp-content/uploads/2020/10/cardinfo.jpg" alt="" class="wp-image-10477" srcset="https://tutorial45.com/wp-content/uploads/2020/10/cardinfo.jpg 516w, https://tutorial45.com/wp-content/uploads/2020/10/cardinfo-300x210.jpg 300w" sizes="(max-width: 516px) 100vw, 516px" /></figure>



<p class="wp-block-paragraph">At this point it is worth running the other example sketches to get a feel for how the card reader works.&nbsp;</p>



<p class="wp-block-paragraph">You may have noticed that:</p>



<ul class="wp-block-list">
<li>This is a very basic serial file device.</li>



<li>You can only have one file open at a time.</li>



<li>You write strings to the file (so numbers have to be converted to strings before they are saved.)</li>



<li>You can make up a record of several strings which are in turn made up of characters.</li>



<li>You concatenate the sub-strings to make the record string using a comma as a delimiter.</li>



<li>Each line in the file is a record which terminates with “\n”.</li>



<li>If you write to an existing file the new data is appended at the end.</li>



<li>In the examples the chip select pin is 4. We have to use pin 10 when the shield is plugged into an UNO.</li>
</ul>



<p class="wp-block-paragraph">An obvious use for the SD reader is to log readings from sensors and display the results on the TFT display. Unfortunately,&nbsp; the shield covers and uses most of the pins. The solution is to connect just the SD reader and power pins with jump leads which leaves plenty of pins to collect data from sensors.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Most Arduino users seldom use string manipulation. The documentation and a few simple examples of how to use strings are well scattered over the Web and difficult to find. The first sketch demonstrates how to create a file of 5 records/lines, each made up from an integer, a string, and a floating-point variable. The file is called <strong>datalog6.txt</strong>.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Create a log file sketch
// Write demo log file: 'datalog6.txt' with 3 fields per
//      record: Int, String and Float
// The SD_Read_File sketch can process it.
// Tony Goodhew 21 Sept 2020
// SD reader on TFT shield – Output to Serial Monitor
// Tutorial45.com
#include &lt;SPI.h&gt;
#include &lt;SD.h&gt;
const int chipSelect = 10;
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);{}
  Serial.print(&quot;Initializing SD card...&quot;);
// see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println(&quot;Card failed, or not present&quot;);
    // Halt
    while (1);
  }
  Serial.println(&quot;card initialized.&quot;);
  File dataFile = SD.open(&quot;datalog6.txt&quot;, FILE_WRITE);
  // Set up test data in 3 arrays
  int i[] = {1, 2222, 3, -4, 5};
  String s[] = {&quot;Tony&quot;, &quot;Fred&quot;, &quot;Anne&quot;, &quot;Mags&quot;, &quot;William&quot;};
  float f[] = {3.14, 2.2, 3.3333, 10.66, -5.5};
  String j = &quot;&quot;;  // record string
  Serial.println(&quot;Writing datalog6.txt&quot;);
  // Loop for 5 data records
  for (int p=0; p &lt; 5; p++){
    // Pack the data up into a string, j
    // Build long string with 3 data items as strings
    //    separated with commas
    j = String(i[p]) + &quot;,&quot; + s[p]+ &quot;,&quot; + String(f[p]); // One record
    // Display the long string
    Serial.println(j);
    // Save j to SD Card
    // if the file is available, write to it:
    if (dataFile) {
      dataFile.println(j);  // Write j to the file
    }
    // if the file isn't open, pop up an error:
    else {
    Serial.println(&quot;error opening datalog6.txt&quot;);
    }
  }
  dataFile.close(); 
  Serial.println(&quot;\nFile datalog6.txt written - FINISHED!\n&quot;);  
}
void loop() {}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Create a log file sketch</span></span>
<span class="line"><span style="color: #768390">// Write demo log file: &#39;datalog6.txt&#39; with 3 fields per</span></span>
<span class="line"><span style="color: #768390">//      record: Int, String and Float</span></span>
<span class="line"><span style="color: #768390">// The SD_Read_File sketch can process it.</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 21 Sept 2020</span></span>
<span class="line"><span style="color: #768390">// SD reader on TFT shield – Output to Serial Monitor</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SPI</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SD</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">int</span><span style="color: #ADBAC7"> chipSelect </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Open serial communications and wait for port to open:</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);{}</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Initializing SD card...&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #768390">// see if the card is present and can be initialized:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">!</span><span style="color: #6CB6FF">SD</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(chipSelect)) {</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Card failed, or not present&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Halt</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">while</span><span style="color: #ADBAC7"> (</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;card initialized.&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  File dataFile </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">SD</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">open</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;datalog6.txt&quot;</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">FILE_WRITE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Set up test data in 3 arrays</span></span>
<span class="line"><span style="color: #ADBAC7">  int i[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">2222</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">, -</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">  String s[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #96D0FF">&quot;Tony&quot;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&quot;Fred&quot;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&quot;Anne&quot;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&quot;Mags&quot;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&quot;William&quot;</span><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">  float f[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">3.14</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">2.2</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">3.3333</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">10.66</span><span style="color: #ADBAC7">, -</span><span style="color: #6CB6FF">5.5</span><span style="color: #ADBAC7">};</span></span>
<span class="line"><span style="color: #ADBAC7">  String j </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;&quot;</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// record string</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Writing datalog6.txt&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Loop for 5 data records</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int p</span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; p </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">; p</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Pack the data up into a string, j</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Build long string with 3 data items as strings</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">//    separated with commas</span></span>
<span class="line"><span style="color: #ADBAC7">    j </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(i[p]) </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;,&quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> s[p]</span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;,&quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(f[p]); </span><span style="color: #768390">// One record</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Display the long string</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(j);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Save j to SD Card</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// if the file is available, write to it:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (dataFile) {</span></span>
<span class="line"><span style="color: #ADBAC7">      dataFile.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(j);  </span><span style="color: #768390">// Write j to the file</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// if the file isn&#39;t open, pop up an error:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;error opening datalog6.txt&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  dataFile.</span><span style="color: #DCBDFB">close</span><span style="color: #ADBAC7">(); </span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\n</span><span style="color: #96D0FF">File datalog6.txt written - FINISHED!</span><span style="color: #F47067">\n</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);  </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {}</span></span></code></pre></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">The second sketch reads the data we have saved in the <strong>datalog6.txt</strong> file. It splits each line/record into the 3 strings and then converts one to an Integer and the another to Floating Point. Just to prove that they are now stored as numbers it multiplies them together and displays the result.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Read the data back from a log file: 'datalog6.txt'
// Tony Goodhew 21 Sept 2020
// SD reader on TFT shield
// Tutorial45.com

#include &lt;SPI.h&gt;
#include &lt;SD.h&gt;

const int chipSelect = 10;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.print(&quot;Initializing SD card...&quot;);

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println(&quot;Card failed, or not present&quot;);
    // don't do anything more:
    while (1);
  }
  Serial.println(&quot;card initialized.&quot;);

  // Open the file
  File dataFile = SD.open(&quot;datalog6.txt&quot;);
  Serial.println(&quot;Reading datalog6.txt&quot;);
  String j = &quot;&quot;; // Holds a line from the data file (3 fields = 1 record)
  
  if (dataFile) {
    while (dataFile.available()) {        // Not reached the End Of File     
      j = dataFile.readStringUntil('\n'); // Get single line from file
      Serial.println(&quot;\n&quot;+j);
      int comma1 = j.indexOf(','); 
      int comma2 = j.indexOf(',', comma1 + 1); 
      Serial.println(&quot;Commas: &quot; + String(comma1) + &quot; &quot;+ String(comma2));
      // Separate back into 3 strings at the commas
      String ii = j.substring(0,comma1);              // integer
      String sname = j.substring(comma1 +1, comma2);  // string
      String ff = j.substring(comma2 +1);             // float
      // Print out the strings
      Serial.println(ii);
      Serial.println(sname);
      Serial.println(ff);
      int iOut = ii.toInt(); // Convert back to integer
      float fOut = ff.toFloat();  // Convert back to Floating Point
      float res = iOut * fOut;    // Calculation with both numbers
      Serial.println(sname +&quot;: &quot; + String(res)+&quot;\n&quot;);  // Output the result
    }
    dataFile.close();
  }
  // if the file isn't open, print up an error message
  else {
    Serial.println(&quot;error opening datalog6.txt&quot;);
  }
}
void loop() {}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Read the data back from a log file: &#39;datalog6.txt&#39;</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 21 Sept 2020</span></span>
<span class="line"><span style="color: #768390">// SD reader on TFT shield</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SPI</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SD</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">int</span><span style="color: #ADBAC7"> chipSelect </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Open serial communications and wait for port to open:</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">while</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">!</span><span style="color: #ADBAC7">Serial) {</span></span>
<span class="line"><span style="color: #ADBAC7">    ; </span><span style="color: #768390">// wait for serial port to connect. Needed for native USB port only</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Initializing SD card...&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// see if the card is present and can be initialized:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">!</span><span style="color: #6CB6FF">SD</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(chipSelect)) {</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Card failed, or not present&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// don&#39;t do anything more:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">while</span><span style="color: #ADBAC7"> (</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;card initialized.&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Open the file</span></span>
<span class="line"><span style="color: #ADBAC7">  File dataFile </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">SD</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">open</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;datalog6.txt&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Reading datalog6.txt&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  String j </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;&quot;</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// Holds a line from the data file (3 fields = 1 record)</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (dataFile) {</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">while</span><span style="color: #ADBAC7"> (dataFile.</span><span style="color: #DCBDFB">available</span><span style="color: #ADBAC7">()) {        </span><span style="color: #768390">// Not reached the End Of File     </span></span>
<span class="line"><span style="color: #ADBAC7">      j </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> dataFile.</span><span style="color: #DCBDFB">readStringUntil</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;</span><span style="color: #F47067">\n</span><span style="color: #96D0FF">&#39;</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Get single line from file</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\n</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">+</span><span style="color: #ADBAC7">j);</span></span>
<span class="line"><span style="color: #ADBAC7">      int comma1 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> j.</span><span style="color: #DCBDFB">indexOf</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;,&#39;</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">      int comma2 </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> j.</span><span style="color: #DCBDFB">indexOf</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;,&#39;</span><span style="color: #ADBAC7">, comma1 </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Commas: &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(comma1) </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(comma2));</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #768390">// Separate back into 3 strings at the commas</span></span>
<span class="line"><span style="color: #ADBAC7">      String ii </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> j.</span><span style="color: #DCBDFB">substring</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,comma1);              </span><span style="color: #768390">// integer</span></span>
<span class="line"><span style="color: #ADBAC7">      String sname </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> j.</span><span style="color: #DCBDFB">substring</span><span style="color: #ADBAC7">(comma1 </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">, comma2);  </span><span style="color: #768390">// string</span></span>
<span class="line"><span style="color: #ADBAC7">      String ff </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> j.</span><span style="color: #DCBDFB">substring</span><span style="color: #ADBAC7">(comma2 </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">);             </span><span style="color: #768390">// float</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #768390">// Print out the strings</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(ii);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(sname);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(ff);</span></span>
<span class="line"><span style="color: #ADBAC7">      int iOut </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> ii.</span><span style="color: #DCBDFB">toInt</span><span style="color: #ADBAC7">(); </span><span style="color: #768390">// Convert back to integer</span></span>
<span class="line"><span style="color: #ADBAC7">      float fOut </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> ff.</span><span style="color: #DCBDFB">toFloat</span><span style="color: #ADBAC7">();  </span><span style="color: #768390">// Convert back to Floating Point</span></span>
<span class="line"><span style="color: #ADBAC7">      float res </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> iOut </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> fOut;    </span><span style="color: #768390">// Calculation with both numbers</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(sname </span><span style="color: #F47067">+</span><span style="color: #96D0FF">&quot;: &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(res)</span><span style="color: #F47067">+</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\n</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Output the result</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    dataFile.</span><span style="color: #DCBDFB">close</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// if the file isn&#39;t open, print up an error message</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;error opening datalog6.txt&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {}</span></span></code></pre></div>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Using the Touch Layer</h2>



<p class="wp-block-paragraph">This is the part that often causes the most trouble with many owners giving up at this point. It may be because there are several different configurations of the pins used to connect to the touch layers of the screen on the many varied breakout boards and shields using this display. In this case four of the pins are used, at different times, to control both the graphics or the touch elements of the screen.</p>



<p class="wp-block-paragraph"><strong>How does a touch screen sense position?</strong></p>



<p class="wp-block-paragraph">This is a resistive touch screen, rather than a capacitive one. Above the graphics, layers are two transparent resistive layers held apart by tiny dimples. One is connected at the top and bottom and the other at the sides. A potential difference is applied across them and when the stylus or a finger presses on the screen an electrical connection is made between the resistive layers. </p>



<p class="wp-block-paragraph">The Analog pins are used to measure the voltages at that point on the two resistive layers, one at a time, in the same manner as we read the voltage from the wiper of a potentiometer – a potential divider. Using these values, it is possible to calculate, quite accurately, the coordinates of the point on the screen where the pressure has been applied. Calibration is often needed to improve accuracy. Adafruit suggests reading the resistance across the X plate (XP = D8 and XM = A2). On my board, I got 341 Ohms. Use this value as SENSITIVITY.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Simple Drawing Script for AZ-Delivery TFT Touch 240x320 Shield
// Tony Goodhew 30 Sept 2020
// Modified from Adafruit examples for a similar shield
// Tutorial45.com
// Adafruit GFX Libraries
#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_TFTLCD.h&gt;
#include &lt;TouchScreen.h&gt;

#define LCD_CS A3     // Chip Select goes to Analog 3
#define LCD_CD A2     // Command/Data goes to Analog 2
#define LCD_WR A1     // LCD Write goes to Analog 1
#define LCD_RD A0     // LCD Read goes to Analog 0
#define LCD_RESET A4  // Can alternately just connect to Arduino's reset pin

// 16-bit colour values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
unsigned int c[] = {BLACK,RED,GREEN,BLUE,CYAN,MAGENTA,YELLOW,WHITE};
int cc = c[1];

// Create the TFT (Graphics) object - named pins
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

// Set up the touch screen element of the TFT screen
#define YP A3  // must be an analog pin, use &quot;An&quot; notation!
#define XM A2  // must be an analog pin, use &quot;An&quot; notation!
#define YM 9   // can be a digital pin
#define XP 8   // can be a digital pin
#define SENSITIVITY 341                   // Was 300 = Resistance A2 to D8                                                                         
#define MINPRESSURE 10
#define MAXPRESSURE 1000
#define TS_MINX  150
#define TS_MINY  120
#define TS_MAXX  920
#define TS_MAXY  940
#define MINPRESSURE 10
#define MAXPRESSURE 1000
// Create Touch Screen object
TouchScreen ts = TouchScreen(XP, YP, XM, YM, SENSITIVITY);

void palette(){       // Create colour 'buttons' at top of screen
   int w = 30;
   int h = 40;
   tft.fillRect(0, 0, w, h, BLACK);
   tft.fillRect(w, 0, w, h, RED);
   tft.fillRect(w*2, 0, w, h, GREEN);
   tft.fillRect(w*3, 0, w, h, BLUE);
   tft.fillRect(w*4, 0, w, h, CYAN);
   tft.fillRect(w*5, 0, w, h, MAGENTA);
   tft.fillRect(w*6, 0, w, h, YELLOW);
   tft.fillRect(w*7, 0, w, h, WHITE); 
}
//---------SETUP--------------------
void setup() {
  Serial.begin(9600);
  tft.reset();
  tft.begin(0x9341);  // SDFP5408
  tft.fillRect(0,0, 240,320, BLACK);  // Drawing area
  palette();  // Drawing colour buttons
}
//---------Main Loop------------
void loop(){
  TSPoint p = ts.getPoint(); // Read the Touch Screen
  // Shared pins - fix direction
  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);

  // Check for pressure on screen
  if (p.z &gt; MINPRESSURE &amp;&amp; p.z &lt; MAXPRESSURE) {
/*  // Debugging     
    Serial.print(&quot;X = &quot;); Serial.print(p.x);
    Serial.print(&quot;\tY = &quot;); Serial.print(p.y);
    Serial.print(&quot;\tPressure = &quot;); Serial.println(p.z);
*/      
    // Scale Touch values to fit TFT screen 
    // Adjust final number to get drawn dot under the stylus point (fudge factors!)
    p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0) -10;
    p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0)-14; 
    
/*  // Debugging   
    Serial.print(&quot;(&quot;); Serial.print(p.x);
    Serial.print(&quot;, &quot;); Serial.print(p.y);
    Serial.println(&quot;)&quot;);
*/    
    if (p.y &lt; 40){                              // In the palette area?
      if (p.x &lt;30){                             // Black to clear drawing area
        tft.fillRect(0, 40, 240,299, BLACK);}
      else{                                     // Change colour
        cc = c[p.x / 30];
      }
    }
    else{
      tft.fillCircle(p.x, p.y, 2, cc);         // Draw dot at stylus point
    }
  }
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Simple Drawing Script for AZ-Delivery TFT Touch 240x320 Shield</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 30 Sept 2020</span></span>
<span class="line"><span style="color: #768390">// Modified from Adafruit examples for a similar shield</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #768390">// Adafruit GFX Libraries</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_GFX.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_TFTLCD.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">TouchScreen.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_CS</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A3</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// Chip Select goes to Analog 3</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_CD</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A2</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// Command/Data goes to Analog 2</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_WR</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A1</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// LCD Write goes to Analog 1</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_RD</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// LCD Read goes to Analog 0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_RESET</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A4</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// Can alternately just connect to Arduino&#39;s reset pin</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// 16-bit colour values:</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x0000</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x001F</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xF800</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">GREEN</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x07E0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">CYAN</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x07FF</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MAGENTA</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xF81F</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">YELLOW</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xFFE0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xFFFF</span></span>
<span class="line"><span style="color: #ADBAC7">unsigned int c[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {BLACK,RED,GREEN,BLUE,CYAN,MAGENTA,YELLOW,WHITE};</span></span>
<span class="line"><span style="color: #ADBAC7">int cc </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> c[</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">];</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Create the TFT (Graphics) object - named pins</span></span>
<span class="line"><span style="color: #ADBAC7">Adafruit_TFTLCD </span><span style="color: #DCBDFB">tft</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">LCD_CS</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_CD</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_WR</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_RD</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_RESET</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Set up the touch screen element of the TFT screen</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">YP</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A3</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// must be an analog pin, use &quot;An&quot; notation!</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">XM</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A2</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// must be an analog pin, use &quot;An&quot; notation!</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">YM</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">9</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// can be a digital pin</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">XP</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// can be a digital pin</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">SENSITIVITY</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">341</span><span style="color: #ADBAC7">                   </span><span style="color: #768390">// Was 300 = Resistance A2 to D8                                                                         </span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MINPRESSURE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MAXPRESSURE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1000</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">TS_MINX</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">150</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">TS_MINY</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">120</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">TS_MAXX</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">920</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">TS_MAXY</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">940</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MINPRESSURE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MAXPRESSURE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1000</span></span>
<span class="line"><span style="color: #768390">// Create Touch Screen object</span></span>
<span class="line"><span style="color: #ADBAC7">TouchScreen ts </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">TouchScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">XP</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">YP</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">XM</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">YM</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">SENSITIVITY</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">palette</span><span style="color: #ADBAC7">(){       </span><span style="color: #768390">// Create colour &#39;buttons&#39; at top of screen</span></span>
<span class="line"><span style="color: #ADBAC7">   int w </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">   int h </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">   tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, w, h, </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">   tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(w, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, w, h, </span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">   tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(w</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, w, h, </span><span style="color: #6CB6FF">GREEN</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">   tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(w</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, w, h, </span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">   tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(w</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, w, h, </span><span style="color: #6CB6FF">CYAN</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">   tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(w</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, w, h, </span><span style="color: #6CB6FF">MAGENTA</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">   tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(w</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, w, h, </span><span style="color: #6CB6FF">YELLOW</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">   tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(w</span><span style="color: #F47067">*</span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, w, h, </span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #768390">//---------SETUP--------------------</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">reset</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x9341</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// SDFP5408</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">240</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">320</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Drawing area</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">palette</span><span style="color: #ADBAC7">();  </span><span style="color: #768390">// Drawing colour buttons</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #768390">//---------Main Loop------------</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">  TSPoint p </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> ts.</span><span style="color: #DCBDFB">getPoint</span><span style="color: #ADBAC7">(); </span><span style="color: #768390">// Read the Touch Screen</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Shared pins - fix direction</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">XM</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">YP</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Check for pressure on screen</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (p.z </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">MINPRESSURE</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&amp;&amp;</span><span style="color: #ADBAC7"> p.z </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">MAXPRESSURE</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #768390">/*  // Debugging     </span></span>
<span class="line"><span style="color: #768390">    Serial.print(&quot;X = &quot;); Serial.print(p.x);</span></span>
<span class="line"><span style="color: #768390">    Serial.print(&quot;\tY = &quot;); Serial.print(p.y);</span></span>
<span class="line"><span style="color: #768390">    Serial.print(&quot;\tPressure = &quot;); Serial.println(p.z);</span></span>
<span class="line"><span style="color: #768390">*/</span><span style="color: #ADBAC7">      </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Scale Touch values to fit TFT screen </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Adjust final number to get drawn dot under the stylus point (fudge factors!)</span></span>
<span class="line"><span style="color: #ADBAC7">    p.x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">map</span><span style="color: #ADBAC7">(p.x, </span><span style="color: #6CB6FF">TS_MINX</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">TS_MAXX</span><span style="color: #ADBAC7">, tft.</span><span style="color: #DCBDFB">width</span><span style="color: #ADBAC7">(), </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">) </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    p.y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">map</span><span style="color: #ADBAC7">(p.y, </span><span style="color: #6CB6FF">TS_MINY</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">TS_MAXY</span><span style="color: #ADBAC7">, tft.</span><span style="color: #DCBDFB">height</span><span style="color: #ADBAC7">(), </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">)</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">; </span></span>
<span class="line"><span style="color: #ADBAC7">    </span></span>
<span class="line"><span style="color: #768390">/*  // Debugging   </span></span>
<span class="line"><span style="color: #768390">    Serial.print(&quot;(&quot;); Serial.print(p.x);</span></span>
<span class="line"><span style="color: #768390">    Serial.print(&quot;, &quot;); Serial.print(p.y);</span></span>
<span class="line"><span style="color: #768390">    Serial.println(&quot;)&quot;);</span></span>
<span class="line"><span style="color: #768390">*/</span><span style="color: #ADBAC7">    </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (p.y </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">){                              </span><span style="color: #768390">// In the palette area?</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (p.x </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">){                             </span><span style="color: #768390">// Black to clear drawing area</span></span>
<span class="line"><span style="color: #ADBAC7">        tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">240</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">299</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);}</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">else</span><span style="color: #ADBAC7">{                                     </span><span style="color: #768390">// Change colour</span></span>
<span class="line"><span style="color: #ADBAC7">        cc </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> c[p.x </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">];</span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">else</span><span style="color: #ADBAC7">{</span></span>
<span class="line"><span style="color: #ADBAC7">      tft.</span><span style="color: #DCBDFB">fillCircle</span><span style="color: #ADBAC7">(p.x, p.y, </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">, cc);         </span><span style="color: #768390">// Draw dot at stylus point</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Try running the sketch to draw on the screen. The BLACK palette ‘button’ clears the screen and the others change the ‘ink’ colour. If the dot drawn is not directly under the stylus you can adjust the ‘fudge factors’ in the scaling section. </p>



<p class="wp-block-paragraph"><strong>16-bit Colour Mixing Project</strong></p>



<p class="wp-block-paragraph">As a final example here is a sketch which shows off the Touch screen with buttons, bar graphs and colours. The buttons allow the user to adjust the RGB mix to display all the possible colours available. If you find one you particularly like it displays the hex value of the 16-bit colour.&nbsp;</p>



<p class="wp-block-paragraph">Gently pressing on the buttons at the bottom with the stylus changes the RGB values within their allowed ranges. The bars move to show the fraction of maximum possible for each of the red, green and blue values.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="292" height="379" src="https://tutorial45.com/wp-content/uploads/2020/10/Project_Final.jpg" alt="" class="wp-image-10478" srcset="https://tutorial45.com/wp-content/uploads/2020/10/Project_Final.jpg 292w, https://tutorial45.com/wp-content/uploads/2020/10/Project_Final-231x300.jpg 231w" sizes="(max-width: 292px) 100vw, 292px" /></figure>
</div>


<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Project Sketch for AZ-Delivery TFT Touch 240x320 Shield
// Tony Goodhew 2 October 2020
// Tutorial45.com
// Adafruit GFX Libraries
#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_TFTLCD.h&gt;
#include &lt;TouchScreen.h&gt;

#define LCD_CS A3     // Chip Select goes to Analog 3
#define LCD_CD A2     // Command/Data goes to Analog 2
#define LCD_WR A1     // LCD Write goes to Analog 1
#define LCD_RD A0     // LCD Read goes to Analog 0
#define LCD_RESET A4  // Can alternately just connect to Arduino's reset pin

// 16-bit colour values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define WHITE 0xFFFF

// Create the TFT (Graphics) object - named pins
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

// Set up the touch screen element of the TFT screen
#define YP A3  // must be an analog pin, use &quot;An&quot; notation!
#define XM A2  // must be an analog pin, use &quot;An&quot; notation!
#define YM 9   // can be a digital pin
#define XP 8   // can be a digital pin
#define SENSITIVITY 341                   // Was 300 = Resistance A2 to D8                                                                         
#define MINPRESSURE 10
#define MAXPRESSURE 1000
#define TS_MINX  150
#define TS_MINY  120
#define TS_MAXX  920
#define TS_MAXY  940
#define MINPRESSURE 10
#define MAXPRESSURE 1000
// Create Touch Screen object
TouchScreen ts = TouchScreen(XP, YP, XM, YM, SENSITIVITY);

int left[] ={5,45,85,125,165,205};    // left edge of buttons
int right[]={35,75,115,155,195,235};  // right edge of buttons
int red = 15;  // Colours set at mid-points
int green = 31;
int blue = 15;
int old_r = 0;
int old_g = 0;
int old_b = 0;

void graph(int xx, int yy, int p, unsigned int col){
  // Draw a bar graph
  tft.fillRect(xx, yy, 200, 20, BLACK);  // Overwrite to background colour
  tft.fillRect(xx, yy, p * 2, 20, col);  // New bar graph
}
  
void palette(){
  // Create 'buttons' near bottom of screen
  int w = 30;
  int h = 30;
  int y = 280;
  for (int i=0; i&lt;6;i++){
    unsigned int bc = GREEN;
    if (i &lt; 2){bc = RED;}
    if (i &gt; 3){bc = BLUE;}
    tft.fillRect(5 + i *(w+10), y, w, h, bc);
  }
  tft.setTextColor(WHITE);
  tft.setTextSize(3);
  for (int i=0; i&lt;6; i = i + 2){
    tft.setCursor(12 + i *(w+10), y +4);
    tft.println(&quot;+&quot;);}
  for (int i=1; i&lt;6; i = i + 2){
      tft.setCursor(12 + i *(w+10), y +4);
      tft.println(&quot;-&quot;);}
}
void show(){
  // Display values and bar graphs
  unsigned int n = red * 2048 + green * 32 + blue;
  tft.fillRect(0, 0, 240, 60, n);
  tft.drawFastVLine(19, 95, 90, 0x7BEF); // Graph axis  
  tft.drawFastVLine(18, 95, 90, 0x7BEF);
  tft.setTextSize(3);
  tft.setTextColor(WHITE);
  if (n &gt; 0xF2BF){tft.setTextColor(BLACK);}  // Black on bright colours
  tft.setCursor(85,20);
  tft.println(n,HEX);
  tft.fillRect(0, 230, 240, 46, BLACK);
  String rS = String(red);
  if (red &lt; 10){rS = &quot; &quot; + rS;}  // Left alignment
  tft.setTextColor(WHITE);
  tft.setCursor(25,230);
  tft.println(rS);
  String gS = String(green);
  if (green &lt; 10){gS = &quot; &quot; + gS;}
  tft.setCursor(105,230);
  tft.println(gS);
  String bS = String(blue);
  if (blue &lt; 10){bS = &quot; &quot; + bS;}
  tft.setCursor(186,230);
  tft.println(bS);
  tft.setTextSize(2);
  int rp = red * 100 / 31;
  int gp = green * 100 / 63;
  int bp = blue * 100 / 31;
  String rz = String(rp) + &quot;%&quot;;
  String gz = String(gp) + &quot;%&quot;;
  String bz = String(bp) + &quot;%&quot;;
  if (rp &lt; 100){rz = &quot; &quot; + rz;}
  if (rp &lt; 10){rz = &quot; &quot; + rz;}
  tft.setCursor(13,260);
  tft.println(rz);
  if (gp &lt; 100){gz = &quot; &quot; + gz;}
  if (gp &lt; 10){gz = &quot; &quot; + gz;}
  tft.setCursor(92,260);
  tft.println(gz);
  if (bp &lt; 100){bz = &quot; &quot; + bz;}
  if (bp &lt; 10){bz = &quot; &quot; + bz;}
  tft.setCursor(174,260);
  tft.println(bz);
  if (old_r != red){                // red value changed?
    graph(20,100,rp,RED);           // Update graph
    old_r = red;
    }
  if (old_g != green){              // green value changed? 
    graph(20,130,gp,GREEN);
    old_g = green;   
  }
  if(old_b != blue){               // blue value change  
    graph(20,160,bp,BLUE);
    old_b = blue;
  }   
}
//---------SETUP------------------
void setup() {
  Serial.begin(9600);
  tft.reset();
  tft.begin(0x9341);  // SDFP5408
  tft.fillRect(0,0, 240,320, BLACK);    // Drawing area
  palette();  // Drawing buttons
  show();  // Display the inital values  
}
//---------Main Loop------------
void loop(){
  TSPoint p = ts.getPoint(); // Read the Touch Screen
  // Shared pins - fix direction
  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);

  // Check for pressure on screen
  if (p.z &gt; MINPRESSURE &amp;&amp; p.z &lt; MAXPRESSURE) {
      
    // Scale Touch values to fit TFT screen 
    // Adjust final values to improve accuracy
    p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0) -10;
    p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0)-14; 
    
    if ((p.y &gt;= 300) &amp; (p.y &lt;= 330)){               // In the button area?
      if ((p.x &gt;= left[0]) &amp; (p.x &lt;= right[0])){    // Process buttons
        red = red +1;                               //   as necessary
        if (red &gt; 31){red = 31;}
      }
      else if ((p.x &gt;= left[1]) &amp; (p.x &lt;= right[1])){ 
        red = red -1;
        if (red &lt; 0){red = 0;}
      }
      else if ((p.x &gt;= left[2]) &amp; (p.x &lt;= right[2])){ 
        green = green + 1;
        if (green &gt; 63){green = 63;} 
      }
      else if ((p.x &gt;= left[3]) &amp; (p.x &lt;= right[3])){ 
        green = green -1;
        if (green &lt; 0){green = 0;}
      }
      else if ((p.x &gt;= left[4]) &amp; (p.x &lt;= right[4])){ 
        blue = blue + 1;
        if (blue &gt; 31){blue = 31;}
      }
      else if ((p.x &gt;= left[5]) &amp; (p.x &lt;= right[5])){ 
        blue = blue - 1;
        if (blue &lt; 0){blue = 0;}
      }
    }
    // Update Display
    show();
  }
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Project Sketch for AZ-Delivery TFT Touch 240x320 Shield</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 2 October 2020</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #768390">// Adafruit GFX Libraries</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_GFX.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">Adafruit_TFTLCD.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">TouchScreen.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_CS</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A3</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// Chip Select goes to Analog 3</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_CD</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A2</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// Command/Data goes to Analog 2</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_WR</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A1</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// LCD Write goes to Analog 1</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_RD</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A0</span><span style="color: #ADBAC7">     </span><span style="color: #768390">// LCD Read goes to Analog 0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">LCD_RESET</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A4</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// Can alternately just connect to Arduino&#39;s reset pin</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// 16-bit colour values:</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x0000</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x001F</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xF800</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">GREEN</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x07E0</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xFFFF</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Create the TFT (Graphics) object - named pins</span></span>
<span class="line"><span style="color: #ADBAC7">Adafruit_TFTLCD </span><span style="color: #DCBDFB">tft</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">LCD_CS</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_CD</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_WR</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_RD</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">LCD_RESET</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">// Set up the touch screen element of the TFT screen</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">YP</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A3</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// must be an analog pin, use &quot;An&quot; notation!</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">XM</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">A2</span><span style="color: #ADBAC7">  </span><span style="color: #768390">// must be an analog pin, use &quot;An&quot; notation!</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">YM</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">9</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// can be a digital pin</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">XP</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">   </span><span style="color: #768390">// can be a digital pin</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">SENSITIVITY</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">341</span><span style="color: #ADBAC7">                   </span><span style="color: #768390">// Was 300 = Resistance A2 to D8                                                                         </span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MINPRESSURE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MAXPRESSURE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1000</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">TS_MINX</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">150</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">TS_MINY</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">120</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">TS_MAXX</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">920</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">TS_MAXY</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">940</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MINPRESSURE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span></span>
<span class="line"><span style="color: #ADBAC7">#define </span><span style="color: #6CB6FF">MAXPRESSURE</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1000</span></span>
<span class="line"><span style="color: #768390">// Create Touch Screen object</span></span>
<span class="line"><span style="color: #ADBAC7">TouchScreen ts </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">TouchScreen</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">XP</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">YP</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">XM</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">YM</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">SENSITIVITY</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">int left[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7">{</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">45</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">85</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">125</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">165</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">205</span><span style="color: #ADBAC7">};    </span><span style="color: #768390">// left edge of buttons</span></span>
<span class="line"><span style="color: #ADBAC7">int right[]</span><span style="color: #F47067">=</span><span style="color: #ADBAC7">{</span><span style="color: #6CB6FF">35</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">75</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">115</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">155</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">195</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">235</span><span style="color: #ADBAC7">};  </span><span style="color: #768390">// right edge of buttons</span></span>
<span class="line"><span style="color: #ADBAC7">int red </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// Colours set at mid-points</span></span>
<span class="line"><span style="color: #ADBAC7">int green </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">int blue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">int old_r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">int old_g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">int old_b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">graph</span><span style="color: #ADBAC7">(int xx, int yy, int p, unsigned int col){</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Draw a bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(xx, yy, </span><span style="color: #6CB6FF">200</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// Overwrite to background colour</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(xx, yy, p </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">, col);  </span><span style="color: #768390">// New bar graph</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">palette</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Create &#39;buttons&#39; near bottom of screen</span></span>
<span class="line"><span style="color: #ADBAC7">  int w </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int h </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">280</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i</span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">;i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    unsigned int bc </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">GREEN</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (i </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">){bc </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (i </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">){bc </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> i </span><span style="color: #F47067">*</span><span style="color: #ADBAC7">(w</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">), y, w, h, bc);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i</span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> i </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">12</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> i </span><span style="color: #F47067">*</span><span style="color: #ADBAC7">(w</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">), y </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;+&quot;</span><span style="color: #ADBAC7">);}</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i</span><span style="color: #F47067">=</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> i </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">      tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">12</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> i </span><span style="color: #F47067">*</span><span style="color: #ADBAC7">(w</span><span style="color: #F47067">+</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">), y </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;-&quot;</span><span style="color: #ADBAC7">);}</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Display values and bar graphs</span></span>
<span class="line"><span style="color: #ADBAC7">  unsigned int n </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> red </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2048</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> green </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">32</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> blue;</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">240</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">60</span><span style="color: #ADBAC7">, n);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">drawFastVLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">19</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">95</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">90</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0x7BEF</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Graph axis  </span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">drawFastVLine</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">18</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">95</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">90</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0x7BEF</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (n </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0xF2BF</span><span style="color: #ADBAC7">){tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);}  </span><span style="color: #768390">// Black on bright colours</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">85</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(n,</span><span style="color: #6CB6FF">HEX</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">230</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">240</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">46</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  String rS </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(red);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (red </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">){rS </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> rS;}  </span><span style="color: #768390">// Left alignment</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextColor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">WHITE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">25</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">230</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(rS);</span></span>
<span class="line"><span style="color: #ADBAC7">  String gS </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(green);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (green </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">){gS </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> gS;}</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">105</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">230</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(gS);</span></span>
<span class="line"><span style="color: #ADBAC7">  String bS </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(blue);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (blue </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">){bS </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> bS;}</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">186</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">230</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(bS);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setTextSize</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  int rp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> red </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int gp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> green </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">63</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  int bp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> blue </span><span style="color: #F47067">*</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">/</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  String rz </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(rp) </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;%&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  String gz </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(gp) </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;%&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  String bz </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">String</span><span style="color: #ADBAC7">(bp) </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;%&quot;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (rp </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">){rz </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> rz;}</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (rp </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">){rz </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> rz;}</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">13</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">260</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(rz);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (gp </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">){gz </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> gz;}</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (gp </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">){gz </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> gz;}</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">92</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">260</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(gz);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (bp </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">){bz </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> bz;}</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (bp </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">){bz </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot; &quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> bz;}</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">setCursor</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">174</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">260</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(bz);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (old_r </span><span style="color: #F47067">!=</span><span style="color: #ADBAC7"> red){                </span><span style="color: #768390">// red value changed?</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">graph</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">,rp,</span><span style="color: #6CB6FF">RED</span><span style="color: #ADBAC7">);           </span><span style="color: #768390">// Update graph</span></span>
<span class="line"><span style="color: #ADBAC7">    old_r </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> red;</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (old_g </span><span style="color: #F47067">!=</span><span style="color: #ADBAC7"> green){              </span><span style="color: #768390">// green value changed? </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">graph</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">130</span><span style="color: #ADBAC7">,gp,</span><span style="color: #6CB6FF">GREEN</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    old_g </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> green;   </span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7">(old_b </span><span style="color: #F47067">!=</span><span style="color: #ADBAC7"> blue){               </span><span style="color: #768390">// blue value change  </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">graph</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">160</span><span style="color: #ADBAC7">,bp,</span><span style="color: #6CB6FF">BLUE</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    old_b </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> blue;</span></span>
<span class="line"><span style="color: #ADBAC7">  }   </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #768390">//---------SETUP------------------</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">9600</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">reset</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x9341</span><span style="color: #ADBAC7">);  </span><span style="color: #768390">// SDFP5408</span></span>
<span class="line"><span style="color: #ADBAC7">  tft.</span><span style="color: #DCBDFB">fillRect</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">240</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">320</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">BLACK</span><span style="color: #ADBAC7">);    </span><span style="color: #768390">// Drawing area</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">palette</span><span style="color: #ADBAC7">();  </span><span style="color: #768390">// Drawing buttons</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();  </span><span style="color: #768390">// Display the inital values  </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #768390">//---------Main Loop------------</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">  TSPoint p </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> ts.</span><span style="color: #DCBDFB">getPoint</span><span style="color: #ADBAC7">(); </span><span style="color: #768390">// Read the Touch Screen</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Shared pins - fix direction</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">XM</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">YP</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Check for pressure on screen</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (p.z </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">MINPRESSURE</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&amp;&amp;</span><span style="color: #ADBAC7"> p.z </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">MAXPRESSURE</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">      </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Scale Touch values to fit TFT screen </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Adjust final values to improve accuracy</span></span>
<span class="line"><span style="color: #ADBAC7">    p.x </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">map</span><span style="color: #ADBAC7">(p.x, </span><span style="color: #6CB6FF">TS_MINX</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">TS_MAXX</span><span style="color: #ADBAC7">, tft.</span><span style="color: #DCBDFB">width</span><span style="color: #ADBAC7">(), </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">) </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    p.y </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">map</span><span style="color: #ADBAC7">(p.y, </span><span style="color: #6CB6FF">TS_MINY</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">TS_MAXY</span><span style="color: #ADBAC7">, tft.</span><span style="color: #DCBDFB">height</span><span style="color: #ADBAC7">(), </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">)</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">14</span><span style="color: #ADBAC7">; </span></span>
<span class="line"><span style="color: #ADBAC7">    </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ((p.y </span><span style="color: #F47067">&gt;=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">300</span><span style="color: #ADBAC7">) </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> (p.y </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">330</span><span style="color: #ADBAC7">)){               </span><span style="color: #768390">// In the button area?</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ((p.x </span><span style="color: #F47067">&gt;=</span><span style="color: #ADBAC7"> left[</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">]) </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> (p.x </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> right[</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">])){    </span><span style="color: #768390">// Process buttons</span></span>
<span class="line"><span style="color: #ADBAC7">        red </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> red </span><span style="color: #F47067">+</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;                               </span><span style="color: #768390">//   as necessary</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (red </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">){red </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ((p.x </span><span style="color: #F47067">&gt;=</span><span style="color: #ADBAC7"> left[</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">]) </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> (p.x </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> right[</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">])){ </span></span>
<span class="line"><span style="color: #ADBAC7">        red </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> red </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (red </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">){red </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ((p.x </span><span style="color: #F47067">&gt;=</span><span style="color: #ADBAC7"> left[</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">]) </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> (p.x </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> right[</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">])){ </span></span>
<span class="line"><span style="color: #ADBAC7">        green </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> green </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (green </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">63</span><span style="color: #ADBAC7">){green </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">63</span><span style="color: #ADBAC7">;} </span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ((p.x </span><span style="color: #F47067">&gt;=</span><span style="color: #ADBAC7"> left[</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">]) </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> (p.x </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> right[</span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">])){ </span></span>
<span class="line"><span style="color: #ADBAC7">        green </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> green </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (green </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">){green </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ((p.x </span><span style="color: #F47067">&gt;=</span><span style="color: #ADBAC7"> left[</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">]) </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> (p.x </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> right[</span><span style="color: #6CB6FF">4</span><span style="color: #ADBAC7">])){ </span></span>
<span class="line"><span style="color: #ADBAC7">        blue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> blue </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (blue </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">){blue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">31</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ((p.x </span><span style="color: #F47067">&gt;=</span><span style="color: #ADBAC7"> left[</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">]) </span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7"> (p.x </span><span style="color: #F47067">&lt;=</span><span style="color: #ADBAC7"> right[</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">])){ </span></span>
<span class="line"><span style="color: #ADBAC7">        blue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> blue </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (blue </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">){blue </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Update Display</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">show</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Conclusion</strong></h2>



<p class="wp-block-paragraph">There is a small amount of jitter as the bar graph re-draws, but overall, the shield works quickly and well. After the screen has updated and is waiting for a touch, the image is steady, sharp, and bright. Once you have calibrated the touch device, it is very accurate, as demonstrated by the small (30&#215;30 pixel buttons), and provides excellent, colorful graphics on a usefully large display. </p>



<p class="wp-block-paragraph">The SD card reader is a bonus and could always be used via jump wires to record values from sensors on the other pins. These values could then be displayed graphically with a different sketch.</p>



<p class="wp-block-paragraph">I was very pleased with the display&#8217;s quality and the Touch device&#8217;s accuracy. It sits neatly and securely on a UNO or a MEGA 2560. With an SD card reader included, it was excellent value, and I will make good use of it in the future.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tutorial45.com/arduino-with-touch-screen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Alegoo Super Starter Kit and UNO R3 Project Reviews &#8211; Gift Guide</title>
		<link>https://tutorial45.com/alegoo-super-starter-kit-and-uno-r3-project-reviews-gift-guide/</link>
					<comments>https://tutorial45.com/alegoo-super-starter-kit-and-uno-r3-project-reviews-gift-guide/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Andreea]]></dc:creator>
		<pubDate>Tue, 27 Feb 2024 07:41:59 +0000</pubDate>
				<category><![CDATA[Arduino Projects]]></category>
		<guid isPermaLink="false">https://tutorial45.com/?p=10482</guid>

					<description><![CDATA[<p><a href="https://tutorial45.com/alegoo-super-starter-kit-and-uno-r3-project-reviews-gift-guide/">Alegoo Super Starter Kit and UNO R3 Project Reviews &#8211; Gift Guide</a></p>
<p>Acquiring a solid foundation in electronics and programming starts with understanding the basics, tinkering, and expanding one’s knowledge base through practical experiences. The Elegoo UNO Project Super Starter Kit with UNO R3 allows every budding electronics and programming enthusiast to explore the world of electronics. To ease the learning and teaching process for students and ... </p>
<p class="read-more-container"><a title="Alegoo Super Starter Kit and UNO R3 Project Reviews &#8211; Gift Guide" class="read-more button" href="https://tutorial45.com/alegoo-super-starter-kit-and-uno-r3-project-reviews-gift-guide/#more-10482" aria-label="More on Alegoo Super Starter Kit and UNO R3 Project Reviews &#8211; Gift Guide">Read more</a></p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://tutorial45.com/alegoo-super-starter-kit-and-uno-r3-project-reviews-gift-guide/">Alegoo Super Starter Kit and UNO R3 Project Reviews &#8211; Gift Guide</a></p>

<p class="wp-block-paragraph">Acquiring a solid foundation in electronics and programming starts with understanding the basics, tinkering, and expanding one’s knowledge base through practical experiences. The Elegoo UNO Project Super Starter Kit with UNO R3 allows every budding electronics and programming enthusiast to explore the world of electronics.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="920" height="690" src="https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-kit-1.jpg" alt="" class="wp-image-10497" srcset="https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-kit-1.jpg 920w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-kit-1-300x225.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-kit-1-768x576.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-kit-1-585x439.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-kit-1-320x240.jpg 320w" sizes="(max-width: 920px) 100vw, 920px" /></figure>



<p class="wp-block-paragraph">To ease the learning and teaching process for students and educators, the Elegoo UNO Project Super Starter Kit provides the tools and tutorials required to build with the kit. To understand the excellent resources it brings, a detailed review of the kit’s features and projects will be provided to help you decide on purchasing one.</p>



<h2 class="wp-block-heading">Components in the Elegoo UNO Project Super Starter Kit</h2>



<p class="wp-block-paragraph">Starting with the electronics components in the kit, it is easy to note that it comes with various components that can be leveraged to accomplish diverse projects. The kit contains:</p>



<ul class="wp-block-list">
<li>A UNO R3 Controller Board</li>



<li>An LCD 1602 Module (with pin header)</li>



<li>Breadboard Expansion Board</li>



<li>Power Supply Module</li>



<li>Joystick Module</li>



<li>IR Receiver</li>



<li>Servo Motor</li>



<li><a href="https://tutorial45.com/arduino-stepper-motor-project/">Stepper Motor</a></li>



<li>ULN2003 <a href="https://tutorial45.com/arduino-stepper-motor-project/">Stepper Motor</a> Driver Board</li>



<li>Ultrasonic Sensor</li>



<li>DHT11 Temperature and Humidity Module</li>



<li>A 9Volts Battery</li>



<li>65 Jumper Wire</li>



<li>USB Cable 1pcs</li>



<li>Active Buzzer 1pcs</li>



<li>Passive Buzzer 1pcs</li>



<li>Potentiometer 1pcs</li>



<li>&nbsp;5V Relay 1pcs</li>



<li>Breadboard 1pcs</li>



<li>Remote 1pcs</li>



<li>Tilt Switch 5pcs</li>



<li>Button (small) 1pcs</li>



<li>1 digit 7-segment Display 1pcs</li>



<li>4 digit 7-segment Display 5pcs</li>



<li>&nbsp;Yellow LED 5pcs</li>



<li>Blue LED 5pcs</li>



<li>Green LED 5pcs</li>



<li>Red LED 1pcs</li>



<li>RGB LED 2pcs</li>



<li>Photo resistor 1pcs</li>



<li>Thermistor 2pcs</li>



<li>Diode Rectifier (1N4007) 2pcs</li>



<li>NPN Transistor (PN2222) 1pcs</li>



<li>IC 74HC595 120pcs</li>



<li>Resistor 10pcs</li>



<li>Female-to-male DuPont Wire.</li>



<li>Instruction Manual</li>
</ul>



<h2 class="wp-block-heading">Getting Started with the Elegoo UNO Project Super Starter Kit</h2>



<p class="wp-block-paragraph">Experienced electronics and programming enthusiasts will immediately understand the possibilities attached to this kit and every component in it…but it is a starter kit. This means it is geared towards first-time users than experts; thus, a brief explanation of the most important components in the kit is required.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-1-1024x1024.jpg" alt="" class="wp-image-10483" style="width:507px;height:507px" srcset="https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-1-1024x1024.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-1-300x300.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-1-150x150.jpg 150w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-1-768x768.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-1-1170x1170.jpg 1170w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-1-585x585.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-1-65x65.jpg 65w, https://tutorial45.com/wp-content/uploads/2020/11/alegoo-uno-project-arduino-1.jpg 1500w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="wp-block-button aligncenter"><a class="wp-block-button__link has-vivid-red-background-color has-text-color has-background no-border-radius" href="https://amzn.to/2V3HN7R" style="color:#ffffff" target="_blank" rel="nofollow noopener noreferrer">Check Current Price</a></div>



<p class="wp-block-paragraph">Thankfully, the super starter kit comes with an instructional manual or guide in the form of a CD. The guide includes sample codes for specific projects attached to a specific component, an extensive library, and details about each component you will work with. Thus, you are expected to rely heavily on the instructions in your starter pack CD to understand better what the kit is capable of and the very important role of the Arduino Integrated Development Environment (IDE) in executing projects.</p>



<p class="wp-block-paragraph">Now, no Arduino project can be started without an IDE. The integrated development environment is the platform for writing your codes, which directs the Arduino board and the breadboard expansion on what action to take. The IDE is installed on a computer and provides you with the interface and tools for coding. You can download the Arduino IDE for this kit from the Elegoo <a href="https://www.elegoo.com/blogs/arduino-projects/arduino-ide-for-linux-windows-mac" target="_blank" rel="noreferrer noopener nofollow">website here</a>.</p>



<p class="wp-block-paragraph">Once downloaded, you’re finally ready to immerse yourself into the DIY electronics world <a href="https://tutorial45.com/best-arduino-starter-kits/">the starter kit </a>provides. Lastly, plug the Arduino board to your computer so it can begin receiving instructions. Plugging the Arduino board to your computers is as easy as simply connecting the accompanying USB board to both the Arduino board and your computer.</p>



<h2 class="wp-block-heading">Lessons You Should Take Advantage of with the Super Starter Kit</h2>



<p class="wp-block-paragraph">The good people at Elegoo provide every user with 24 lessons from the kit. These lessons can be found in the instructions CD highlighted above and it is the best way to get familiar with using an Arduino board and provisioning electronics components.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="920" height="690" src="https://tutorial45.com/wp-content/uploads/2020/11/Elegoo-UNO-Project.jpg" alt="" class="wp-image-10499" srcset="https://tutorial45.com/wp-content/uploads/2020/11/Elegoo-UNO-Project.jpg 920w, https://tutorial45.com/wp-content/uploads/2020/11/Elegoo-UNO-Project-300x225.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/11/Elegoo-UNO-Project-768x576.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/11/Elegoo-UNO-Project-585x439.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/11/Elegoo-UNO-Project-320x240.jpg 320w" sizes="(max-width: 920px) 100vw, 920px" /></figure>



<div class="wp-block-button aligncenter"><a class="wp-block-button__link has-vivid-red-background-color has-text-color has-background no-border-radius" href="https://amzn.to/2V3HN7R" style="color:#ffffff" target="_blank" rel="nofollow noopener noreferrer">Check Current Price</a></div>



<h3 class="wp-block-heading">And what do the lessons cover?</h3>



<p class="wp-block-paragraph">The 24 lessons you get in the tutorial focus on the basics, such as loading specific programs or code libraries and assigning them to folders for specific components and use cases, and how to attach external electronic components such as LED lights and LCD screen to the Arduino board. The basics then lead to some practical lessons, such as programming a timer or clock onto the LCD module and setting up the temperature and humidity module to read the temperature of your environment.</p>



<p class="wp-block-paragraph">The lessons in the tutorials Elegoo provides right out of the kit prepare you for undertaking more complex projects, which the components in the kit support. The fourth lesson is where the action starts, and you’ll be introduced to the RGB LED project, which involves getting the multicolored LED lights in the kit to form a strip with the lights coming on in specified sequences. As expected, the codes and instructions for executing the RGB LED project have been provided in the official Elegoo tutorials.</p>



<p class="wp-block-paragraph">The next projects include programming the digital buzzer, active buzzer, tilt ball switch, Ultrasonic sensor module, temperature, and the other components in the box. Like each lesson in the tutorial, the codes and instructions needed to set up each of these projects have been provided by Elegoo. Once you have completed the 24 lessons Elegoo provides you would gain insight into what can be accomplished with an Arduino board and the right components.</p>



<h2 class="wp-block-heading">Sample Tasks to Consider Doing with the Elegoo UNO Project Super Starter Kit</h2>



<p class="wp-block-paragraph">Learning Elegoo&#8217;s lessons is simply the beginning of the journey to becoming proficient in electronics DIY tasks. The Elegoo UNO super starter kit is a powerful tool that allows you to explore further than the lessons in the official tutorial. Here, 2 sample projects or tasks will be included, which you can explore.</p>



<h3 class="wp-block-heading">The Ultrasonic Distance Measurement Project</h3>



<p class="wp-block-paragraph">The basics of this project involve using an ultrasonic sensor to measure distances. The most important components this project requires are the Ultrasonic sensor, the UNO R3, the expansion board, and the LCD, which displays the distance measured and can be found in the kit.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://tutorial45.com/wp-content/uploads/2017/08/schematic1.png" alt=""/></figure>



<p class="wp-block-paragraph">The project involves connecting the expansion board to the UNO using wires and wiring the Ultrasonic sensor and the LCD display to the breadboard. To get the Ultrasonic distance measurement project working, you will also need to input the required code into the Arduino IDE. You can find the details for wiring and the code for this <a href="https://tutorial45.com/arduino-projects-beginners/">project here</a>.</p>



<h3 class="wp-block-heading">Joystick Control of a DC Motor </h3>



<p class="wp-block-paragraph">This project takes things up a notch by attempting to control the direction and speed at which a DC motor rotates using a joystick. Note that the Elegoo Super Starter Kit provides its most important components, including the joystick, the DC motor, and an Arduino UNO R3.</p>



<p class="wp-block-paragraph">The project involves wiring the UNO R3 with the breadboard to extend its functionalities and installing the DC motor and joystick to the breadboard. If successfully done, the DC motor&#8217;s speed and direction can be manipulated using a joystick. You can find the details and code for this <a href="https://www.instructables.com/Fun-Projects-With-Elegoo-Uno-R3-Super-Start-Kit-Jo/">project here</a>.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">The Elegoo UNO Project Super Starter Kit, including a tutorial and UNO R3, is highly regarded as an excellent kit for understanding the electronics basics with Arduino. </p>



<p class="wp-block-paragraph">It is top-rated by DIY lovers and professionals featured on YouTube who affirm its effectiveness in introducing Arduino basics at a reasonable price. Its variety of project options and the chance to experiment individually also enhance its attractiveness.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tutorial45.com/alegoo-super-starter-kit-and-uno-r3-project-reviews-gift-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mcp2515 Arduino Project: Using a Controller Area Network (CAN) with Arduino</title>
		<link>https://tutorial45.com/mcp2515-arduino-project-can-arduino/</link>
					<comments>https://tutorial45.com/mcp2515-arduino-project-can-arduino/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Andreea]]></dc:creator>
		<pubDate>Mon, 26 Feb 2024 22:45:05 +0000</pubDate>
				<category><![CDATA[Arduino Projects]]></category>
		<guid isPermaLink="false">https://tutorial45.com/?p=10506</guid>

					<description><![CDATA[<p><a href="https://tutorial45.com/mcp2515-arduino-project-can-arduino/">Mcp2515 Arduino Project: Using a Controller Area Network (CAN) with Arduino</a></p>
<p>This guide presumes that the user is adept in integrating LEDs, potentiometers, and sensors into the Arduino platform, has worked with SPI and I2C devices, and is prepared to level up and initiate data exchange between Arduinos. Employing this network is more straightforward and more comprehensible than radio communication; however, it necessitates wiring between the ... </p>
<p class="read-more-container"><a title="Mcp2515 Arduino Project: Using a Controller Area Network (CAN) with Arduino" class="read-more button" href="https://tutorial45.com/mcp2515-arduino-project-can-arduino/#more-10506" aria-label="More on Mcp2515 Arduino Project: Using a Controller Area Network (CAN) with Arduino">Read more</a></p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://tutorial45.com/mcp2515-arduino-project-can-arduino/">Mcp2515 Arduino Project: Using a Controller Area Network (CAN) with Arduino</a></p>

<p class="wp-block-paragraph">This guide presumes that the user is adept in integrating LEDs, potentiometers, and sensors into the Arduino platform, has worked with SPI and I2C devices, and is prepared to level up and initiate data exchange between Arduinos. Employing this network is more straightforward and more comprehensible than radio communication; however, it necessitates wiring between the Arduinos.</p>



<p class="wp-block-paragraph">CAN, a robust vehicle data bus standard, facilitates communication and data sharing among microcontrollers without needing a host computer. This message-based protocol was initially created to conserve copper in automotive wiring systems. </p>



<p class="wp-block-paragraph">Bosch, the German company, came up with CAN in 1983, which was first applied in the Mercedes-Benz W140 in 1991. Modern vehicles may incorporate approximately seventy electronic devices such as sensors, actuators, a unit for managing the engine, and an automatic engine start/stop system.</p>



<p class="wp-block-paragraph">These rely on getting readings from accelerometers, thermometers, and gas sensors and sending commands to actuators. Great accuracy is required, and the CAN bus has a great deal of cyclic redundancy checking (CRC) built in to ensure safety. </p>



<p class="wp-block-paragraph">Small data frames are used with a maximum of 8 data bytes in each packet. Each node has an ID number, and transmission clashes on the network are dealt with by the lower-priority frame backing off. Priority depends on the allocated ID given to the device. Lower ID numbers have higher priority. </p>



<p class="wp-block-paragraph">All devices, including the transmitting device, receive data packets sent on the network. The system allows one device to request data from another via a Remote Transmission Request (RTR) frame, but some authorities recommend not using this facility.</p>



<p class="wp-block-paragraph">Although initially designed for automotive situations, this bus offers a simple and inexpensive system for hobby <a href="https://tutorial45.com/electronic-project-diy-line-follower-robot/">electronics projects</a>. The node modules are available from a wide range of sources. Many use an <strong>MCP2515</strong> CAN Bus controller with an SPI interface and an <strong>MCP2551</strong> CAN transceiver.</p>



<h2 class="wp-block-heading">The fields of a standard CAN frame</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Field</strong></td><td><strong>Bits</strong></td></tr><tr><td>Start of Frame SOF</td><td>1</td></tr><tr><td>Standard Identifier ID</td><td>11</td></tr><tr><td>Control</td><td>6</td></tr><tr><td>Data</td><td>64 – 8 bytes</td></tr><tr><td>Cyclic Redundancy Check &#8211; CRC</td><td>16</td></tr><tr><td>Acknowledgement &#8211; ACK</td><td>2</td></tr><tr><td>End of Frame &#8211; EOF</td><td>7</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">A minimum of two nodes is connected with a twisted pair of wires with a nominal impedance of 120 Ohms. The CAN high (CANH) and CAN low (CANL) pins are provided on the modules.  CANH is connected, and CANL is connected with 120 Ohm resistors included at the end nodes of the bus.</p>



<p class="wp-block-paragraph">Breakout board node modules are readily available, and I used some supplied by AZ-Delivery. (A 3-pack costs less than two singles!) SPI signals drive the modules and are very easy to connect to Arduino boards. I used a Nano at one end and a UNO at the other end of the network. Jumpers were used to short the J1 pins to include the built-in 120 Ohm termination resistors. </p>



<p class="wp-block-paragraph">The pins on J4 were connected to the Arduinos using pins 10 to 13. The large blue screw terminals labeled H and L were used to link the modules together with the network-twisted pair of wires. I added an LED with a protective current limiting resistor to pin D5 on the Nano.</p>



<h2 class="wp-block-heading">System Test</h2>



<p class="wp-block-paragraph">We will need:</p>



<ul class="wp-block-list">
<li>2 CAN modules</li>



<li>Arduino UNO</li>



<li>Arduino Nano – They need different COM values&nbsp;</li>



<li>Suitable USB cables</li>



<li>Connection wire</li>



<li>LED</li>



<li>560 Ohm resistor</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="508" height="430" src="https://tutorial45.com/wp-content/uploads/2020/11/Mcp2515_Arduino-1.jpg" alt="" class="wp-image-10507" style="width:309px;height:262px" srcset="https://tutorial45.com/wp-content/uploads/2020/11/Mcp2515_Arduino-1.jpg 508w, https://tutorial45.com/wp-content/uploads/2020/11/Mcp2515_Arduino-1-300x254.jpg 300w" sizes="(max-width: 508px) 100vw, 508px" /></figure>
</div>


<h2 class="wp-block-heading">Connections</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>CAN Module</strong></td><td><strong>Arduino UNO and Nano</strong></td></tr><tr><td>INT</td><td>D6 (Not needed for these examples)</td></tr><tr><td>SCK</td><td>D13</td></tr><tr><td>SI</td><td>D11</td></tr><tr><td>SO</td><td>D12</td></tr><tr><td>CS</td><td>D10</td></tr><tr><td>GND</td><td>GND</td></tr><tr><td>VCC</td><td>5 volts</td></tr><tr><td></td><td></td></tr><tr><td>H</td><td>H on the other module</td></tr><tr><td>L</td><td>L on the other module</td></tr><tr><td>J1 pins shorted together (to provide 120 Ohm network termination.)</td><td></td></tr></tbody></table></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="870" height="437" src="https://tutorial45.com/wp-content/uploads/2020/11/can-bus-arduino.jpg" alt="" class="wp-image-10510" srcset="https://tutorial45.com/wp-content/uploads/2020/11/can-bus-arduino.jpg 870w, https://tutorial45.com/wp-content/uploads/2020/11/can-bus-arduino-300x151.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/11/can-bus-arduino-768x386.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/11/can-bus-arduino-585x294.jpg 585w" sizes="(max-width: 870px) 100vw, 870px" /></figure>



<h2 class="wp-block-heading">Library</h2>



<p class="wp-block-paragraph">You need an Arduino library to drive these boards. There are several to choose from, but I picked mcp_can, which can be found here: <a href="https://github.com/Seeed-Studio/CAN_BUS_Shield" target="_blank" rel="noreferrer noopener">https://github.com/Seeed-Studio/CAN_BUS_Shield</a></p>



<p class="wp-block-paragraph">because it had several example sketches. This is supplied as a .zip file and is easy to install.</p>



<p class="wp-block-paragraph">At this point, you need a bit of care and organization. If using Windows, you will need two separate instances of the Arduino IDE running on your computer with different ports / COM numbers. You need to start each of them from the Start button. (Do not try to get the second one by clicking NEW on the first IDE window.)</p>



<p class="wp-block-paragraph">Keep the sending setup on the right. (UNO right side of the bench, USB cable in the right USB socket, IDE and Serial Monitor windows on the right side of the screen – COM27.)</p>



<p class="wp-block-paragraph">Keep the receiving setup on the left. (Nano, with optional LED on pin D5, USB socket, IDE, and Serial Monitor on the left – COM11.)&nbsp;</p>



<p class="wp-block-paragraph"><strong>Check the port numbers at the bottom right corner of each IDE window. They must be different.</strong></p>



<p class="wp-block-paragraph">Copy the SEND sketch into the right IDE and compile/load it. Then copy the RECEIVE sketch into the left IDE and compile/load it.</p>



<p class="wp-block-paragraph">Turn on the Serial monitors (115200 baud) and press the reset button on the right, sending Arduino UNO to start sending data again.</p>



<p class="wp-block-paragraph">Both monitor windows should fill up so that you can see data flowing via the network from one to the other.</p>



<h2 class="wp-block-heading">Basic SEND sketch</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Demonstration SEND with CAN-BUS Module - UNO
// Tony Goodhew 18th Nov 2020
// Tutorial45.com
#include &lt;mcp_can.h&gt;
#include &lt;SPI.h&gt;

const int SPI_CS_PIN = 10;

MCP_CAN CAN(SPI_CS_PIN); // Chip select

void setup() {
    Serial.begin(115200);

    while (CAN_OK != CAN.begin(CAN_500KBPS)) {
        Serial.println(&quot;CAN BUS Module failed to start&quot;);
        Serial.println(&quot; Try again&quot;);
        delay(100);
    }
    Serial.println(&quot;CAN BUS Module started.&quot;);

    for (int i=0; i &lt;256; i++){
      Serial.println(&quot;-----------------------------&quot;);
      int q = random(0,100);
      int ledState = 1;
      if (q &lt; 40){ledState = 0;}
      // Place data to be sent in output buffer
      byte bufout[8] = {ledState, i, i+1, 255, 100, 200, random(0,255), 255-i};
  
      // Sending:  ID = 0x05, standard frame, data len = 8, data in bufout
      CAN.sendMsgBuf(0x05, 0, 8, bufout);
      Serial.print(&quot;Packet sequence # &quot;);
      Serial.println(i);
      for(int i = 0; i&lt;8; i++){
          Serial.print(bufout[i]);
          Serial.print(&quot;\t&quot;); 
      }
      Serial.println();
      delay(100);       // slow things down
    }
}
void loop(){}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Demonstration SEND with CAN-BUS Module - UNO</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 18th Nov 2020</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">mcp_can.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SPI</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">int</span><span style="color: #ADBAC7"> SPI_CS_PIN </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6CB6FF">MCP_CAN</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">CAN</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SPI_CS_PIN</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Chip select</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">115200</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">while</span><span style="color: #ADBAC7"> (</span><span style="color: #6CB6FF">CAN_OK</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">!=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CAN_500KBPS</span><span style="color: #ADBAC7">)) {</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;CAN BUS Module failed to start&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; Try again&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;CAN BUS Module started.&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7"> (int i</span><span style="color: #F47067">=</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">256</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;-----------------------------&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      int q </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      int ledState </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (q </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">){ledState </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #768390">// Place data to be sent in output buffer</span></span>
<span class="line"><span style="color: #ADBAC7">      byte bufout[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {ledState, i, i+</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">200</span><span style="color: #ADBAC7">, </span><span style="color: #DCBDFB">random</span><span style="color: #ADBAC7">(0,255), </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">-i};</span></span>
<span class="line"><span style="color: #ADBAC7">  </span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #768390">// Sending:  ID = 0x05, standard frame, data len = 8, data in bufout</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">sendMsgBuf</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x05</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">, bufout);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Packet sequence # &quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(i);</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">          Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(bufout[i]);</span></span>
<span class="line"><span style="color: #ADBAC7">          Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\t</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);       </span><span style="color: #768390">// slow things down</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">(){}</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="477" height="380" src="https://tutorial45.com/wp-content/uploads/2020/11/CAN-SEND-OUTPUT.jpg" alt="" class="wp-image-10513" srcset="https://tutorial45.com/wp-content/uploads/2020/11/CAN-SEND-OUTPUT.jpg 477w, https://tutorial45.com/wp-content/uploads/2020/11/CAN-SEND-OUTPUT-300x239.jpg 300w" sizes="(max-width: 477px) 100vw, 477px" /></figure>



<p class="wp-block-paragraph">This sketch sends 256 packets of data across the network. Each packet is made up from the ID of the sending node, “05” hex, and 8 bytes:</p>



<ol class="wp-block-list">
<li>randomly generated 0 or 1, to turn the LED ON/OFF,</li>



<li>sequence value 0 to 255</li>



<li>sequence value + 1 – note it overflows on last frame (“0” not “256”)</li>



<li>constant 255</li>



<li>constant 100</li>



<li>constant 200</li>



<li>random numbers 0 to 255</li>



<li>sequence counting down from 255 to 0</li>
</ol>



<h2 class="wp-block-heading">Basic RECEIVE sketch</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Demonstration RECEIVE with CAN-BUS Module - Nano
// LED on pin 5
// Tony Goodhew 18th Nov 2020
// Tutorial45.com
#include &lt;SPI.h&gt;
#include &lt;mcp_can.h&gt;

const int spiCSPin = 10;
const int ledPin = 5; // With protection resistor

MCP_CAN CAN(spiCSPin);

void setup(){
    Serial.begin(115200);
    pinMode(ledPin,OUTPUT);

    while (CAN_OK != CAN.begin(CAN_500KBPS)) { 
        Serial.println(&quot;CAN BUS Module failed to start&quot;);
        Serial.println(&quot; Try again&quot;);
        delay(100);
    }
    Serial.println(&quot;CAN BUS Module started.&quot;);
}

void loop(){
    byte len = 0;
    byte bufin[8];

    if(CAN_MSGAVAIL == CAN.checkReceive()){
        CAN.readMsgBuf(&amp;len, bufin);
        unsigned long canId = CAN.getCanId();
        Serial.println(&quot;-----------------------------&quot;);
        Serial.print(&quot;Data from ID: 0x&quot;);
        Serial.println(canId, HEX);

        for(int i = 0; i&lt;len; i++){
            Serial.print(bufin[i]);
            Serial.print(&quot;\t&quot;);
            // Update LED state from 1st data item 
            if(i==0)
              {digitalWrite(ledPin, bufin[0]);} 
        }
        Serial.println();
    }
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Demonstration RECEIVE with CAN-BUS Module - Nano</span></span>
<span class="line"><span style="color: #768390">// LED on pin 5</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 18th Nov 2020</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SPI</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">mcp_can.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">int</span><span style="color: #ADBAC7"> spiCSPin </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">int</span><span style="color: #ADBAC7"> ledPin </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// With protection resistor</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6CB6FF">MCP_CAN</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">CAN</span><span style="color: #ADBAC7">(spiCSPin);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">115200</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(ledPin,</span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">while</span><span style="color: #ADBAC7"> (</span><span style="color: #6CB6FF">CAN_OK</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">!=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CAN_500KBPS</span><span style="color: #ADBAC7">)) { </span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;CAN BUS Module failed to start&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; Try again&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;CAN BUS Module started.&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">    byte len </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    byte bufin[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">];</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CAN_MSGAVAIL</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">==</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">checkReceive</span><span style="color: #ADBAC7">()){</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">readMsgBuf</span><span style="color: #ADBAC7">(</span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7">len, bufin);</span></span>
<span class="line"><span style="color: #ADBAC7">        unsigned long canId </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">getCanId</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;-----------------------------&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Data from ID: 0x&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(canId, </span><span style="color: #6CB6FF">HEX</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">len; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">            Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(bufin[i]);</span></span>
<span class="line"><span style="color: #ADBAC7">            Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\t</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">            </span><span style="color: #768390">// Update LED state from 1st data item </span></span>
<span class="line"><span style="color: #ADBAC7">            </span><span style="color: #F47067">if</span><span style="color: #ADBAC7">(i</span><span style="color: #F47067">==</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">)</span></span>
<span class="line"><span style="color: #ADBAC7">              {</span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(ledPin, bufin[</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">]);} </span></span>
<span class="line"><span style="color: #ADBAC7">        }</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="516" height="596" src="https://tutorial45.com/wp-content/uploads/2020/11/CAN-REC-OUTPUT.jpg" alt="" class="wp-image-10511" srcset="https://tutorial45.com/wp-content/uploads/2020/11/CAN-REC-OUTPUT.jpg 516w, https://tutorial45.com/wp-content/uploads/2020/11/CAN-REC-OUTPUT-260x300.jpg 260w" sizes="(max-width: 516px) 100vw, 516px" /></figure>



<p class="wp-block-paragraph">All data arrived safely with the LED flashing as required.</p>



<h2 class="wp-block-heading">Project: Sending data both ways</h2>



<p class="wp-block-paragraph">The project reuses the circuit from the prior example to exhibit bi-directional data transmission. In this case, the Nano transmits readings of temperature and humidity collected from a simulated sensor to the UNO. Simultaneously, the UNO forwards a sequence number and multiple pre-recorded brightness values to the Nano. This data prompts the Nano to adjust the luminosity of the D5-pin LED. The activity is recorded at both ends to observe the ongoing operation.</p>



<p class="wp-block-paragraph">I have simulated the sensor to have a temperature range from -40 to 100 and use brightness values between 0 and 119. Simulation allows us to concentrate on the CAN bus rather than the sensors, which you may not have handy.</p>



<p class="wp-block-paragraph">The CAN bus has built-in collision avoidance arbitration. If two nodes try to send data packets simultaneously, the one with the higher priority gets precedence, and the lower priority node tries again after a short delay when the bus is clear.</p>



<p class="wp-block-paragraph">We can use <strong>delay(XX);</strong> on the Arduino end because it sends more data and only processes received data every 0.5 seconds. The Nano needs non-blocking timing because it needs to keep processing incoming data while occasionally sending out data.</p>



<p class="wp-block-paragraph">Sometimes, we need to ‘code’ a data item so that it can be transmitted with bite-sized pieces. A byte can contain values from zero to 255. If we need to send integer temperatures ranging from -40 to 100 a simple trick is to add 40 before you send it, and take 40 off again once it has arrived. </p>



<p class="wp-block-paragraph">If you want to send floating point temperatures, you could split the temperature into whole numbers and fractional parts. Send the whole number part in the same manner in one byte and the decimal part multiplied by 100 in a second byte. At the receiving end, divide the ‘decimal byte’ by 100 and recombine by addition to get the original temperature.</p>



<h2 class="wp-block-heading">Nano Code</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Demonstration RECEIVE and SEND with CAN-BUS Module - NANO
// LED on pin 5 with 560 Ohm  - PWM available
// Tony Goodhew 24th Nov 2020
// Tutorial45.com
#include &lt;SPI.h&gt;
#include &lt;mcp_can.h&gt;

const int spiCSPin = 10;
const int ledPin = 5; // With protection resistor- PWM pin
// Simulated temperature and humidity values
const int temps[] ={-40,-34,-27,-15,0,5,11,15,17,24,34}; // 11 items
const int hums[] = {20,30,40,50,60,75,80,95,72,56,48,35}; // 12 items
int tp = 0; // temperature data pointer
int hp = 0; // humidity data pointer
unsigned long nextTime; // For non-blocking delays
MCP_CAN CAN(spiCSPin);

void setup(){
    Serial.begin(115200);
    pinMode(ledPin,OUTPUT);
    nextTime = 500 + millis(); // 0.5 seconds in the future

    while (CAN_OK != CAN.begin(CAN_500KBPS)) { 
        Serial.println(&quot;CAN BUS Module failed to start&quot;);
        Serial.println(&quot; Try again&quot;);
        delay(100);
    }
    Serial.println(&quot;CAN BUS Module started.&quot;);
}
void loop(){
  byte len = 0;
  byte bufin[8];
  if(CAN_MSGAVAIL == CAN.checkReceive()){ // Data packet available?
    CAN.readMsgBuf(&amp;len, bufin);          // Read data packet
    unsigned long canId = CAN.getCanId(); // Get the ID of sender  
    Serial.print(&quot;Data from ID: 0x&quot;);
    Serial.print(canId, HEX);
    Serial.print(&quot;\t&quot;);
    if (canId == 0x05){                   // Is it from UNO?
      for(int i = 0; i&lt;len; i++){         // Print the contents of packet received
        Serial.print(bufin[i]);
        Serial.print(&quot;\t&quot;);  
      }
    Serial.println();
    // Update LED brightness from second data item 
    analogWrite(ledPin, bufin[1]);
    }
  }
  // Every 0.5 seconds
  if (millis() &gt; nextTime){ // Has 0.5 seconds passed since last send?
    nextTime = nextTime + 500; // Update next time to send
    // Simulate sensors
    int temperature = temps[tp]; // Fetch simulated temperature
    tp = tp + 1;
    if (tp &gt; 11){tp = 0;}    
    int humidity = hums[hp];     // Fetch simulated humidity
    hp = hp + 1;
    if (hp &gt; 12){hp = 0;}
    byte temp = byte(temperature + 40); // code so never negative
    byte hum = byte(humidity);
    byte bufout[] = {temp, hum}; // Put send data into buffer
    CAN.sendMsgBuf(0x20, 0, 2, bufout); // Id = 0x20 // Send the packet
    Serial.println(&quot;-----------------------------&quot;); // Log packet sent to Serial Monitor
    Serial.print(&quot;Sent Sensor Packet &quot;);
    for(int i = 0; i&lt;2; i++){
      Serial.print(bufout[i]);
      Serial.print(&quot;\t&quot;); 
    }
    Serial.println();
  }
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Demonstration RECEIVE and SEND with CAN-BUS Module - NANO</span></span>
<span class="line"><span style="color: #768390">// LED on pin 5 with 560 Ohm  - PWM available</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 24th Nov 2020</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SPI</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">mcp_can.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">int</span><span style="color: #ADBAC7"> spiCSPin </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">int</span><span style="color: #ADBAC7"> ledPin </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// With protection resistor- PWM pin</span></span>
<span class="line"><span style="color: #768390">// Simulated temperature and humidity values</span></span>
<span class="line"><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">int</span><span style="color: #ADBAC7"> temps[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7">{-</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,-</span><span style="color: #6CB6FF">34</span><span style="color: #ADBAC7">,-</span><span style="color: #6CB6FF">27</span><span style="color: #ADBAC7">,-</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">11</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">15</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">17</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">24</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">34</span><span style="color: #ADBAC7">}; </span><span style="color: #768390">// 11 items</span></span>
<span class="line"><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">int</span><span style="color: #ADBAC7"> hums[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {</span><span style="color: #6CB6FF">20</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">30</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">60</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">75</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">80</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">95</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">72</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">56</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">48</span><span style="color: #ADBAC7">,</span><span style="color: #6CB6FF">35</span><span style="color: #ADBAC7">}; </span><span style="color: #768390">// 12 items</span></span>
<span class="line"><span style="color: #ADBAC7">int tp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// temperature data pointer</span></span>
<span class="line"><span style="color: #ADBAC7">int hp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// humidity data pointer</span></span>
<span class="line"><span style="color: #ADBAC7">unsigned long nextTime; </span><span style="color: #768390">// For non-blocking delays</span></span>
<span class="line"><span style="color: #6CB6FF">MCP_CAN</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">CAN</span><span style="color: #ADBAC7">(spiCSPin);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">115200</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(ledPin,</span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    nextTime </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">500</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">millis</span><span style="color: #ADBAC7">(); </span><span style="color: #768390">// 0.5 seconds in the future</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">while</span><span style="color: #ADBAC7"> (</span><span style="color: #6CB6FF">CAN_OK</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">!=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CAN_500KBPS</span><span style="color: #ADBAC7">)) { </span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;CAN BUS Module failed to start&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; Try again&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;CAN BUS Module started.&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">  byte len </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  byte bufin[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">];</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CAN_MSGAVAIL</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">==</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">checkReceive</span><span style="color: #ADBAC7">()){ </span><span style="color: #768390">// Data packet available?</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">readMsgBuf</span><span style="color: #ADBAC7">(</span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7">len, bufin);          </span><span style="color: #768390">// Read data packet</span></span>
<span class="line"><span style="color: #ADBAC7">    unsigned long canId </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">getCanId</span><span style="color: #ADBAC7">(); </span><span style="color: #768390">// Get the ID of sender  </span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Data from ID: 0x&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(canId, </span><span style="color: #6CB6FF">HEX</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\t</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (canId </span><span style="color: #F47067">==</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x05</span><span style="color: #ADBAC7">){                   </span><span style="color: #768390">// Is it from UNO?</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">len; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){         </span><span style="color: #768390">// Print the contents of packet received</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(bufin[i]);</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\t</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);  </span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Update LED brightness from second data item </span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">analogWrite</span><span style="color: #ADBAC7">(ledPin, bufin[</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">]);</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Every 0.5 seconds</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #DCBDFB">millis</span><span style="color: #ADBAC7">() </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> nextTime){ </span><span style="color: #768390">// Has 0.5 seconds passed since last send?</span></span>
<span class="line"><span style="color: #ADBAC7">    nextTime </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> nextTime </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">500</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// Update next time to send</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// Simulate sensors</span></span>
<span class="line"><span style="color: #ADBAC7">    int temperature </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> temps[tp]; </span><span style="color: #768390">// Fetch simulated temperature</span></span>
<span class="line"><span style="color: #ADBAC7">    tp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> tp </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (tp </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">11</span><span style="color: #ADBAC7">){tp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;}    </span></span>
<span class="line"><span style="color: #ADBAC7">    int humidity </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> hums[hp];     </span><span style="color: #768390">// Fetch simulated humidity</span></span>
<span class="line"><span style="color: #ADBAC7">    hp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> hp </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (hp </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">12</span><span style="color: #ADBAC7">){hp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">    byte temp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">byte</span><span style="color: #ADBAC7">(temperature </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// code so never negative</span></span>
<span class="line"><span style="color: #ADBAC7">    byte hum </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">byte</span><span style="color: #ADBAC7">(humidity);</span></span>
<span class="line"><span style="color: #ADBAC7">    byte bufout[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {temp, hum}; </span><span style="color: #768390">// Put send data into buffer</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">sendMsgBuf</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x20</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">, bufout); </span><span style="color: #768390">// Id = 0x20 // Send the packet</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;-----------------------------&quot;</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Log packet sent to Serial Monitor</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Sent Sensor Packet &quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(bufout[i]);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\t</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="313" height="706" src="https://tutorial45.com/wp-content/uploads/2020/11/CAN_Nano-log-Project.jpg" alt="" class="wp-image-10514" srcset="https://tutorial45.com/wp-content/uploads/2020/11/CAN_Nano-log-Project.jpg 313w, https://tutorial45.com/wp-content/uploads/2020/11/CAN_Nano-log-Project-133x300.jpg 133w" sizes="(max-width: 313px) 100vw, 313px" /></figure>



<h2 class="wp-block-heading">Uno Code</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// UNO - SEND &amp; RECEIVE with CAN-BUS Module
// Tony Goodhew 24th Nov 2020
// Tutorial45.com
#include &lt;mcp_can.h&gt;
#include &lt;SPI.h&gt;

const int SPI_CS_PIN = 10;
byte len = 0;
byte bufin[8];
MCP_CAN CAN(SPI_CS_PIN); // Chip select
byte brightness = 0;  
byte sequence = 0;
void setup() {
  Serial.begin(115200);

  while (CAN_OK != CAN.begin(CAN_500KBPS)) {
    Serial.println(&quot;CAN BUS Module failed to start&quot;);
    Serial.println(&quot; Try again&quot;);
    delay(100);
  }
  Serial.println(&quot;CAN BUS Module started.&quot;); 
}
void loop(){
  if(CAN_MSGAVAIL == CAN.checkReceive()){ // Data packet available?
    CAN.readMsgBuf(&amp;len, bufin);          // Read data packet
    unsigned long canId = CAN.getCanId(); // Get the ID of sender
    if (canId != 0x05){                   // Is it from another node?
      Serial.println(&quot;-----------------------------&quot;);
      Serial.print(&quot;Data from ID: 0x&quot;);
      Serial.print(canId, HEX);
      Serial.print(&quot;\t&quot;);
      for(int i = 0; i&lt;len; i++){
        Serial.print(bufin[i]);
        Serial.print(&quot;\t&quot;);
      }
      Serial.println();
      int temperature = bufin[0] - 40; // decode temperature
      int humidity = bufin[1];         // get humidity
      Serial.print(&quot;Temperature: &quot;);   // Log to Serial monitor
      Serial.print(temperature);
      Serial.print(&quot;  Humidity: &quot;);
      Serial.println(humidity);
    } 
  }
  // Sending:  ID = 0x05, standard frame, data len = 8, data in bufout
    brightness = brightness + 7; // Simulate turning potentiometer up
    if (brightness &gt; 120) {brightness = 0;}
    sequence = sequence + 1;     // Increment sequence counter
    if (sequence &gt; 255) {sequence = 0;}
    byte bufout[] = {sequence, brightness};  // Put values in output buffer
    CAN.sendMsgBuf(0x05, 0, 2, bufout);      // Send the data packet
    Serial.print(&quot;Sent Packet sequence # &quot;); // Log action
    for(int i = 0; i&lt;2; i++){
      Serial.print(bufout[i]);
      Serial.print(&quot;\t&quot;); 
    }
    Serial.println();
    delay(10  0);       // slow things down
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// UNO - SEND &amp; RECEIVE with CAN-BUS Module</span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew 24th Nov 2020</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">mcp_can.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">#include </span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">SPI</span><span style="color: #ADBAC7">.h</span><span style="color: #F47067">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">int</span><span style="color: #ADBAC7"> SPI_CS_PIN </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">byte len </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">byte bufin[</span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">];</span></span>
<span class="line"><span style="color: #6CB6FF">MCP_CAN</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">CAN</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">SPI_CS_PIN</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Chip select</span></span>
<span class="line"><span style="color: #ADBAC7">byte brightness </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;  </span></span>
<span class="line"><span style="color: #ADBAC7">byte sequence </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">115200</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">while</span><span style="color: #ADBAC7"> (</span><span style="color: #6CB6FF">CAN_OK</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">!=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">begin</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CAN_500KBPS</span><span style="color: #ADBAC7">)) {</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;CAN BUS Module failed to start&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot; Try again&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">100</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;CAN BUS Module started.&quot;</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">(){</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">CAN_MSGAVAIL</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">==</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">checkReceive</span><span style="color: #ADBAC7">()){ </span><span style="color: #768390">// Data packet available?</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">readMsgBuf</span><span style="color: #ADBAC7">(</span><span style="color: #F47067">&amp;</span><span style="color: #ADBAC7">len, bufin);          </span><span style="color: #768390">// Read data packet</span></span>
<span class="line"><span style="color: #ADBAC7">    unsigned long canId </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">getCanId</span><span style="color: #ADBAC7">(); </span><span style="color: #768390">// Get the ID of sender</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (canId </span><span style="color: #F47067">!=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0x05</span><span style="color: #ADBAC7">){                   </span><span style="color: #768390">// Is it from another node?</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;-----------------------------&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Data from ID: 0x&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(canId, </span><span style="color: #6CB6FF">HEX</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\t</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">len; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(bufin[i]);</span></span>
<span class="line"><span style="color: #ADBAC7">        Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\t</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      }</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">      int temperature </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> bufin[</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">] </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">40</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// decode temperature</span></span>
<span class="line"><span style="color: #ADBAC7">      int humidity </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> bufin[</span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">];         </span><span style="color: #768390">// get humidity</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Temperature: &quot;</span><span style="color: #ADBAC7">);   </span><span style="color: #768390">// Log to Serial monitor</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(temperature);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;  Humidity: &quot;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">(humidity);</span></span>
<span class="line"><span style="color: #ADBAC7">    } </span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// Sending:  ID = 0x05, standard frame, data len = 8, data in bufout</span></span>
<span class="line"><span style="color: #ADBAC7">    brightness </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> brightness </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">; </span><span style="color: #768390">// Simulate turning potentiometer up</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (brightness </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">120</span><span style="color: #ADBAC7">) {brightness </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">    sequence </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> sequence </span><span style="color: #F47067">+</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;     </span><span style="color: #768390">// Increment sequence counter</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (sequence </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">255</span><span style="color: #ADBAC7">) {sequence </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;}</span></span>
<span class="line"><span style="color: #ADBAC7">    byte bufout[] </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> {sequence, brightness};  </span><span style="color: #768390">// Put values in output buffer</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">CAN</span><span style="color: #ADBAC7">.</span><span style="color: #DCBDFB">sendMsgBuf</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0x05</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">, bufout);      </span><span style="color: #768390">// Send the data packet</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;Sent Packet sequence # &quot;</span><span style="color: #ADBAC7">); </span><span style="color: #768390">// Log action</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">for</span><span style="color: #ADBAC7">(int i </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">&lt;</span><span style="color: #6CB6FF">2</span><span style="color: #ADBAC7">; i</span><span style="color: #F47067">++</span><span style="color: #ADBAC7">){</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(bufout[i]);</span></span>
<span class="line"><span style="color: #ADBAC7">      Serial.</span><span style="color: #DCBDFB">print</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&quot;</span><span style="color: #F47067">\t</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">); </span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">    Serial.</span><span style="color: #DCBDFB">println</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);       </span><span style="color: #768390">// slow things down</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="317" height="403" src="https://tutorial45.com/wp-content/uploads/2020/11/CAN_UNO-log.jpg" alt="" class="wp-image-10516" srcset="https://tutorial45.com/wp-content/uploads/2020/11/CAN_UNO-log.jpg 317w, https://tutorial45.com/wp-content/uploads/2020/11/CAN_UNO-log-236x300.jpg 236w" sizes="(max-width: 317px) 100vw, 317px" /></figure>



<h2 class="wp-block-heading">Things to try</h2>



<ul class="wp-block-list">
<li>Try adjusting the delays in the sketches and see what happens in the logs.</li>



<li>Modify the code to send floating point temperature and humidity values.</li>



<li>Add a real potentiometer to the UNO and use it to control the brightness of the LED on the Nano in real time.</li>



<li>Connect a button switch and an LED to each Arduino and try controlling the LEDs across the network.</li>



<li>Add an RGB LED to the Nano and control the color with three potentiometers on the UNO.</li>



<li>Add a display such as an SSD1306 to the Arduino to display the temperature and humidity values received.</li>



<li>Add a DHT22 sensor to the Nano and send real data rather than simulated.</li>



<li>Add additional nodes with more sensors. (If connected to the middle of the data bus they will not need jumpers on J1.)</li>
</ul>



<p class="wp-block-paragraph">I was very pleased to find how easy it was to get Arduinos ‘talking’ to each other with these inexpensive little boards, and I hope you will try them.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tutorial45.com/mcp2515-arduino-project-can-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Learn How to Use a Multimeter Like A Pro</title>
		<link>https://tutorial45.com/how-to-use-a-multimeter-using/</link>
					<comments>https://tutorial45.com/how-to-use-a-multimeter-using/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Andreea]]></dc:creator>
		<pubDate>Mon, 05 Feb 2024 16:42:49 +0000</pubDate>
				<category><![CDATA[Arduino Projects]]></category>
		<guid isPermaLink="false">https://tutorial45.com/?p=10295</guid>

					<description><![CDATA[<p><a href="https://tutorial45.com/how-to-use-a-multimeter-using/">Learn How to Use a Multimeter Like A Pro</a></p>
<p>When you begin creating your own projects, whether using a breadboard or stripboard, you may encounter more complex circuits. You might also make minor mistakes, resulting in projects not functioning as anticipated. This is when you&#8217;ll need to learn how to utilize a multimeter to assist in troubleshooting your project. Your issues could be due ... </p>
<p class="read-more-container"><a title="Learn How to Use a Multimeter Like A Pro" class="read-more button" href="https://tutorial45.com/how-to-use-a-multimeter-using/#more-10295" aria-label="More on Learn How to Use a Multimeter Like A Pro">Read more</a></p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://tutorial45.com/how-to-use-a-multimeter-using/">Learn How to Use a Multimeter Like A Pro</a></p>

<p class="wp-block-paragraph">When you begin creating your own projects, whether using a breadboard or stripboard, you may encounter more complex circuits. You might also make minor mistakes, resulting in projects not functioning as anticipated. This is when you&#8217;ll need to learn how to utilize a multimeter to assist in troubleshooting your project.</p>



<p class="wp-block-paragraph">Your issues could be due to your code or your circuit. These problems could range from why a certain LED light is dim when another is fully lit, or why another LED light will not light up at all. If the issues stem from your circuit, you would likely need to use a multimeter to identify the fault. This tutorial, which is designed for beginners in electronics, will guide you on how to measure voltage, current, and resistance, as well as how to check for continuity.</p>



<p class="wp-block-paragraph"><a href="https://en.wikipedia.org/wiki/Donald_MacAdie" target="_blank" rel="noreferrer noopener">Donald Macadie</a>, a British Post Office engineer who maintained telecommunication equipment early in the 1920s, has been attributed with the invention of a single instrument that could measure amps, volts, and ohms. It was later developed and sold as the AVOmeter – Amps-Volts-Ohms. It contained a moving coil meter and precision resistors with various sockets and switches to select the appropriate mode and range. A mirror behind the needle was included to aid accurate needle readings.</p>



<p class="wp-block-paragraph">This useful tool goes by several other names: multitester, or VOM (volt-ohm-milliammeter). They may be analog <em>(with a moving needle and several scales)</em> or digital with a numeric LCD screen. The digital meters&#8217; lower cost and greater precision have made the analog versions obsolete.</p>



<h2 class="wp-block-heading">Types of Multimeters Available in the Market</h2>



<p class="wp-block-paragraph">Primarily, there are two types of multimeters available in the market- Analog and Digital. The former displays measured values through a needle across a scale, while the latter uses an LED or LCD screen for the same.</p>



<p class="wp-block-paragraph">Analog multimeters have been around for quite a while and are known for accuracy, the capability of reading multiple scales and reading fluctuating trends. On the other hand, digital multimeters are easier to read, more resistant to damage, and have better overall functionality. Each has its benefits, and selection depends on the user&#8217;s requirements.</p>



<h2 class="wp-block-heading">The Analog Multimeter</h2>



<p class="wp-block-paragraph">This is a photograph of my original multimeter, bought in 1977. It still works perfectly.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="363" height="556" src="https://tutorial45.com/wp-content/uploads/2020/08/Analogue-multimeter.jpg" alt="analog multimeter" class="wp-image-10297" srcset="https://tutorial45.com/wp-content/uploads/2020/08/Analogue-multimeter.jpg 363w, https://tutorial45.com/wp-content/uploads/2020/08/Analogue-multimeter-196x300.jpg 196w" sizes="(max-width: 363px) 100vw, 363px" /></figure>
</div>


<p class="wp-block-paragraph">It looks quite complicated with the 4 scales and 6 sets of values applied to the scales. A dial switch is used to select DC voltage (4 ranges), DC (2 ranges), Ohms, and AC voltage (4 ranges). Note the reversed logarithmic resistance scale at the top, while the others are linear, increasing from left to right. </p>



<p class="wp-block-paragraph">Luckily, the new digital meters are much easier to understand and read. Most automatically select the correct range for many readings.</p>



<p class="wp-block-paragraph">The prices vary from about $10 to the thousands for high-precision and accurately calibrated laboratory models.  For our purpose, a multimeter priced at about $25 will do the job perfectly.</p>



<h2 class="wp-block-heading">Using a Digital Multimeter</h2>



<p class="wp-block-paragraph">For this article, I will be using an AstroAI Digital Multimeter DT132A, which I found on Amazon for about £21. It can do all the essentials: read voltages, currents, and resistance and check continuity.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="449" height="616" src="https://tutorial45.com/wp-content/uploads/2020/08/multimeter.jpg" alt="digital multimeter" class="wp-image-10298" srcset="https://tutorial45.com/wp-content/uploads/2020/08/multimeter.jpg 449w, https://tutorial45.com/wp-content/uploads/2020/08/multimeter-219x300.jpg 219w" sizes="(max-width: 449px) 100vw, 449px" /></figure>
</div>


<h3 class="wp-block-heading">Part of a Multimeter</h3>



<p class="wp-block-paragraph">A modern multimeter has four parts:</p>



<ul class="wp-block-list">
<li>Probes – insulated wires with pointed tips</li>



<li>Ports – where the probes plug into the meter</li>



<li>Controls – a rotary selection switch and buttons</li>



<li>Liquid Crystal Display – often with a backlight</li>
</ul>



<p class="wp-block-paragraph">With the meter, you receive two very well-insulated probes colored red and black. These are plugged into the meter with the black lead in COM (common) and the red probe in INPUT. They are wires with user protection/insulation and would work just as well plugged into the opposite sockets. The BLACK probe is normally connected to GND, and the RED is used to read a higher voltage. </p>



<p class="wp-block-paragraph">The tips of these probes can be further exposed by removing their insulating caps. This is not recommended when working with high voltages (dangerous) or closely packed components of different heights to reduce the chances of short circuits. When taking certain readings, you may have to move the RED probe to a different port. (With this meter to measure currents > 200mA the A port should be used. Always read the manual)</p>



<p class="wp-block-paragraph">We will be using the meter with very low voltages, typically 5V or 3.3V, and with very small currents, typically milliamps. Resistance could be anything from 0 to Mega Ohms.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="647" height="404" src="https://tutorial45.com/wp-content/uploads/2020/08/Symbols.jpg" alt="Electrical symbols" class="wp-image-10299" srcset="https://tutorial45.com/wp-content/uploads/2020/08/Symbols.jpg 647w, https://tutorial45.com/wp-content/uploads/2020/08/Symbols-300x187.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/08/Symbols-585x365.jpg 585w" sizes="(max-width: 647px) 100vw, 647px" /></figure>
</div>


<p class="wp-block-paragraph">The display starts up with a very short display of all the symbols available. Other makes and models of multimeters use the same symbols.</p>



<p class="wp-block-paragraph">The third button from the left can be used to turn ON/OFF the display backlight.</p>



<h3 class="wp-block-heading has-large-font-size">The Multimeter Liquid Crystal Display</h3>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="308" height="220" src="https://tutorial45.com/wp-content/uploads/2020/08/multimeter-screen.jpg" alt="Multimeter display" class="wp-image-10300" srcset="https://tutorial45.com/wp-content/uploads/2020/08/multimeter-screen.jpg 308w, https://tutorial45.com/wp-content/uploads/2020/08/multimeter-screen-300x214.jpg 300w" sizes="(max-width: 308px) 100vw, 308px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>Starting at the bottom left,</strong> we have:</p>



<ul class="wp-block-list">
<li>a battery indicator for the internal batteries used for powering the instrument, measuring resistance, and driving the LCD. </li>



<li>AC and the wavy line indicate Alternating Current (from a main powered wall socket <strong>&#8211; Dangerous</strong>).</li>



<li>Minus sign for negative values.</li>



<li>DC with the straight and dotted line indicates Direct Current (from a battery).</li>



<li>APO – Auto Power OFF – saves the internal battery – about 15 minutes.&nbsp;</li>



<li>AUTO – automatic ranging – scaling of units – volts or millivolts, etc – very useful</li>



<li>MAX and MIN – maximum or minimum value over time</li>



<li>H – hold the current value on the display</li>



<li>Diode Test</li>



<li>Continuity Test – with beep</li>



<li>Relative Test</li>



<li>Low battery indicator – change the batteries.</li>
</ul>



<h3 class="wp-block-heading has-large-font-size">Unit measure</h3>



<p class="wp-block-paragraph">Along the bottom, we have the units being measured – left to right</p>



<ul class="wp-block-list">
<li>Temperature in C and F, kilo, Mega, Ohm, Hz, % and micro, milli, Amps, Volts, nano, and Farads.</li>
</ul>



<p class="wp-block-paragraph">This model also included a K-type thermocouple for measuring temperatures. It displays ambient temperature in °C or °F without probes or thermocouples fitted.</p>



<h3 class="wp-block-heading has-large-font-size">The Difference between DC and AC</h3>



<p class="wp-block-paragraph">DC comes from batteries, a USB port, or a rectified power supply (direct current – always flowing in the same direction from positive to negative). AC comes from a dynamo or wall power point (alternating current which switches direction 50 or 60 times a second). It can be very dangerous because the voltage is so high and can provide high current.</p>



<h3 class="wp-block-heading has-large-font-size">Measuring the Voltage of a Battery</h3>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="355" height="480" src="https://tutorial45.com/wp-content/uploads/2020/08/multimeter-battery.jpg" alt="how to use a multimeter to test a battery" class="wp-image-10301" srcset="https://tutorial45.com/wp-content/uploads/2020/08/multimeter-battery.jpg 355w, https://tutorial45.com/wp-content/uploads/2020/08/multimeter-battery-222x300.jpg 222w" sizes="(max-width: 355px) 100vw, 355px" /></figure>
</div>


<p class="wp-block-paragraph">We turn the selector switch one click clockwise from OFF to DC voltage (V with a straight line). The RED probe is pressed to the positive end of the battery and the BLACK probe to the negative end. The voltage is shown, automatically scaled to indicate this battery is only supplying 1.199 volts and should be replaced<strong>. </strong></p>



<p class="wp-block-paragraph"><strong>To read a voltage we put the meter in parallel with the object we are measuring the voltage difference across.</strong></p>



<p class="wp-block-paragraph">If we try a different battery, but put the probes on the wrong ends we get a negative reading but the absolute value is correct.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="355" height="405" src="https://tutorial45.com/wp-content/uploads/2020/08/multimeter-testing-a-battery.jpg" alt="testing a battery with a multimeter" class="wp-image-10302" srcset="https://tutorial45.com/wp-content/uploads/2020/08/multimeter-testing-a-battery.jpg 355w, https://tutorial45.com/wp-content/uploads/2020/08/multimeter-testing-a-battery-263x300.jpg 263w" sizes="(max-width: 355px) 100vw, 355px" /></figure>
</div>


<p class="wp-block-paragraph">Trying again with an old 9V battery.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="524" height="452" src="https://tutorial45.com/wp-content/uploads/2020/08/multimeter-testing-a-9v-battery.jpg" alt="9v battery testing using a multimeter" class="wp-image-10303" srcset="https://tutorial45.com/wp-content/uploads/2020/08/multimeter-testing-a-9v-battery.jpg 524w, https://tutorial45.com/wp-content/uploads/2020/08/multimeter-testing-a-9v-battery-300x259.jpg 300w" sizes="(max-width: 524px) 100vw, 524px" /></figure>
</div>


<p class="wp-block-paragraph">I picked the wrong terminals again but the unsigned value is correct.</p>



<p class="wp-block-paragraph">Notice the AUTO in the top left corner showing that auto ranging is ON. The display was showing millivolts at start-up but quickly changed range automatically.&nbsp;</p>



<p class="wp-block-paragraph">With auto-ranging, the display may take a short time to settle. This is well worth the short delay and is quicker and easier than having to select a different range manually. APO showing indicates that it will Auto Power OFF to save the meter&#8217;s internal battery if I forget to switch it off. This takes about 15 minutes so it is good practice to turn the selector switch back to <strong>OFF</strong> as soon as you have taken the reading.</p>



<h3 class="wp-block-heading has-large-font-size">Reading AC voltages</h3>



<p class="wp-block-paragraph">Turn the rotary selector one more click clockwise to select Alternating Current (V with a wavy line). This is also auto-ranging but starts with Volts.</p>



<p class="wp-block-paragraph">If you really need to check the AC voltage at a wall socket (<strong>this is dangerous</strong> so I do not recommend it) just turn the selector switch to the second position (HzV~) and use the probes very carefully on the live and neutral sockets. Keep your fingers well away from the metal tips of the probes</p>



<h3 class="wp-block-heading has-large-font-size">Measuring Resistance</h3>



<p class="wp-block-paragraph">Turn off and disconnect circuit before checking</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="417" height="370" src="https://tutorial45.com/wp-content/uploads/2020/08/multimeter-lead.jpg" alt="multimeter probes" class="wp-image-10304" srcset="https://tutorial45.com/wp-content/uploads/2020/08/multimeter-lead.jpg 417w, https://tutorial45.com/wp-content/uploads/2020/08/multimeter-lead-300x266.jpg 300w" sizes="(max-width: 417px) 100vw, 417px" /></figure>
</div>


<p class="wp-block-paragraph">In the past I have found a pair of insulated croc-clip wires extremely useful, especially when reading the values of resistors. If you are colour blind, or do not trust yourself to remember the colour codes, it is very easy to find the value of a resistor with your meter.&nbsp; Turn the selector switch to the Ω – Omega – Ohms position. The value will appear on the screen. This one is shown as 0.665 K Ohms = 665 Ohms. The colours were blue, grey, brown &#8211; 680 Ohm – within stated tolerance.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="353" height="323" src="https://tutorial45.com/wp-content/uploads/2020/08/testing-resistor-with-a-multimeter.jpg" alt="wrong way to test resistor" class="wp-image-10305" srcset="https://tutorial45.com/wp-content/uploads/2020/08/testing-resistor-with-a-multimeter.jpg 353w, https://tutorial45.com/wp-content/uploads/2020/08/testing-resistor-with-a-multimeter-300x275.jpg 300w" sizes="(max-width: 353px) 100vw, 353px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="628" height="455" src="https://tutorial45.com/wp-content/uploads/2020/08/resistor2.jpg" alt="right way to use multimeter" class="wp-image-10306" srcset="https://tutorial45.com/wp-content/uploads/2020/08/resistor2.jpg 628w, https://tutorial45.com/wp-content/uploads/2020/08/resistor2-300x217.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/08/resistor2-585x424.jpg 585w" sizes="(max-width: 628px) 100vw, 628px" /></figure>
</div>


<p class="wp-block-paragraph">If you do not have croc-clip wires just use fingers and thumbs to pinch a probe to each end of the resistor wires. If you are measuring a resistor already in a circuit you must turn the power off before measuring.</p>



<h3 class="wp-block-heading has-large-font-size">Checking Continuity</h3>



<p class="wp-block-paragraph">Turn off and disconnect circuit before checking</p>



<p class="wp-block-paragraph">This is related to resistance. Good continuity has very low to zero resistance – the current flows without resistance. If you turn the selector to the resistance position (4 clicks from off) the display should show <strong>0.L M Ω (Overload)</strong>, indicating massive resistance or no connection. </p>



<p class="wp-block-paragraph">If you then touch the ends of the probes together the display will change to zero or 0.1 Ohm indicating no resistance or very good continuity – a good connection. To save you having to keep looking at the screen as you probe a <a href="https://tutorial45.com/understanding-the-different-types-of-circuit-boards/">circuit board</a>, checking if certain pins are properly connected, you can get the meter to beep if there is good continuity. Select resistance with the rotary switch and press the select button until the continuity symbol appears on the screen and the meter beeps. </p>



<p class="wp-block-paragraph">Check by touching the ends of the probes together to get a beep. Hold the probes against the opposite ends of a suspect length of wire. If you get a beep, continuity is good. If the meter remains silent the cable is broken at some point. (This meter will beep if the resistance is less than about 30 Ohms. If you want a really good indication, read the resistance rather than listen for a beep. I have another meter which has a beep threshold of 120 Ohms. Check your manual to find the threshold value for your instrument.)</p>



<p class="wp-block-paragraph">This facility is very useful if you have just had to solder a set of pins onto a new microcontroller board such as an ESP 32 or a small Arduino board. You need to check that there is no continuity between adjacent pins because too much solder has flowed and you have bridged them. Here you set up the meter for continuity and press the probes on the top of each pair of adjacent pins in turn. If you have done a good job you should not get a beep.</p>



<p class="wp-block-paragraph">In a similar manner you can check for a required good connection between a pin on your microcontroller and the leg of a component on a circuit board. (There may be a dry joint or a wrongly positioned cut of a copper track on your board upsetting the connection.)&nbsp;</p>



<p class="wp-block-paragraph">Adjacent copper strips on stripboard circuits should not normally be connected. You can use continuity to check for solder blobs bridging adjacent strips or poorly made breaks in strips, allowing current to flow in the wrong place.&nbsp;</p>



<h3 class="wp-block-heading has-large-font-size">Reading Current</h3>



<p class="wp-block-paragraph">To read a <strong>current your meter must be inserted into the circuit in series</strong> rather than in parallel. Your meter becomes part of the circuit, replacing a connection wire. On a breadboard circuit, this is quite easy to accomplish by replacing a single jumper wire with two and inserting the meter in the join. On a stripboard or printed circuit board, you have to cut a track and insert test point pins for the meter, which can later be joined with a jumper connection once the meter has been removed.</p>



<p class="wp-block-paragraph"> When connecting the meter, you should consider the direction of the current flow. The RED probe would normally be connected to the higher potential. For example, to read the total current flowing through a circuit, break the GND return wire, and connect the BLACK probe nearer to the GND pin on the Arduino and the RED probe towards the circuit board. If you get the polarity wrong you will get a negative reading.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">My meter has three selection positions on the dial for reading current, µA, mA and A. If you expect the current to be greater than 200 mA the RED probe has to be moved from the normal INPUT socket to the A socket, which has a higher rated fuse, and use the A selection on the dial. We will be expecting less than 200 mA, so we can leave it in the INPUT socket and select mA. Check that it defaults to DC.</p>



<h3 class="wp-block-heading has-large-font-size">A Practical Example Project</h3>



<p class="wp-block-paragraph">I’m going to build a simple circuit and read the resistance, and then current and voltage change while it is running. This is a very simple build including a button switch, an LED and two resistors, 10K and 560 Ohm.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="420" height="478" src="https://tutorial45.com/wp-content/uploads/2020/08/breadboard.jpg" alt="circuit" class="wp-image-10307" srcset="https://tutorial45.com/wp-content/uploads/2020/08/breadboard.jpg 420w, https://tutorial45.com/wp-content/uploads/2020/08/breadboard-264x300.jpg 264w" sizes="(max-width: 420px) 100vw, 420px" /></figure>
</div>


<p class="wp-block-paragraph">This circuit shows a 680 Ohm where I used a 560 Ohm resistor, on the right, between the LED and GND. (Fitzing did not have a 560 Ohm resistor available in the bin.)</p>



<p class="wp-block-paragraph">I had previously built it on a stripboard.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="362" height="304" src="https://tutorial45.com/wp-content/uploads/2020/08/circuit.jpg" alt="diy circuit" class="wp-image-10308" srcset="https://tutorial45.com/wp-content/uploads/2020/08/circuit.jpg 362w, https://tutorial45.com/wp-content/uploads/2020/08/circuit-300x252.jpg 300w" sizes="(max-width: 362px) 100vw, 362px" /></figure>
</div>


<p class="wp-block-paragraph">With the circuit not connected to the Arduino, I measured the resistance of the resistors and got 9.89K Ohms for the 10K and 554 Ohms for the 560 Ohm resistor.<em> (Remember that resistors have a tolerance of 5% or 10%. These were both within tolerance)</em>&nbsp;The probes were pressed to the wires at either end of the components.&nbsp;</p>



<p class="wp-block-paragraph">I connected the circuit to the Arduino and ran the following simple script which switches on the LED when the switch is closed. A pull-down 10 K ohm resistor was used so that the switch value was TRUE (1) when pressed. The LED, green wire, was connected to pin 9 and the switch, yellow wire, was connected to pin 8 of the <a href="https://tutorial45.com/first-hand-on-the-arduino-uno-board/">Arduino UNO</a>.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// Multimeter Circuit Testing Project  
// Tony Goodhew - 12 Aug 2020
// Tutorial45.com
// LED with 560 Ohm resistor on pin 9
// Button switch with 10K Ohm pull-down resistor on Pin 8

int LED = 9;     // Green wire
int button = 8;  // Yellow wire

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(button, INPUT);
}

void loop() {
  int button_Value = digitalRead(button); // Read button
  digitalWrite(LED, button_Value);        // Adjust LED
  delay(50);                        
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// Multimeter Circuit Testing Project  </span></span>
<span class="line"><span style="color: #768390">// Tony Goodhew - 12 Aug 2020</span></span>
<span class="line"><span style="color: #768390">// Tutorial45.com</span></span>
<span class="line"><span style="color: #768390">// LED with 560 Ohm resistor on pin 9</span></span>
<span class="line"><span style="color: #768390">// Button switch with 10K Ohm pull-down resistor on Pin 8</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">int </span><span style="color: #6CB6FF">LED</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">9</span><span style="color: #ADBAC7">;     </span><span style="color: #768390">// Green wire</span></span>
<span class="line"><span style="color: #ADBAC7">int button </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">// Yellow wire</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">setup</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">LED</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">OUTPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">pinMode</span><span style="color: #ADBAC7">(button, </span><span style="color: #6CB6FF">INPUT</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F47067">void</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">loop</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">  int button_Value </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">digitalRead</span><span style="color: #ADBAC7">(button); </span><span style="color: #768390">// Read button</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">digitalWrite</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">LED</span><span style="color: #ADBAC7">, button_Value);        </span><span style="color: #768390">// Adjust LED</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">delay</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">);                        </span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<h3 class="wp-block-heading">Resulting Measurements</h3>



<ul class="wp-block-list">
<li>The voltage between the 5V and GND pins was 4.99V without the board connected and this dropped to 4.98 V when the board was connected and the switch open or closed.</li>



<li>The voltage dropped across the 10K Ohm pull-down resistor was 4.98 V as the switch was closed.</li>



<li>With the script running the voltage drop across the 560 Ohm LED resistor was 2.264 V when the LED was ON.</li>



<li>To measure the current flowing through the LED and the 560 Ohm resistor, I put the meter between pin 9 (RED probe) and the green wire (BLACK probe) and found that the current was 4.09 milliamps.</li>



<li>To measure the current of the whole board I put the meter between the black wire (RED probe) and the Arduino GND pin (BLACK probe) and got 4.59 milliamps.</li>



<li>An LED is a diode so with the circuit unpowered and disconnected from the Arduino I put the RED probe on the end of the green wire, LED anode, and the BLACK probe on the cathode of the LED, then selected the diode option with the selection switch and button. The reading was 2.299 V &#8211;  approximate forward voltage of the LED.</li>
</ul>



<h2 class="wp-block-heading">Conclusions</h2>



<p class="wp-block-paragraph">I have always found access to a multimeter very useful. How do I use it?</p>



<ul class="wp-block-list">
<li>Checking the state of batteries – OK, recharge, or replace?</li>



<li>Checking the value of resistors before I solder them in place.</li>



<li>Continuity checking after soldering or fault-finding. Is there a good connection between these two points?</li>



<li>Eliminating unwanted connections because of an excess of solder or poor copper strip cutting when making, or forgetting to make, an essential break in a track.</li>



<li>I hardly ever measure a current.&nbsp;&nbsp;</li>
</ul>



<h3 class="wp-block-heading has-large-font-size">Final Thoughts</h3>



<ul class="wp-block-list">
<li>The instruction manual that comes with your meter is a vital source of information, and you should read it carefully in case your meter differs slightly in its ways of working from mine. (Why is the print always so small?  This is much easier to read: <a href="https://static.astroai.com/manual/Astroai-Digital-Multimeter,-Trms-4000-Counts-User-Manual.pdf" target="_blank" rel="noreferrer noopener nofollow">https://static.astroai.com/manual/Astroai-Digital-Multimeter,-Trms-4000-Counts-User-Manual.pdf</a>  so download a pdf version of your manual, if available.)</li>



<li>Be very careful when working with 120 or 240V AC. It can KILL!</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://tutorial45.com/how-to-use-a-multimeter-using/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino MOSFET Project</title>
		<link>https://tutorial45.com/arduino-mosfet-project/</link>
					<comments>https://tutorial45.com/arduino-mosfet-project/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikodem Bartnik]]></dc:creator>
		<pubDate>Tue, 16 Jan 2024 07:32:07 +0000</pubDate>
				<category><![CDATA[Arduino Projects]]></category>
		<guid isPermaLink="false">http://tutorial45.com/?p=6499</guid>

					<description><![CDATA[<p><a href="https://tutorial45.com/arduino-mosfet-project/">Arduino MOSFET Project</a></p>
<p>If you&#8217;re familiar with Arduino, you&#8217;re likely aware of the frequent need to incorporate motors into projects, especially those involving robotics. In a previous tutorial, we discussed using a transistor to control small motors. But what if you find yourself needing to control a larger motor? The solution to this requirement lies in using a ... </p>
<p class="read-more-container"><a title="Arduino MOSFET Project" class="read-more button" href="https://tutorial45.com/arduino-mosfet-project/#more-6499" aria-label="More on Arduino MOSFET Project">Read more</a></p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://tutorial45.com/arduino-mosfet-project/">Arduino MOSFET Project</a></p>

<p class="wp-block-paragraph">If you&#8217;re familiar with Arduino, you&#8217;re likely aware of the frequent need to incorporate motors into projects, especially those involving robotics. In a <a href="http://tutorial45.com/arduino-projects-arduino-dc-motor-control/">previous tutorial</a>, we discussed using a transistor to control small motors. But what if you find yourself needing to control a larger motor? The solution to this requirement lies in using a MOSFET. As defined by Wikipedia:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">A type of field-effect transistor (FET). It has an insulated gate, whose voltage&nbsp;determines the conductivity of the device. This ability to change conductivity with the&nbsp;amount of applied voltage can be used for amplifying or switching electronic signals.</p>
</blockquote>



<p class="wp-block-paragraph">Put simply, a MOSFET is a specific type of transistor that employs a Gate rather than a Base (contrary to the bipolar transistor). Notably, the Gate in a MOSFET is isolated, rendering it considerably safer for use with Arduino. While there is more to the intricacies of MOSFETs, we won&#8217;t delve into those details in this session. For our purposes, we&#8217;ll be working with the IRF44N MOSFET, a highly economical and widely used field-effect transistor.</p>



<h2 class="wp-block-heading">Arduino&nbsp;Mosfet</h2>


<div class="wp-block-image">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="800" height="600" src="http://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-6.jpg" alt="mosfet" class="wp-image-6500" srcset="https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-6.jpg 800w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-6-300x225.jpg 300w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-6-768x576.jpg 768w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-6-320x240.jpg 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>


<p class="wp-block-paragraph">Here is the list of parts we will need for this project:</p>


<div class="wp-block-image">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="800" height="600" src="http://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-7.jpg" alt="" class="wp-image-6501" srcset="https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-7.jpg 800w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-7-300x225.jpg 300w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-7-768x576.jpg 768w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-7-320x240.jpg 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>


<ul class="wp-block-list">
<li><a href="http://amzn.to/2jvO3ln" target="_blank" rel="nofollow noopener noreferrer">1 x Arduino Uno board</a></li>



<li><a href="http://amzn.to/2ne560m" target="_blank" rel="nofollow noopener noreferrer">1 x IRF44N MOSFET</a></li>



<li><a href="http://amzn.to/2jvozVa" target="_blank" rel="nofollow noopener noreferrer">1 x 775 motor</a> (or other)</li>



<li><a href="http://amzn.to/2AkmyFY" target="_blank" rel="nofollow noopener noreferrer">1 x Breadboard</a></li>



<li><a href="http://amzn.to/2ncyjJ2" target="_blank" rel="nofollow noopener noreferrer">1 x jumper wires</a></li>



<li>1 x 12V power supply</li>
</ul>



<p class="wp-block-paragraph">You can use any other transistor, check out its pinout and datasheet to ensure that it can be used with the rating <a href="https://tutorial45.com/cad-projects-for-beginners/">needed for this project</a>.</p>



<p class="wp-block-paragraph">If you have all of the components that we need, you can connect them using the schematic below.</p>


<div class="wp-block-image">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="829" height="778" src="http://tutorial45.com/wp-content/uploads/2017/10/schematic-2.png" alt="arduino mosfet diagram" class="wp-image-6502" srcset="https://tutorial45.com/wp-content/uploads/2017/10/schematic-2.png 829w, https://tutorial45.com/wp-content/uploads/2017/10/schematic-2-300x282.png 300w, https://tutorial45.com/wp-content/uploads/2017/10/schematic-2-768x721.png 768w" sizes="(max-width: 829px) 100vw, 829px" /></figure>
</div>


<p class="wp-block-paragraph">To power this circuit, we need an external power supply of 12V, but a 9V should be ok as well. You can connect it to Arduino with the DC jack.</p>



<p class="wp-block-paragraph">It is very useful to use cables with crocodile clips to connect jumpers to the motor; they will hold safely and help you avoid soldering.</p>


<div class="wp-block-image">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="800" height="600" src="http://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-2.jpg" alt="Connecting Arduino with a mosfet" class="wp-image-6503" srcset="https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-2.jpg 800w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-2-300x225.jpg 300w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-2-768x576.jpg 768w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-2-320x240.jpg 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>


<p class="wp-block-paragraph"></p>


<div class="wp-block-image">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="800" height="600" src="http://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-3.jpg" alt="arduino mosfet project" class="wp-image-6504" srcset="https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-3.jpg 800w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-3-300x225.jpg 300w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-3-768x576.jpg 768w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-3-320x240.jpg 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>


<p class="wp-block-paragraph"></p>


<div class="wp-block-image">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="800" height="600" src="http://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-5.jpg" alt="arduino mosfet" class="wp-image-6505" srcset="https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-5.jpg 800w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-5-300x225.jpg 300w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-5-768x576.jpg 768w, https://tutorial45.com/wp-content/uploads/2017/10/Arduino-mosfet-5-320x240.jpg 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>


<p class="wp-block-paragraph">We can use the analogWrite function to control the motor speed with a PWN signal.</p>



<p class="wp-block-paragraph">If you use a relay to control your motor, you will not be able to control it with the PWM signal. Relay responses will be too slow for such applications.</p>



<p class="wp-block-paragraph">The code will increase the motor speed, slow it down, and do that over and over again. Here is the code:</p>



<script src="https://gist.github.com/Tchoukoualeu/8154b1c1289699e37430a8a59898b80d.js"></script>



<p class="wp-block-paragraph">As you can hear, when it is not moving, it makes odd sounds. That’s because of the current that flows through the motor coils.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Arduino Mosfet project" width="800" height="450" src="https://www.youtube.com/embed/P9iCo0WSaxE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph">And here we go! Don&#8217;t hesitate to comment below if you need further information about this project.</p>



<p class="wp-block-paragraph">Feel free to check <a href="http://tutorial45.com/arduino-projects-beginners/">other projects here</a>.</p>



<h2 class="wp-block-heading">You might also like:</h2>



<ul class="wp-block-list"><li><a href="https://tutorial45.com/arduino-projects-hx711-module/">Arduino hx711 tutorial</a></li><li><a href="https://tutorial45.com/magnetic-contact-switch-arduino-project/">Arduino magnetic switch</a></li><li><a href="https://tutorial45.com/best-arduino-starter-kits/">Best Arduino Kits</a></li><li><a href="https://tutorial45.com/13-inexpensive-gift-ideas-for-engineering-students/">gifts for engineering students</a></li><li><a href="https://tutorial45.com/gifts-for-engineers/">gifts for engineers</a></li><li><a href="https://tutorial45.com/mpu6050-arduino-project/">mpu6050 Arduino projects</a></li><li><a href="https://tutorial45.com/arduino-current-sensor-project/">Current sensor Arduino</a></li><li><a href="https://tutorial45.com/soil-moisture-sensor-arduino/">Soil Moisture Sensor With Arduino</a></li><li><a href="https://tutorial45.com/arduino-count-up-timer-using-the-nokia/">Arduino Count up Timer Using the Nokia 5110 LCD</a></li><li><a href="https://tutorial45.com/arduino-yun-integrating-juxtaposing-arduino-linux/">Arduino Yun: Integrating or Juxtaposing Arduino with Linux</a></li><li><a href="https://tutorial45.com/line-follower-robot-arduino/">Arduino Projects: Line Follower Robot</a></li><li><a href="https://tutorial45.com/arduino-rfid-project-beginners/"><a href="https://tutorial45.com/arduino-rfid-project-beginners/">Arduino RFID Projects</a></a></li><li><a href="https://tutorial45.com/which-arduino-to-buy/">Which Arduino Should You Buy</a></li><li><a href="https://tutorial45.com/what-can-you-do-with-arduino-boards/">What Can You Do With Arduino Boards?</a></li><li><a href="https://tutorial45.com/arduino-alternatives/">Great Alternatives to the Arduino Microcontroller</a></li><li><a href="https://tutorial45.com/arduino-color-sensor-arduino/">Arduino Projects: Color Sensor</a></li><li><a href="https://tutorial45.com/arduino-ide-alternative/">Arduino IDE Alternatives</a></li><li><a href="https://tutorial45.com/comparing-microcontrollers-arduino-mega-vs-uno/">Arduino Mega vs. Uno</a></li><li><a href="https://tutorial45.com/arduino-projects-arduino-lcd-display/">Arduino Projects: Arduino LCD Display</a></li><li><a href="https://tutorial45.com/arduino-projects-read-arduino-rotary-encoders/">Read Arduino Rotary Encoders</a></li><li><a href="https://tutorial45.com/arduino-simulator-emulator/">A Selection of the Best Arduino Simulators</a></li><li><a href="https://tutorial45.com/arduino-ir-receiver/">Arduino Projects: IR Receiver</a></li><li><a href="https://tutorial45.com/arduino-light-sensor-project/">Arduino Light Sensor Project</a></li><li><a href="https://tutorial45.com/arduino-projects-arduino-decibel-meter/">Arduino Projects: Arduino Decibel Meter</a></li><li><a href="https://tutorial45.com/arduino-stopwatch-project/">Arduino Stopwatch Project</a></li><li><a href="https://tutorial45.com/arduino-bluetooth-rc-car-project/">Arduino Bluetooth RC Car Project</a></li><li><a href="https://tutorial45.com/arduino-temperature-logger-project/">Arduino Temperature Logger Project</a></li><li><a href="https://tutorial45.com/arduino-7-segment-display/">Arduino Projects: Arduino 7 Segment Display</a></li><li><a href="https://tutorial45.com/arduino-projects-clap-clap-off-light/">Arduino Projects: Clap ON Clap OFF Light</a></li><li><a href="https://tutorial45.com/arduino-relay-project/">Arduino Relay Project</a></li><li><a href="https://tutorial45.com/install-arduino-library/">Install a Library Onto the Arduino IDE</a></li><li><a href="https://tutorial45.com/arduino-projects-rainfall-detector/">Arduino Projects: Rainfall Detector</a></li><li><a href="https://tutorial45.com/arduino-projects-rgb-led-arduino-controller/">Arduino Projects: RGB LED Arduino</a></li><li><a href="https://tutorial45.com/arduino-stepper-motor-project/">Arduino Stepper Motor Project</a></li><li><a href="https://tutorial45.com/arduino-projects-arduino-dc-motor-control/">Arduino Projects: Arduino DC Motor Control</a></li><li><a href="https://tutorial45.com/arduino-robot-kit-kits-list/">The Top Affordable Arduino Robot Kit</a></li><li><a href="https://tutorial45.com/arduino-3d-printed-case-arduino-uno-case/">Arduino 3D Printed Case</a></li><li><a href="https://tutorial45.com/arduino-projects-arduino-simple-led-projects/">Arduino Projects: Asynchronous LEDs Blink</a></li><li><a href="https://tutorial45.com/arduino-project-ultrasonic-distance-sensor/">Arduino Projects: Ultrasonic Distance Sensor</a></li><li><a href="https://tutorial45.com/arduino-led-projects-led-cube/">Arduino Projects: LED – 4X4X4 LED Cube</a></li><li><a href="https://tutorial45.com/arduino-car-projects-build-obstacle-avoiding-robot-less-30/">Arduino Car Projects: Build an Obstacle Avoiding Robot With Less Than $30</a></li><li><a href="https://tutorial45.com/arduino-potentiometer-projects-for-beginners/">Arduino Projects: Servo Potentiometer Control</a></li><li><a href="https://tutorial45.com/arduino-led-project-knight-rider/">Arduino LED Project: Knight Rider</a></li><li><a href="https://tutorial45.com/arduino-pir-motion-sensor/">Arduino Projects: PIR Motion Sensor</a></li><li><a href="https://tutorial45.com/difference-between-arduino-and-raspberry-pi/">The Difference between Arduino and Raspberry Pi</a></li><li><a href="https://tutorial45.com/books-for-engineers/">Top 9 Books Every Engineer Should Read</a></li><li><a href="https://tutorial45.com/top-used-sensors-for-arduino/">Top Used Sensors for Arduino</a></li><li><a href="https://tutorial45.com/first-hand-on-the-arduino-uno-board/">First Hand on the Arduino Uno Board</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://tutorial45.com/arduino-mosfet-project/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Communication With the nrf24L01</title>
		<link>https://tutorial45.com/arduino-with-nrf24l01/</link>
					<comments>https://tutorial45.com/arduino-with-nrf24l01/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Andreea]]></dc:creator>
		<pubDate>Sun, 21 Jun 2020 22:24:25 +0000</pubDate>
				<category><![CDATA[Arduino Projects]]></category>
		<guid isPermaLink="false">https://tutorial45.com/?p=10006</guid>

					<description><![CDATA[<p><a href="https://tutorial45.com/arduino-with-nrf24l01/">Arduino Communication With the nrf24L01</a></p>
<p>At some point, most Arduino owners will decide that their next project requires communication between two of their microcontroller boards. You might want to control a long strip of NeoPixels decorating your room from the comfort of your armchair without tripping over cables or read the temperature and humidity of your greenhouse without putting on ... </p>
<p class="read-more-container"><a title="Arduino Communication With the nrf24L01" class="read-more button" href="https://tutorial45.com/arduino-with-nrf24l01/#more-10006" aria-label="More on Arduino Communication With the nrf24L01">Read more</a></p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://tutorial45.com/arduino-with-nrf24l01/">Arduino Communication With the nrf24L01</a></p>

<p class="wp-block-paragraph">At some point, most Arduino owners will decide that their next project requires communication between two of their microcontroller boards. You might want to control a long strip of NeoPixels decorating your room from the comfort of your armchair without tripping over cables or read the temperature and humidity of your greenhouse without putting on a coat and wandering up the garden. Another use may be to control a floor robot from a handheld home-built controller with a joystick and buttons. This article explains how to set up two Arduinos with nrf24L01 transceiver modules so that they can ‘talk’ to each other and provides a starting point for such projects.</p>



<p class="wp-block-paragraph">In this piece, I’m going to explain what the nrf24L01 does and how it is connected to your Arduino. I’ll also compare a couple of alternative devices and then move on to two small demonstration projects.</p>



<h2 class="wp-block-heading"> The NRF24L01</h2>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://tutorial45.com/wp-content/uploads/2020/06/arduino-with-nrf24l01-1.jpg" alt="nrf24L01" class="wp-image-10009" width="415" height="322" srcset="https://tutorial45.com/wp-content/uploads/2020/06/arduino-with-nrf24l01-1.jpg 800w, https://tutorial45.com/wp-content/uploads/2020/06/arduino-with-nrf24l01-1-300x233.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/06/arduino-with-nrf24l01-1-768x596.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/06/arduino-with-nrf24l01-1-585x454.jpg 585w" sizes="(max-width: 415px) 100vw, 415px" /></figure></div>



<p class="wp-block-paragraph">This is a radio Transceiver (it both transmits and receives) which operates on the 2.4 GHz Industrial, Scientific and Medical bands. It has a very good range, low power consumption, is cheap to buy, readily available and has several <a href="https://tutorial45.com/install-arduino-library/">Arduino libraries</a> available. Nordic call it a 6 data pipe MultiCeiver because it can listen to up to 6 other devices at once and transmit to them one at a time.</p>



<p class="wp-block-paragraph">It can transmit at 250bps, 1Mbps and 2Mbps on-air rates with a choice between 125 channels (1 … 125). The board contains a transceiver chip from Nordic Semiconductor, a crystal, an antenna, a few support components, and 8 connection pins. The user can adjust the power of the transmission to one of four levels, (MIN, LOW, HIGH, and MAX) depending on the range required. Possibly up to 100m outdoors. There is an on-chip voltage regulator that needs a supply voltage of between 1.9 and 3.6V on the VCC pin. It is a 3V device and the <strong>VCC pin must not be connected to 5V</strong>. The other logic input pins are 5V tolerant which makes things much easier.&nbsp;</p>



<p class="wp-block-paragraph">The main downside is that the connection pins on the underside of the board are breadboard hostile. (The 2&#215;4 arrangement of the pins would short out connections.) You have to use Dupont jumper wires to connect it up to an Arduino. Recently a 5V <a href="https://tutorial45.com/arduino-shields-for-arduino/" >small shield</a> board has become available which drops the voltage from 5V on your Arduino to 3.3V for the nrf24L01. It has an LED to indicate it is receiving power and the connection pins have labels. (More on using the <a href="https://amzn.to/3129MZJ" target="_blank" rel="nofollow noopener noreferrer"><strong>NRF24L01 Wireless RF Transceiver Socket Adapter Board with 3.3v Regulator</strong></a> later but if you have not yet bought your nrf24L01s I suggest you pick up shields at the same time.)&nbsp;</p>



<p class="wp-block-paragraph">This chip automatically carries out the assembly of a data packet, its transmission and the checking of an acknowledgement reply from the receiver. It can automatically try resending the data (15 times is the default) if there was an error highlighted by the CRC check on the data received or no ACK received. Nordic call this “Enhanced ShockBurst”.</p>



<p class="wp-block-paragraph">Each packet is made up of:</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Preamble</strong></td><td><strong>Address</strong></td><td><strong>Packet Control Field</strong></td><td><strong>Payload</strong></td><td><strong>CRC</strong></td></tr><tr><td>1 byte</td><td>3 – 5 bytes</td><td>9 bytes</td><td>0 – 32 bytes</td><td>1 – 2 bytes</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">The documentation for the chip can be found<a href="https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf" target="_blank" rel="noreferrer noopener"> here</a>:</p>



<p class="wp-block-paragraph">I found it very interesting and am thankful that several generous people have shared their Arduino libraries for our benefit. The work involved must have been considerable. You get a great deal of Bang for your Buck with these boards.</p>



<p class="wp-block-paragraph">Other devices you might consider:&nbsp;</p>



<h3 class="wp-block-heading">433 MHz General RF receive and send pairs</h3>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://tutorial45.com/wp-content/uploads/2020/06/433-MHz-RF.jpg" alt="433 MHz General RF receive and send pairs" class="wp-image-10014" width="589" height="289" srcset="https://tutorial45.com/wp-content/uploads/2020/06/433-MHz-RF.jpg 589w, https://tutorial45.com/wp-content/uploads/2020/06/433-MHz-RF-300x147.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/06/433-MHz-RF-585x287.jpg 585w" sizes="(max-width: 589px) 100vw, 589px" /></figure></div>



<p class="wp-block-paragraph">These are cheap, very basic, but no longer so readily available as more modern alternatives. The more recent drivers/libraries than the early VirtualWire library such as Radiohead are better but still have quite a steep learning curve. You have to build your own packets of data, add identifiers to your packet information, and carry out acknowledgment data of packets and any integrity checking. The soldered-on antenna wires get in the way. I have had success with these in the past. These are in a similar price bracket to the nrf24L01.</p>



<h3 class="wp-block-heading">Bluetooth</h3>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="630" height="361" src="https://tutorial45.com/wp-content/uploads/2020/06/Bluetooth-1.jpg" alt="Bluetooth" class="wp-image-10016" srcset="https://tutorial45.com/wp-content/uploads/2020/06/Bluetooth-1.jpg 630w, https://tutorial45.com/wp-content/uploads/2020/06/Bluetooth-1-300x172.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/06/Bluetooth-1-585x335.jpg 585w" sizes="(max-width: 630px) 100vw, 630px" /></figure></div>



<p class="wp-block-paragraph">This system is now increasing in popularity, but it will seldom be an inexpensive route. There is currently a great deal of ongoing development and you can easily connect to your phone/tablet via free <a href="https://tutorial45.com/best-android-calendar-apps/">downloadable apps</a>. Adafruit have included the BLE technology in many of their boards which are Arduino IDE and CircuitPython compatible. I’ve used CircuitPython, but not Arduino, on these devices and found them quite simple to set up. If you want an official Arduino with radio you could try an Arduino Nano 33 IoT or Arduino MKR WiFi. Unfortunately, the range of BLE (Bluetooth Low Energy) devices is quite short.</p>



<p class="wp-block-paragraph">After looking at these three possibilities the nrf24L01 system would appear to be the most versatile and cost effective.</p>



<h2 class="wp-block-heading">Connecting up an Arduino with nrf24L01</h2>



<p class="wp-block-paragraph">This is a Serial Peripheral Interface (SPI) device and has eight pins. We will need M-F DuPont cables to make the connections to an Arduino.</p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://tutorial45.com/wp-content/uploads/2020/06/2-1024x538.jpg" alt="nrf24L01" class="wp-image-10024" width="312" height="163" srcset="https://tutorial45.com/wp-content/uploads/2020/06/2-1024x538.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/06/2-300x158.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/06/2-768x404.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/06/2-585x307.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/06/2.jpg 1058w" sizes="(max-width: 312px) 100vw, 312px" /></figure></div>



<p class="wp-block-paragraph">Looking at the top of the device and working round clockwise from the top right, orange pin</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Wire</strong></td><td><strong>Pin name</strong></td><td><strong>UNO pin</strong></td></tr><tr><td>Orange</td><td>VCC – <strong>3V NOT 5V</strong></td><td>3V</td></tr><tr><td>Yellow</td><td>CSN</td><td>8 or other</td></tr><tr><td>Green</td><td>MOSI</td><td>11 SPI</td></tr><tr><td>Silver</td><td>IRQ</td><td>Not connected</td></tr><tr><td>Grey</td><td>MISO</td><td>12 SPI</td></tr><tr><td>Purple</td><td>SCK</td><td>13 SPI</td></tr><tr><td>Blue</td><td>CE</td><td>7 or other</td></tr><tr><td>Black</td><td>GND</td><td>GND</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Unfortunately, this uses up the built in LED on pin 13.</p>



<p class="wp-block-paragraph">Other Arduino boards, such as a Mega or Piksey Atto have their SPI connections (MISO, MOSI &amp; SCK) on different pins. Please check before connecting up if you are not <a href="https://tutorial45.com/first-hand-on-the-arduino-uno-board/">using an UNO</a>.</p>



<p class="wp-block-paragraph">Be very careful not to connect VCC to 5V as this will kill the radio chip. We will need to set up two Arduinos with their RF24s. On one of the Arduinos, I have also installed a 10K Ohm <a href="https://tutorial45.com/arduino-potentiometer-projects-for-beginners/">potentiometer to provide a variable input for the projects</a>.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="723" height="692" src="https://tutorial45.com/wp-content/uploads/2020/06/pictoriel.jpg" alt="pictoriel arduino project" class="wp-image-10017" srcset="https://tutorial45.com/wp-content/uploads/2020/06/pictoriel.jpg 723w, https://tutorial45.com/wp-content/uploads/2020/06/pictoriel-300x287.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/06/pictoriel-585x560.jpg 585w" sizes="(max-width: 723px) 100vw, 723px" /></figure></div>



<p class="wp-block-paragraph">The next step is to install the RF24 library. Start the Arduino IDE. Go to Tools 🡺 Manage Libraries… Type ‘RF24’ into the top right box and press &lt;Return&gt;. There are several different libraries available so scroll down to the one <strong>‘by TMRh20 version 1.3.4’</strong> and then click on install. This one is said to be simple for beginners and has plenty of examples. You can find the examples from the menu via File 🡺 Examples 🡺 RF24. They are long, well-spaced and with plenty of comments.</p>



<h3 class="wp-block-heading">Test the setup</h3>



<p class="wp-block-paragraph">The first example tests that we have all the items set up correctly. It demonstrates a simple, one-way transmission of a single integer from one Arduino to another, (a ‘Boss’ and ‘Subordinate’ setup) and we can check that we understand the basics, everything is connected together properly and working reliably. The second will allow two-way communication with multiple values transmitted between them.</p>



<h2 class="wp-block-heading">Project #1: Display the value from a potentiometer on one Arduino on the Serial Monitor of another Arduino.</h2>



<h3 class="wp-block-heading">Components required</h3>



<ul class="wp-block-list"><li>2 Arduinos with USB cables</li><li>2 nrf24L01s</li><li>1 10K Ohm potentiometer</li><li>Breadboard or stripboard</li><li>DuPont cables (M-F) and connecting wire</li></ul>



<p class="wp-block-paragraph">Assemble the components as shown in the previous Fritzing schematic.</p>



<p class="wp-block-paragraph">We now need to connect our Arduinos to our PC so that we can program them with the Arduino IDE. The Arduino on the right side of the desk, with the potentiometer (‘Boss’), is going to send data to the other Arduino on the left side of the disk (‘Subordinate’). Start up the Arduino IDE, drag it to the right-hand side of your screen and plug the ‘Boss’ into the right most available USB port. Set the board type, check the port you are using, mine was COM 29.</p>



<p class="wp-block-paragraph">Start another instance of the Arduino IDE, directly from the Start Menu. <strong>Do not open another window from the File menu of the first instance. </strong>Plugin the ‘Subordinate’ Arduino to the leftmost USB port. Drag this editor window to the left side of your screen, Look in Tools 🡺 Port and you should see two ports listed. Select the new port. Mine was COM 27.</p>



<p class="wp-block-paragraph">This does not always work the first time but it is essential that both instances of the Arduino IDE have different ports.</p>



<p class="wp-block-paragraph">Copy and paste the first script into the Boss and second into the Subordinate. Compile both scripts, upload and open the Serial Monitors and adjust the baud rate if necessary. As you twist the top of the potentiometer you should see the value change in both monitor windows.</p>



<h3 class="wp-block-heading">Send Test script for Arduino with Potentiometer</h3>



<pre class="wp-block-preformatted">// 'Boss' computer sending messages to 'subordinate' via nrf24L01
// File name: Send_Test paired with Received_Test - Tony Goodhew 17 June 2020
#include &lt;SPI.h&gt;&nbsp;&nbsp;
#include "RF24.h"

RF24 myRadio (7, 8);&nbsp; &nbsp; &nbsp; // These can be changed CE, CSN
byte addrs[][6] = {"T"};&nbsp; // Data pipe to send on
int potPin = A0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 10K Ohm pot for changing input

void setup() {
&nbsp;&nbsp;Serial.begin(115200);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Start Serial Monitor
&nbsp;&nbsp;delay(1000);
&nbsp;&nbsp;// Set up the radio
&nbsp;&nbsp;myRadio.begin(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Start radio
&nbsp;&nbsp;myRadio.setChannel(100); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Could be changed 1 ... 125
&nbsp;&nbsp;myRadio.setPALevel(RF24_PA_MIN); &nbsp; &nbsp; &nbsp; // Power level minimum - radios are close together
&nbsp;&nbsp;myRadio.setDataRate( RF24_250KBPS );
&nbsp;&nbsp;myRadio.openWritingPipe( addrs[0]);&nbsp; &nbsp; // Write to pipe called "T"
&nbsp;&nbsp;delay(750);
}

void loop() {
&nbsp;&nbsp;// Get current values
&nbsp;&nbsp;int potValue = analogRead(potPin); &nbsp; // Read Pot value
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;// Send the packet of data called data1 to Subordinate
&nbsp;&nbsp;myRadio.write(&amp;potValue, sizeof(potValue));&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;// Report sent values to Monitor
&nbsp;&nbsp;Serial.print("Sent: ");
&nbsp;&nbsp;Serial.println(potValue);
&nbsp;&nbsp;delay(800);
}&nbsp;</pre>



<h3 class="wp-block-heading">Additional notes</h3>



<p class="wp-block-paragraph">At the top we include the necessary libraries, initialise myRadio by providing the pin numbers for CE and CSN and tell the script where the potentiometer is connected.</p>



<p class="wp-block-paragraph">In the setup routine:</p>



<ol class="wp-block-list"><li>We start the Serial Monitor at 115200 baud, and select the settings for the radio:</li><li>Channel at 100 (Any value from 1 to 125)</li><li>Power of transmission MIN, (LOW, HIGH or MAX) as both transducers are close together</li><li>DataRate 250KBPS (1MBPS or 2MBPS)</li><li>Open the WRITE pipe: “T”</li><li>Pause for this to be set up</li></ol>



<p class="wp-block-paragraph">In the loop:</p>



<ol class="wp-block-list"><li>Read the value of the potentiometer</li><li>Write the potValue and its size(bytes) to the radio</li><li>Print the potValue to the Serial Monitor</li><li>Short delay</li></ol>



<h3 class="wp-block-heading">Receive test for Arduino without potentiometer</h3>



<pre class="wp-block-preformatted">// 'Subordinate' receiving messages from 'Boss' via nrf2401
// File name: Receive_Test to be paired with Send_Test - Tony Goodhew 17 June 2020
#include &lt;SPI.h&gt;&nbsp;&nbsp;
#include "RF24.h"&nbsp;

RF24 myRadio (7, 8);&nbsp;
byte addrs[][6] = {"T"}; // Data pipe
int x = 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Variable to hold received data

void setup() {
&nbsp;&nbsp;Serial.begin(115200); // Start Serial Monitor
&nbsp;&nbsp;delay(1000);
&nbsp;&nbsp;// Set up the radio
&nbsp;&nbsp;myRadio.begin(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Start radio
&nbsp;&nbsp;myRadio.setChannel(100);&nbsp;
&nbsp;&nbsp;myRadio.setPALevel(RF24_PA_MIN); &nbsp; &nbsp; &nbsp; // radios are close together
&nbsp;&nbsp;myRadio.setDataRate( RF24_250KBPS );&nbsp;
&nbsp;&nbsp;myRadio.openReadingPipe(1, addrs[0]);&nbsp; // Read from pipe called "T"
&nbsp;&nbsp;myRadio.startListening();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Listen for signal from Boss
}

void loop()&nbsp; {
&nbsp;&nbsp;if (myRadio.available()) {
&nbsp;&nbsp;&nbsp;&nbsp;while (myRadio.available()) { &nbsp; &nbsp; &nbsp; &nbsp; // Picked up transmission from Boss
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRadio.read(&amp;x, sizeof(x)); &nbsp; &nbsp; // Get the values from radio buffer
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;// Print package contents to Monitor for checking
&nbsp;&nbsp;&nbsp;&nbsp;Serial.print("Received: ");
&nbsp;&nbsp;&nbsp;&nbsp;Serial.println(x);
&nbsp;&nbsp;}
}</pre>



<h3 class="wp-block-heading">Additional Notes</h3>



<p class="wp-block-paragraph">The first part mainly matches the sending script but we initialise an integer variable x to receive the value being sent from the pot.</p>



<p class="wp-block-paragraph">The setup sequence is similar but we need to open a READING pipe. Note the additional 1 in the brackets. We then start listening for a radio signal.</p>



<p class="wp-block-paragraph">The main loop waits for a radio signal, reads the value sent, stores it in the variable x and prints it to the Serial Monitor.&nbsp;</p>



<p class="wp-block-paragraph">Now we have this working we can take the complexity up a notch. If you cannot get this to work look at the end of the article for additional help with problems.</p>



<h2 class="wp-block-heading">Project #2: Send multiple data items in a packet using Arduino with nrf24L01</h2>



<p class="wp-block-paragraph">The basic outline is the same but we have to send multiple values, of different types in a packet called data1. I have included two integers, a floating-point value and a message string. Twist the knob on the potentiometer to change the values sent.</p>



<h3 class="wp-block-heading">Script for the transmitting from the Arduino board with the potentiometer on A0</h3>



<pre class="wp-block-preformatted">// 'Boss' computer sending messages to 'subordinate' via nrf24L01
// File name: RF_send3 paired with RF_receive3 - Tony Goodhew 17 June 2020
#include &lt;SPI.h&gt;&nbsp;&nbsp;
#include "RF24.h"

RF24 myRadio (7, 8);&nbsp; &nbsp; &nbsp; // These can be changed CE CSN
byte addrs[][6] = {"T"};&nbsp; // Single data1 pipe to send on
int potPin = A0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 10K Ohm pot for changing input

struct package {&nbsp; &nbsp; &nbsp; &nbsp; // Define the data1 packet contents
&nbsp;&nbsp;int pktNo = 0;&nbsp; &nbsp; &nbsp; &nbsp; // Count and identify packets sent
&nbsp;&nbsp;int rawPot = 0; &nbsp; &nbsp; &nbsp; // 0 .. 1023 from 10K Ohm potentiometer
&nbsp;&nbsp;float perCent = 0.0;&nbsp; // floating point value
&nbsp;&nbsp;char msg[50] = "Here is a MESSAGE";&nbsp; // Text string - Not changing
};
typedef struct package Package;&nbsp;&nbsp;
Package data1; &nbsp; // Package named data1 contains pktNo, rawPot, perPot, perCent &amp; msg

void setup() {
&nbsp;&nbsp;Serial.begin(115200);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Start Serial Monitor
&nbsp;&nbsp;delay(1000);
&nbsp;&nbsp;myRadio.begin(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Start radio
&nbsp;&nbsp;myRadio.setChannel(100); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Could be changed 1 ... 125
&nbsp;&nbsp;myRadio.setPALevel(RF24_PA_MIN); &nbsp; &nbsp; &nbsp; // Power level minimum - radios are close together
&nbsp;&nbsp;myRadio.setDataRate( RF24_250KBPS );
&nbsp;&nbsp;myRadio.openWritingPipe(addrs[0]);&nbsp; &nbsp; // Write to pipe called "T"
&nbsp;&nbsp;delay(750);
}

void loop() {
&nbsp;&nbsp;// Get current values
&nbsp;&nbsp;int potValue = analogRead(potPin); &nbsp; // Read Pot value
&nbsp;&nbsp;data1.rawPot = potValue; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Put changed values into next packet
&nbsp;&nbsp;data1.perCent = potValue * 100.0 / 1023.0;&nbsp; // FP value
&nbsp;&nbsp;data1.pktNo = data1.pktNo + 1;
&nbsp;&nbsp;
&nbsp;&nbsp;// Send the packet of data called data1 to Subordinate
&nbsp;&nbsp;myRadio.write(&amp;data1, sizeof(data1));&nbsp;

&nbsp;&nbsp;// Report sent values to Monitor
&nbsp;&nbsp;Serial.print("\nPackage Sent:");
&nbsp;&nbsp;Serial.println(data1.pktNo);
&nbsp;&nbsp;Serial.println(data1.rawPot);
&nbsp;&nbsp;Serial.println(data1.perCent);
&nbsp;&nbsp;Serial.println(data1.msg); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // array of chars
&nbsp;&nbsp;delay(800);
}</pre>



<h3 class="wp-block-heading"> Script for the receiving with the Arduino board using nrf24L01</h3>



<pre class="wp-block-preformatted">// 'Subordinate' receiving messages from 'Boss' via nrf2401
// File name: RF_receive3 to be paired with RF_send3 - Tony Goodhew 17 June 2020
#include &lt;SPI.h&gt;&nbsp;&nbsp;
#include "RF24.h"&nbsp;

RF24 myRadio (7, 8);&nbsp;
byte addrs[][6] = {"T"};&nbsp;

struct package&nbsp; {&nbsp; // Items and order must match packet being sent by 'Boss'
&nbsp;&nbsp;int pktNo = 0;
&nbsp;&nbsp;int rawPot = 0;
&nbsp;&nbsp;float perCent = 0;
&nbsp;&nbsp;char msg[50] ="_";
};
typedef struct package Package;
Package data1;&nbsp; // Package named data1 contains pktNo, rawPot, perPot, perCent &amp; msg

void setup() {
&nbsp;&nbsp;Serial.begin(115200); // Start Serial Monitor
&nbsp;&nbsp;delay(1000);
&nbsp;&nbsp;myRadio.begin(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Start radio
&nbsp;&nbsp;myRadio.setChannel(100);&nbsp;
&nbsp;&nbsp;myRadio.setPALevel(RF24_PA_MIN); &nbsp; &nbsp; &nbsp; // radios are close together
&nbsp;&nbsp;myRadio.setDataRate( RF24_250KBPS );&nbsp;
&nbsp;&nbsp;myRadio.openReadingPipe(1, addrs[0]);&nbsp; // Read from pipe called "T"
&nbsp;&nbsp;myRadio.startListening();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Listen for signal from Boss
}

void loop()&nbsp; {
&nbsp;&nbsp;if (myRadio.available()) {
&nbsp;&nbsp;&nbsp;&nbsp;while (myRadio.available()) { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Picked up transmission from Boss
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRadio.read(&amp;data1, sizeof(data1)); // Get the values from radio buffer
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;// Print package contents to Monitor for checking
&nbsp;&nbsp;&nbsp;&nbsp;Serial.print("\nPackage Received:");
&nbsp;&nbsp;&nbsp;&nbsp;Serial.println(data1.pktNo);
&nbsp;&nbsp;&nbsp;&nbsp;Serial.println(data1.rawPot);
&nbsp;&nbsp;&nbsp;&nbsp;Serial.println(data1.perCent);
&nbsp;&nbsp;&nbsp;&nbsp;Serial.println(data1.msg);
&nbsp;&nbsp;}
}</pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="392" height="375" src="https://tutorial45.com/wp-content/uploads/2020/06/output.jpg" alt="output screen" class="wp-image-10022" srcset="https://tutorial45.com/wp-content/uploads/2020/06/output.jpg 392w, https://tutorial45.com/wp-content/uploads/2020/06/output-300x287.jpg 300w" sizes="(max-width: 392px) 100vw, 392px" /></figure></div>



<h2 class="wp-block-heading">Project #3: Send data in both directions to operate hardware using Arduino with nrf24L01</h2>



<h3 class="wp-block-heading">Additional components</h3>



<ul class="wp-block-list"><li>2 LEDs</li><li>1 Button switch</li><li>2 560 Ohm resistor or near match to protect LEDs</li><li>1 10K Ohm resistor – pull-down resistor</li></ul>



<p class="wp-block-paragraph">Add an LED and 560 Ohm resistor to pin 3 of each Arduino. We need to use pin 3 because that has pulse-width modulation so that we can adjust the brightness.</p>



<p class="wp-block-paragraph">Add the button switch and 10K Ohm pull-down resistor to pin 2 of the Arduino without the potentiometer.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="458" height="809" src="https://tutorial45.com/wp-content/uploads/2020/06/sw_Ard_LED-1-rotated.jpg" alt="pictoriel Arduino" class="wp-image-10020" srcset="https://tutorial45.com/wp-content/uploads/2020/06/sw_Ard_LED-1-rotated.jpg 458w, https://tutorial45.com/wp-content/uploads/2020/06/sw_Ard_LED-1-170x300.jpg 170w" sizes="(max-width: 458px) 100vw, 458px" /></figure></div>



<p class="wp-block-paragraph">These scripts should allow each <a href="https://tutorial45.com/arduino-projects-rgb-led-arduino-controller/">Arduino to control the LED</a> on the other Arduino. The potentiometer will control brightness/fading and the button switch will turn the other LED ON/OFF.</p>



<p class="wp-block-paragraph">Here are the scripts:</p>



<pre class="wp-block-preformatted">// Potentiometer End
#include &lt;SPI.h&gt;
#include &lt;RF24.h&gt;
RF24 myRadio(7, 8);

byte addrs[][6] = {"T","G"};
int led = 3;&nbsp; // LED on pin 3 and 10K Ohm on pin A0

void setup() {
&nbsp;&nbsp;Serial.begin(115200);
&nbsp;&nbsp;Serial.println("Starting...");
&nbsp;&nbsp;pinMode(led, OUTPUT);
&nbsp;&nbsp;myRadio.begin();&nbsp; // Start the Radio&nbsp;
&nbsp;&nbsp;myRadio.setPALevel(RF24_PA_MIN); // Close together so low power
&nbsp;&nbsp;myRadio.setDataRate(RF24_2MBPS); // High speed
&nbsp;&nbsp;myRadio.setChannel(99);
&nbsp;&nbsp;myRadio.openWritingPipe(addrs[0]); &nbsp; &nbsp; // Open data pipes
&nbsp;&nbsp;myRadio.openReadingPipe(1, addrs[1]);&nbsp; // Opposite way round on other Arduino

&nbsp;&nbsp;myRadio.startListening();&nbsp; // Listen for a signal
}
// ============ Main Loop ============
void loop() {
&nbsp;&nbsp;int dataIn = 0; // Received value - button 1/0
&nbsp;&nbsp;int dataOut = 0;&nbsp; // Value to send - from pot - brightness

&nbsp;&nbsp;if (myRadio.available()) { // Has a signal arrived?

&nbsp;&nbsp;&nbsp;&nbsp;// Get value and update LED
&nbsp;&nbsp;&nbsp;&nbsp;while (myRadio.available()) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRadio.read( &amp;dataIn, sizeof(dataIn));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(led, dataIn); // update LED
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;myRadio.stopListening();&nbsp; // Stop listening
&nbsp;&nbsp;&nbsp;&nbsp;dataOut = analogRead(A0); // Get value from Potentiometer
&nbsp;&nbsp;&nbsp;&nbsp;myRadio.write(&amp;dataOut, sizeof(dataOut) ); // Send Raw pot value ( 0 ... 1023)

&nbsp;&nbsp;&nbsp;&nbsp;myRadio.startListening();&nbsp; // Resume listening for next pass through loop
&nbsp;&nbsp;}
}</pre>



<hr class="wp-block-separator"/>



<pre class="wp-block-preformatted">// Button End
#include &lt;SPI.h&gt;
#include &lt;RF24.h&gt;
RF24 myRadio(7, 8); // Setup radio

byte addrs[][6] = {"T", "G"};
int button = 2; // Button switch on pin 2
int led = 3;&nbsp; &nbsp; // LED on pin 3

void setup() {
&nbsp;&nbsp;Serial.begin(115200);
&nbsp;&nbsp;Serial.println("Starting...");
&nbsp;&nbsp;pinMode(button, INPUT);
&nbsp;&nbsp;myRadio.begin();&nbsp; // Start the Radio
&nbsp;&nbsp;myRadio.setPALevel(RF24_PA_MIN);&nbsp; // Close together so low power
&nbsp;&nbsp;myRadio.setDataRate(RF24_2MBPS);&nbsp; // High speed
&nbsp;&nbsp;myRadio.setChannel(99);
&nbsp;&nbsp;myRadio.openWritingPipe(addrs[1]); &nbsp; &nbsp; // Open data pipes
&nbsp;&nbsp;myRadio.openReadingPipe(1, addrs[0]);&nbsp; // Opposite way round on other Arduino
}
// ============ Main Loop ============
void loop() {
&nbsp;&nbsp;int dataOut = digitalRead(button); // Get button data to send
&nbsp;&nbsp;myRadio.stopListening(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Stop listening - we need to send

&nbsp;&nbsp;if (! myRadio.write(&amp;dataOut, sizeof(dataOut) )) {
&nbsp;&nbsp;&nbsp;&nbsp;Serial.println("No ACK ");&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;}

&nbsp;&nbsp;myRadio.startListening(); // Listen for signal
&nbsp;&nbsp;unsigned long startTime = millis(); // Record current millisecond time

&nbsp;&nbsp;// Get an ACK signal OR timeout - We cannot wait forever
&nbsp;&nbsp;while (! myRadio.available()) {
&nbsp;&nbsp;&nbsp;&nbsp;if (millis() - startTime &gt; 150 ) { // Have we waited long enough?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Serial.println("Timeout! No response");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}

&nbsp;&nbsp;int dataIn = 0;&nbsp; // To hold received value
&nbsp;&nbsp;myRadio.read( &amp;dataIn, sizeof(dataIn) ); // Get the RAW brightness for the LED
&nbsp;&nbsp;analogWrite(led, dataIn / 5);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Update LED brightness – never max
&nbsp;&nbsp;delay(100); // Short delay for quick reaction
}</pre>



<p class="wp-block-paragraph">Copy, paste, compile and upload both scripts. Twisting the knob on the potentiometer should change the brightness of the LED on the other while closing/opening the button switch should turn the other LED ON/OFF.</p>



<p class="wp-block-paragraph">There are plenty of comments in the scripts to help you understand how they are working.</p>



<h2 class="wp-block-heading">Conclusion  </h2>



<p class="wp-block-paragraph">By this point, you should have some idea about the usefulness of these small and inexpensive radio boards and be ready to modify the code I’ve provided to make your own project.</p>



<h3 class="wp-block-heading">Some project suggestions</h3>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="675" height="200" src="https://tutorial45.com/wp-content/uploads/2020/06/arduino-project-suggestion-1.jpg" alt="suggested Arduino project" class="wp-image-10019" srcset="https://tutorial45.com/wp-content/uploads/2020/06/arduino-project-suggestion-1.jpg 675w, https://tutorial45.com/wp-content/uploads/2020/06/arduino-project-suggestion-1-300x89.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/06/arduino-project-suggestion-1-585x173.jpg 585w" sizes="(max-width: 675px) 100vw, 675px" /></figure></div>



<ol class="wp-block-list"><li>Use 3 potentiometers on A0, A1, and A2 to control the color of a common cathode RGB <a href="https://tutorial45.com/controlling-leds-with-arduino/" >LED on the other Arduino</a>. You can use pins 6, 5, and 3 as they are all PWM pins and a single 560 Ohm resistor on the common cathode to connect to GND</li><li>Connect a Joystick to one Arduino and use it to set the speed and direction of the motors on an Arduino controlled floor buggy. You could add buttons to control LEDs or a Neopixel strip</li><li>Use temperature, humidity, and air pressure sensors to send current readings from your garden shed to another <a href="https://tutorial45.com/arduino-to-lcd-projects/" >Arduino fitted with an OLED SSD1306 or LCD</a> display</li><li>Look at the examples provided with the RF14 library. They include a few more statements not covered in this piece.</li></ol>



<h3 class="wp-block-heading">Problems</h3>



<p class="wp-block-paragraph">Using 2 <a href="https://tutorial45.com/arduino-ir-receiver/" >Arduinos at the same time in a project</a> more than doubles the number of things that can go wrong. You have two scripts to debug, 2 sets of hardware, and no easy way to check that your radios are working. It is very easy to update the code on the wrong Arduino when you have 2 instances of the IDE on the screen at the same time. I always keep the windows to the left and right of the screen matching the positions of the Arduinos on my desk and regularly check the ports at the bottom right of the IDE windows before uploading.</p>



<p class="wp-block-paragraph">I was using a ‘proper’ UNO R3 and a Sparkfun RedBoard UNO R3 clone while developing this article. The one-way demos worked perfectly but as soon as I added the extra components I could not get them to ‘talk‘ to each other. I eventually ordered some of the NRF24L01 Wireless RF Transceiver Socket Adapter Boards with 3.3v Regulators<strong>.</strong></p>



<p class="wp-block-paragraph">I installed one on the RedBoard and at once everything started working. It would appear that adding the extra components reduced the power available on the 3V pin below the level needed to operate the radio successfully. Using the power from the 5V pin, through the 3.3V regulator on the adapter board, supplied enough power. These extra boards also have a power indication LED and all the pins have labels making the correct connection easier.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tutorial45.com/arduino-with-nrf24l01/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A Review of the Grove Beginner Kit for Arduino</title>
		<link>https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/</link>
					<comments>https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Andreea]]></dc:creator>
		<pubDate>Sat, 06 Jun 2020 11:00:00 +0000</pubDate>
				<category><![CDATA[Arduino Projects]]></category>
		<guid isPermaLink="false">https://tutorial45.com/?p=9922</guid>

					<description><![CDATA[<p><a href="https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/">A Review of the Grove Beginner Kit for Arduino</a></p>
<p>Anyone interested in developing electronics hardware and dabbling in IoT is recommended to start with Arduino projects. This is because the average Arduino kit opens your mind up to the possibilities of building unique ideas from scratch with just a board, soldering tools, and electronic components. The Grove Beginner Kit is one such tool that ... </p>
<p class="read-more-container"><a title="A Review of the Grove Beginner Kit for Arduino" class="read-more button" href="https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/#more-9922" aria-label="More on A Review of the Grove Beginner Kit for Arduino">Read more</a></p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/">A Review of the Grove Beginner Kit for Arduino</a></p>

<p class="wp-block-paragraph">Anyone interested in developing electronics hardware and dabbling in IoT is recommended to start with Arduino projects. This is because the average Arduino kit opens your mind up to the possibilities of building unique ideas from scratch with just a board, soldering tools, and electronic components. The Grove Beginner Kit is one such tool that helps you get started with Arduino. Here, its features, capabilities, and applications will be discussed in detail.</p>



<h2 class="wp-block-heading">The Features of the Grove Beginner Kit</h2>



<p class="wp-block-paragraph">The Grove beginner kit comes with the following items:</p>



<ul class="wp-block-list"><li>An Arduino UNO Compatible board (ATmega320p)</li><li>A micro USB cable</li><li>Grove cables</li><li>LED light</li><li>Buzzer</li><li>OLED Display</li><li>Buttons</li><li>Rotary Potentiometer</li><li><a href="https://tutorial45.com/arduino-light-sensor-project/">Light sensor</a></li><li>Temperature sensors</li><li>Humidity sensors</li><li>Air Pressure sensor</li><li>3-axis Accelerator</li><li>Seeeduino Lotus – The <a href="https://tutorial45.com/charlieplexing-arduino-leds/" >Arduino compatible board</a></li></ul>



<p class="wp-block-paragraph">The LED and lighting features are simple modules that provide light when assembled with the Arduino board. The light sensor functions y detecting the intensity of ambient light while the temperature sensor provides support for detecting temperature levels of surroundings. The humidity sensor measures humidity level and air pressure sensors measure air pressure.</p>



<p class="wp-block-paragraph">Other important components within the kit such as the OLED display serve as a display or visualization screen which does not consume much energy. The buzzer produces a buzzing sound while buttons and cables are supportive components for controlling your project.</p>



<h2 class="wp-block-heading">Getting Started with the Grove Beginner Kit</h2>



<p class="wp-block-paragraph">The Grove Beginner Kit also comes with instructions on how to get started and different <a href="https://tutorial45.com/arduino-ir-receiver/" >Arduino projects</a> you could accomplish using the kit. To get started, you will need to install the Arduino integrated development environment (IDE) on your laptop or desktop computer. You will need a functional Arduino IDE for installing and configuring every component you intend to use for your projects.</p>



<figure class="wp-block-gallery columns-3 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1024x683.jpg" alt="" data-id="9982" data-full-url="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit.jpg" data-link="https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/arduino-grrove-beginner-kit/" class="wp-image-9982" srcset="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1024x683.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-300x200.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-768x512.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1170x780.jpg 1170w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-585x390.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-263x175.jpg 263w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit.jpg 1500w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1-1024x683.jpg" alt="" data-id="9983" data-full-url="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1.jpg" data-link="https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/arduino-grrove-beginner-kit-1/" class="wp-image-9983" srcset="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1-1024x683.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1-300x200.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1-768x512.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1-1170x780.jpg 1170w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1-585x390.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1-263x175.jpg 263w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-1.jpg 1500w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-2-1024x683.jpg" alt="" data-id="9984" data-full-url="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-2.jpg" data-link="https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/arduino-grrove-beginner-kit-2/" class="wp-image-9984" srcset="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-2-1024x683.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-2-300x200.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-2-768x512.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-2-1170x780.jpg 1170w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-2-585x390.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-2-263x175.jpg 263w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-2.jpg 1500w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-3-1024x683.jpg" alt="" data-id="9985" data-full-url="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-3.jpg" data-link="https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/arduino-grrove-beginner-kit-3/" class="wp-image-9985" srcset="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-3-1024x683.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-3-300x200.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-3-768x512.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-3-1170x780.jpg 1170w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-3-585x390.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-3-263x175.jpg 263w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-3.jpg 1500w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-4-1024x683.jpg" alt="" data-id="9986" data-full-url="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-4.jpg" data-link="https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/arduino-grrove-beginner-kit-4/" class="wp-image-9986" srcset="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-4-1024x683.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-4-300x200.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-4-768x512.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-4-1170x780.jpg 1170w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-4-585x390.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-4-263x175.jpg 263w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-4.jpg 1500w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-6-1024x683.jpg" alt="" data-id="9988" data-full-url="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-6.jpg" data-link="https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/arduino-grrove-beginner-kit-6/" class="wp-image-9988" srcset="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-6-1024x683.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-6-300x200.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-6-768x512.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-6-1170x780.jpg 1170w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-6-585x390.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-6-263x175.jpg 263w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-6.jpg 1500w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-7-1024x683.jpg" alt="" data-id="9989" data-full-url="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-7.jpg" data-link="https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/arduino-grrove-beginner-kit-7/" class="wp-image-9989" srcset="https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-7-1024x683.jpg 1024w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-7-300x200.jpg 300w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-7-768x512.jpg 768w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-7-1170x780.jpg 1170w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-7-585x390.jpg 585w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-7-263x175.jpg 263w, https://tutorial45.com/wp-content/uploads/2020/05/arduino-grrove-beginner-kit-7.jpg 1500w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></li></ul></figure>



<p class="wp-block-paragraph">Once the Arduino IDE is installed, the next step is installing the <a href="https://tutorial45.com/arduino-shields-for-arduino/" >USB driver which connects Arduino</a> and your project to your computer. Once connected, you can now create new files for your programming requirements. As stated earlier, the Grove beginner kit includes simplistic steps for getting started. This means you do not need to have any prior knowledge of Arduino and electronics to use this kit.</p>



<p class="wp-block-paragraph">The Grover kit also comes with a dedicated wiki page for anyone interested in learning the basics of electronics, programming, and configuring<a href="https://tutorial45.com/iot-projects-ideas/"> DIY electronics or IoT projects</a>. Within this dedicated page, information such as definitions of a digital signal, code analysis, etc. will be provided. You can also take advantage of the lesson guides about developing your projects with the Grove beginner kit.</p>



<h2 class="wp-block-heading">Projects You Can Do with the Grove Beginner Kit</h2>



<p class="wp-block-paragraph">Experienced electronics and hardware technicians or hobbyists will have some idea of what can be developed using the components of the Grove kit. But for beginners, here is a list of exciting <a href="https://tutorial45.com/tetris-pursuing-a-nostalgic-diy-project/" >projects to get you started with DIY</a> electronics:</p>



<ol class="wp-block-list" type="1"><li><strong>Blinking LED</strong> – The <a href="https://tutorial45.com/electronic-project-diy-led-emergency-light/">blinking LED project</a> involves getting the LED light to come on and off at the touch of a button or in intervals. This means you can get the LED light to light up at intervals, at the touch of a button, or increase the intensity of the light it produces. The components you will need for this project include the Seeeduino Lotus, the Grove LED lights, button, and cables. The software code for the project can be found within the wiki page; you can simply copy and paste the code into your Arduino IDE or study the analysis behind the code to learn more about programming with Arduino.</li><li><strong>Buzzing the Buzzer</strong> – The Buzzer is an output module that produces a buzzing sound when configured using the components within the Grove kit. You can choose to modulate the sound it produces in diverse ways according to your needs. The components you will need for this project include the Seeeduino Lotus, the Buzzer, grove cables, and the button. The potentiometer is also required for adjusting the volume that comes from the buzzer. To accomplish these tasks, you will need to program the buzzer, potentiometer, and the button. You can also find the information or code needed to program the buzzer within the wiki guide provided for the Grove beginners kit.</li><li><strong>Smart Lighting </strong>– The inclusion of a light sensor means you can develop a LED light that automatically lights up once placed in a dark place. This means, our <a href="https://tutorial45.com/arduino-7-segment-display/">Arduino project</a> must be able to sense the intensity of ambient light and send the information to Arduino which lights up the LED to illuminate the room with adequate intensity. For this project, you will need the Seeeduino Lotus, Grove LED light, light sensor, and cables. The code for the smart lighting project can be found within the kit’s wiki page.</li><li><strong>Visualizing Data on OLED </strong>– The OLED display provided with the Grove kit was included to help you take readings from the sensors included in the kit. Thus, if you hook up the temperature or humidity sensors, you will need to take readings and the OLED display provides the avenue for doing this. The components you will need for this project include the Seeeduino Lotus, OLED display, grove cable. Note that these components are needed solely for integrating the OLED display into your project. To read temperatures, you will also need to configure the temperature sensor. You can find the codes needed for this project within the wiki page including the description of each snippet of code.</li><li><strong>Temperature and Humidity Detection Device</strong> – The Grove kit for beginners comes with the components you need to create a mini-weather station. The station will be able to detect humidity and temperature while displaying its readings on the OLED display. The tools you will need for this project are the Seeeduino Lotus, OLED, temperature and humidity sensor, and Grove cables. This is a more advanced <a href="https://tutorial45.com/arduino-projects-gas-detector/" >Arduino project</a> but you can find the details for it within the wiki page. The temperature and humidity detection device also helps you expand your knowledge of combining multiple sensors onto a single board.</li></ol>



<p class="wp-block-paragraph">The Grove Beginners <a href="https://www.seeedstudio.com/Grove-Beginner-Kit-for-Arduino-p-4549.html" target="_blank" rel="norfollow noopener noreferrer">Kit cost approximately $20</a> which is very affordable for students and anyone interested in learning about electronics, IoT, and programming hardware.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tutorial45.com/a-review-of-the-grove-beginner-kit-for-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: tutorial45.com @ 2026-08-03 16:07:54 by W3 Total Cache
-->