The Simple Management Rotary Tool (SMRT) is a compact way to keep track of all your daily tasks for the day. Powered by an Arduino Uno, this device only has 3 other components to it: a rotary encoder, a 20×4 LCD I2C, and a single button. The making of this was not extremely challenging, but more difficult than I had originally planned.
The first step I took was putting my initial thoughts into electronics. I had wired a standard 16×2 LCD with a couple buttons, that I would eventually turn into one button and a rotary encoder.
This worked out great. It was simple, and it did exactly what I wanted. The issue I had was this was all hard coded. I was manually counting out the number of letters in order to fit into the screen. My thought to this was to change the code, but this is where things got a little dicey. Trying to cut off strings at certain points and such was challenging. I tried going through and using character operations and different string operations, but no luck. I knew what I wanted the function to do, but I didn’t know of a command to do it. I was essentially trying to reinvent the wheel.

Before picture with all of the complex wiring.

This is the after picture with a clean slate of wiring.
The next iteration was much cleaner. I switched from the standard 16×2 LCD to using the 20×4 LCD I2C that came with a handy backpack to simplify the wiring. Then I installed the rotary encoder and a button with a pull up resistor and that was everything to it. The wiring went from cramped to clean in mere seconds.
Important point, this all took place in the first week of development. This is where I got confident. This is also the point in which I tried to simplify the design, but in doing so, made it all the more complicated. My plan was going to be to make a “custom PCB” that would fit all of my needs. I really like PCBs because they are compact and you do not have to worry about faulty wiring within the breadboards (I had experienced this issue with some buttons before the change). This was done with a perfboard that I had soldered some wires to.

This is the front side of the perfboard.

This is the backside of the perfboard. There are a couple wires that were soldered onto the pins after realizing they were not soldered on.
After all of this work, the code finally was updated, and everything was going well. This is of course until I remembered that I had to laser cut the box and it was 10pm (TechSpark closes at 11pm).
This problem was made much nicer because I realized that the CAD files I had made with Inventor were not loading properly the .dwg files that I would use to laser cut the box parts. I had to set out to redesign and remake the entire box from scratch, which took a while, but ended up with a nice looking design!

This is the Solidworks version of the final assembly that would be laser cut.
Again, there were more issues with the sizings of everything, and when it was all said and done, the final product looked like this:

This is the front view of the final product for the project 2.
Discussion:
Quote: “Cool idea! I think the simplicity of a knob and a button makes the system really simple to use, plus it has a sort of arcade cabinet aesthetic that I can’t help but love.”
Response: I agree! The simplicity is what makes this enjoyable from my perspective. The arcade cabinet was also by design! Just to make things fun for the user. There is a scenario in which this has a small game tied to finishing each task and there’s a fun LED display to go along with it!
Quote: “I can see that the digital solution might be an improvement on paper both by narrowing your focus and by providing a physical affordance you might come to associate solely with productivity. You might consider how to improve the rewards you receive if the gamification was also important.”
Response: One thing I would love to do with it would be to design a custom game with LCD I2C using custom characters and such, however that was outside the time that I wanted to spend on the physical completion of this project.
Self Critique:
Overall, I am not pleased with the final outcome. The coding took a lot longer than I thought it would, simply because I do not have a great understanding for the language yet. It took a long time to just understand how the different variables were going to interact and finding a means that loops properly with the LCD. The actual construction of everything took 30 minutes, but I wish I would have spent that time maybe three to four days before the due date so that I could properly redesign and plan for what errors might have occurred. If you looked at the box from the outside, the wires were pretty well hidden, and there was some soldering – unnecessary because I was unable to work with the Arduino Promicro (Leonardo) – that made the project look like a lot less work went into it than actually did. I did have fun learning and working on this, and it is something that I think I want to continue to work on and finish throughout my free time.
What I Learned:
The biggest thing I learned was to not underestimate a project. I definitely went into this knowing what I wanted the device to do, but not quite realizing how difficult the coding was going to be. Specifically the parts that were more confusing for me were the various string operations and working with arrays. These are things that I have used extensively in MATLAB, but how they work varies from language to language. My advice to the past Carl would likely be to find someone who can explain it all to me sooner. I went to a buddy of mine for help because he is seen as the coding master in my friend group and he was able to walk me through the steps and we figured out something together.
Next Steps:
The next ideal steps in this project would be to redesign the box that it was put into and add LEDs/ a fun game to the code. Really start to dive further into this idea that it looks like an arcade cabinet. Maybe then I could design a quick bit for the outside of the wooden box and make it look nice. This way it would be pleasing to look at, compact in design, and functions like a game piece to hopefully be more efficient when working.
Technical Information:
Schematic–

This is the schemativ for the design.
Code–
- <span class="com">/* Project 2
- * Carl Young (cryoung)
- * Time: 12 hours
- *
- * Collaborations:
- * Ryan Bates for debugging
- * Aidan Smith for debugging and ideation with
- * regards to the String functions.
- *
- * Challenges:
- * Biggest thing was the string displays and
- * getting the right length of strings to display.
- *
- * Next Time:
- * Do more of this upfront. 80% of it was done, but
- * that definitely was not enough. I should have
- * just finished it.
- *
- * Pin Mapping:
- *
- * pin / mode / description
- * -------/---------/------------
- * 13 input completion button
- * 10 output LED blue
- * 9 output LED green
- * 8 output LED red
- * 4 input rotary encoder SW
- * 3 input rotary encoder DT
- * 2 input rotary encoder CLK
- * A4 input LCD I2C SDA
- * A5 input LCD I2C SCL
- */</span><span class="pln">
- </span><span class="com">// -----===== Varibales =====-----</span><span class="pln">
- </span><span class="com">// Component Pins</span><span class="pln">
- </span><span class="com">#define</span><span class="pln"> inputCLK </span><span class="lit">2</span><span class="pln">
- </span><span class="com">#define</span><span class="pln"> inputDT </span><span class="lit">3</span><span class="pln">
- </span><span class="com">#define</span><span class="pln"> inputSW </span><span class="lit">4</span><span class="pln">
- </span><span class="com">#define</span><span class="pln"> redLED </span><span class="lit">8</span><span class="pln"> </span><span class="com">// not used</span><span class="pln">
- </span><span class="com">#define</span><span class="pln"> greenLED </span><span class="lit">9</span><span class="pln"> </span><span class="com">// not used</span><span class="pln">
- </span><span class="com">#define</span><span class="pln"> blueLED </span><span class="lit">10</span><span class="pln"> </span><span class="com">// not used</span><span class="pln">
- </span><span class="com">#define</span><span class="pln"> completeSW </span><span class="lit">13</span><span class="pln">
- </span><span class="com">// -----===== Libraries =====-----</span><span class="pln">
- </span><span class="com">#include</span><span class="pln"> </span><span class="str"><LiquidCrystal_I2C.h></span><span class="pln">
- </span><span class="com">#include</span><span class="pln"> </span><span class="str"><Wire.h></span><span class="pln">
- </span><span class="com">#include</span><span class="pln"> </span><span class="str"><Encoder.h></span><span class="pln">
- </span><span class="typ">LiquidCrystal_I2C</span><span class="pln"> lcd</span><span class="pun">(</span><span class="lit">0x27</span><span class="pun">,</span><span class="lit">20</span><span class="pun">,</span><span class="lit">4</span><span class="pun">);</span><span class="pln">
- </span><span class="typ">Encoder</span><span class="pln"> rencoder</span><span class="pun">(</span><span class="pln">inputCLK</span><span class="pun">,</span><span class="pln">inputDT</span><span class="pun">);</span><span class="pln">
- </span><span class="com">// Task Variables</span><span class="pln">
- </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> taskNum </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> taskTotal </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> taskTotalOG </span><span class="pun">=</span><span class="pln"> taskTotal</span><span class="pun">;</span><span class="pln">
- </span><span class="typ">String</span><span class="pln"> taskDisplay </span><span class="pun">=</span><span class="pln"> </span><span class="pun">((</span><span class="typ">String</span><span class="pun">)</span><span class="pln">taskTotal</span><span class="pun">);</span><span class="pln">
- </span><span class="typ">String</span><span class="pln"> taskOne </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Complete all homework."</span><span class="pun">;</span><span class="pln">
- </span><span class="typ">String</span><span class="pln"> taskTwo </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Shower before going to bed."</span><span class="pun">;</span><span class="pln">
- </span><span class="typ">String</span><span class="pln"> taskThree </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Play Overwatch."</span><span class="pun">;</span><span class="pln">
- </span><span class="typ">String</span><span class="pln"> taskFinish </span><span class="pun">=</span><span class="pln"> </span><span class="str">"ALL DONE!"</span><span class="pun">;</span><span class="pln">
- </span><span class="typ">String</span><span class="pln"> taskList</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">taskOne</span><span class="pun">,</span><span class="pln">taskTwo</span><span class="pun">,</span><span class="pln">taskThree</span><span class="pun">,</span><span class="pln">taskFinish</span><span class="pun">};</span><span class="pln">
- </span><span class="typ">String</span><span class="pln"> splitString</span><span class="pun">[</span><span class="lit">2</span><span class="pun">];</span><span class="pln">
- </span><span class="typ">String</span><span class="pln"> space </span><span class="pun">=</span><span class="pln"> </span><span class="str">" "</span><span class="pun">;</span><span class="pln">
- </span><span class="com">// Completing Tasks</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> completeButtonState </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> lastCompleteState </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">bool</span><span class="pln"> completedTasks</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">};</span><span class="pln">
- </span><span class="com">// Encoder Variables</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> currentStateCLK</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> previousStateCLK</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">long</span><span class="pln"> positionEncoder </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">bool</span><span class="pln"> </span><span class="kwd">lock</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
- </span><span class="typ">String</span><span class="pln"> encdir </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> lockButtonState </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> lastLockState </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> lockCount </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
- </span><span class="com">// -----===== SetUp =====-----</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> setup</span><span class="pun">(){</span><span class="pln">
- </span><span class="com">// Initialize LCD</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="pln">init</span><span class="pun">();</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="pln">init</span><span class="pun">();</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="pln">backlight</span><span class="pun">();</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
- </span><span class="com">// Task Printing</span><span class="pln">
- overallDisplay</span><span class="pun">();</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"--------------------"</span><span class="pun">);</span><span class="pln">
- </span><span class="com">// Initialize Pins</span><span class="pln">
- pinMode</span><span class="pun">(</span><span class="pln">inputCLK</span><span class="pun">,</span><span class="pln">INPUT</span><span class="pun">);</span><span class="pln">
- pinMode</span><span class="pun">(</span><span class="pln">inputDT</span><span class="pun">,</span><span class="pln">INPUT</span><span class="pun">);</span><span class="pln">
- pinMode</span><span class="pun">(</span><span class="pln">inputSW</span><span class="pun">,</span><span class="pln">INPUT_PULLUP</span><span class="pun">);</span><span class="pln">
- pinMode</span><span class="pun">(</span><span class="pln">completeSW</span><span class="pun">,</span><span class="pln">INPUT_PULLUP</span><span class="pun">);</span><span class="pln">
- pinMode</span><span class="pun">(</span><span class="pln">redLED</span><span class="pun">,</span><span class="pln">OUTPUT</span><span class="pun">);</span><span class="pln">
- pinMode</span><span class="pun">(</span><span class="pln">greenLED</span><span class="pun">,</span><span class="pln">OUTPUT</span><span class="pun">);</span><span class="pln">
- pinMode</span><span class="pun">(</span><span class="pln">blueLED</span><span class="pun">,</span><span class="pln">OUTPUT</span><span class="pun">);</span><span class="pln">
- </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">(</span><span class="lit">9600</span><span class="pun">);</span><span class="pln">
- previousStateCLK </span><span class="pun">=</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">inputCLK</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="com">// -----===== Loop =====-----</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">(){</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">taskTotal </span><span class="pun">!=</span><span class="pln"> taskTotalOG</span><span class="pun">){</span><span class="pln">
- overallDisplay</span><span class="pun">();</span><span class="pln">
- taskTotalOG </span><span class="pun">=</span><span class="pln"> taskTotal</span><span class="pun">;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- displayCurrentTask</span><span class="pun">(</span><span class="pln">taskNum</span><span class="pun">);</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> lockSwitch </span><span class="pun">=</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">inputSW</span><span class="pun">);</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> completeSwitch </span><span class="pun">=</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">completeSW</span><span class="pun">);</span><span class="pln">
- currentStateCLK </span><span class="pun">=</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">inputCLK</span><span class="pun">);</span><span class="pln">
- lockDetection</span><span class="pun">();</span><span class="pln">
- </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="kwd">lock</span><span class="pun">);</span><span class="pln">
- </span><span class="kwd">while</span><span class="pun">(</span><span class="kwd">lock</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">){</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">redLED</span><span class="pun">,</span><span class="pln">HIGH</span><span class="pun">);</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">greenLED</span><span class="pun">,</span><span class="pln">LOW</span><span class="pun">);</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">blueLED</span><span class="pun">,</span><span class="pln">LOW</span><span class="pun">);</span><span class="pln">
- lockDetection</span><span class="pun">();</span><span class="pln">
- checkComplete</span><span class="pun">();</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">completedTasks</span><span class="pun">[</span><span class="pln">taskNum</span><span class="pun">-</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">){</span><span class="pln">
- taskNum</span><span class="pun">++;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- encoderMovement</span><span class="pun">();</span><span class="pln">
- </span><span class="kwd">while</span><span class="pun">(</span><span class="pln">completedTasks</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> completedTasks</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> completedTasks</span><span class="pun">[</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pun">){</span><span class="pln">
- displayCurrentTask</span><span class="pun">(</span><span class="lit">4</span><span class="pun">);</span><span class="pln">
- celebrationLoop</span><span class="pun">();</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- delay</span><span class="pun">(</span><span class="lit">10</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="com">// -----===== Functions =====-----</span><span class="pln">
- </span><span class="com">// Wraps text if too long</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> textWrap</span><span class="pun">(</span><span class="typ">String</span><span class="pln"> temp</span><span class="pun">){</span><span class="pln">
- </span><span class="typ">String</span><span class="pln"> supportingText </span><span class="pun">=</span><span class="pln"> </span><span class="str">"-"</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">temp</span><span class="pun">.</span><span class="pln">length</span><span class="pun">()</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> </span><span class="lit">38</span><span class="pun">){</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">temp</span><span class="pun">.</span><span class="pln">length</span><span class="pun">()</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> </span><span class="lit">18</span><span class="pun">){</span><span class="pln">
- supportingText </span><span class="pun">=</span><span class="pln"> </span><span class="str">" "</span><span class="pun">;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
- supportingText </span><span class="pun">=</span><span class="pln"> </span><span class="str">"-"</span><span class="pun">;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> diff </span><span class="pun">=</span><span class="pln"> </span><span class="lit">36</span><span class="pun">-</span><span class="pln">temp</span><span class="pun">.</span><span class="pln">length</span><span class="pun">();</span><span class="pln">
- temp </span><span class="pun">=</span><span class="pln"> temp </span><span class="pun">+</span><span class="pln"> space</span><span class="pun">.</span><span class="pln">substring</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln">diff</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">temp</span><span class="pun">.</span><span class="pln">length</span><span class="pun">()</span><span class="pln"> </span><span class="pun">></span><span class="pln"> </span><span class="lit">17</span><span class="pun">){</span><span class="pln">
- splitString</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> temp</span><span class="pun">.</span><span class="pln">substring</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">17</span><span class="pun">)+</span><span class="pln">supportingText</span><span class="pun">;</span><span class="pln">
- splitString</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> temp</span><span class="pun">.</span><span class="pln">substring</span><span class="pun">(</span><span class="lit">17</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
- splitString</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> temp</span><span class="pun">.</span><span class="pln">substring</span><span class="pun">(</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
- splitString</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="com">// Displays the task associated with taskNum</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> displayCurrentTask</span><span class="pun">(</span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> number</span><span class="pun">){</span><span class="pln">
- textWrap</span><span class="pun">(</span><span class="pln">taskList</span><span class="pun">[</span><span class="pln">taskNum</span><span class="pun">-</span><span class="lit">1</span><span class="pun">]);</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">2</span><span class="pun">);</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">((</span><span class="typ">String</span><span class="pun">)</span><span class="pln">taskNum</span><span class="pun">+</span><span class="str">":"</span><span class="pun">+</span><span class="pln">splitString</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]);</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">3</span><span class="pun">);</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">splitString</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="com">// Encoder position code - GOOD</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> encoderMovement</span><span class="pun">(){</span><span class="pln">
- </span><span class="kwd">long</span><span class="pln"> newPos </span><span class="pun">=</span><span class="pln"> rencoder</span><span class="pun">.</span><span class="pln">read</span><span class="pun">()/</span><span class="lit">4</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">newPos </span><span class="pun">!=</span><span class="pln"> positionEncoder </span><span class="pun">&&</span><span class="pln"> newPos </span><span class="pun">></span><span class="pln"> positionEncoder</span><span class="pun">){</span><span class="pln">
- positionEncoder </span><span class="pun">=</span><span class="pln"> newPos</span><span class="pun">;</span><span class="pln">
- taskNum</span><span class="pun">--;</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">taskNum </span><span class="pun"><</span><span class="pln"> </span><span class="lit">1</span><span class="pun">){</span><span class="pln">
- taskNum </span><span class="pun">=</span><span class="pln"> taskTotal</span><span class="pun">;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">newPos </span><span class="pun">!=</span><span class="pln"> positionEncoder </span><span class="pun">&&</span><span class="pln"> newPos </span><span class="pun"><</span><span class="pln"> positionEncoder</span><span class="pun">){</span><span class="pln">
- positionEncoder </span><span class="pun">=</span><span class="pln"> newPos</span><span class="pun">;</span><span class="pln">
- taskNum</span><span class="pun">++;</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">taskNum </span><span class="pun">></span><span class="pln"> taskTotal</span><span class="pun">){</span><span class="pln">
- taskNum </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="com">// Adjusts the lock state and checks status of lock via lockCount</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> lockDetection</span><span class="pun">(){</span><span class="pln">
- lockButtonState </span><span class="pun">=</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">inputSW</span><span class="pun">);</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">lockButtonState </span><span class="pun">!=</span><span class="pln"> lastLockState</span><span class="pun">){</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">lockButtonState </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> </span><span class="kwd">lock</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">){</span><span class="pln">
- lockCount</span><span class="pun">++;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- delay</span><span class="pun">(</span><span class="lit">50</span><span class="pun">);</span><span class="pln">
- lastLockState </span><span class="pun">=</span><span class="pln"> lockButtonState</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">lockCount</span><span class="pun">%</span><span class="lit">2</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">){</span><span class="pln">
- </span><span class="kwd">lock</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
- </span><span class="kwd">lock</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="com">// Simple button change for complete that also changes the state of the</span><span class="pln">
- </span><span class="com">// task complete list and the lock</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> checkComplete</span><span class="pun">(){</span><span class="pln">
- completeButtonState </span><span class="pun">=</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">completeSW</span><span class="pun">);</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">completeButtonState </span><span class="pun">!=</span><span class="pln"> lastCompleteState</span><span class="pun">){</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">completeButtonState </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">){</span><span class="pln">
- </span><span class="com">// if button is pushed</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="kwd">lock</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">){</span><span class="pln">
- </span><span class="kwd">lock</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
- lockCount</span><span class="pun">++;</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- completedTasks</span><span class="pun">[</span><span class="pln">taskNum</span><span class="pun">-</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
- taskTotal</span><span class="pun">--;</span><span class="pln">
- </span><span class="com">//Serial.println((String)"taskNum: "+taskNum);</span><span class="pln">
- </span><span class="com">//Serial.println((String)"taskTotal: "+taskTotal);</span><span class="pln">
- </span><span class="com">//Serial.println((String)"completedTask?: "+completedTasks[taskNum-1]);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- delay</span><span class="pun">(</span><span class="lit">50</span><span class="pun">);</span><span class="pln">
- lastCompleteState </span><span class="pun">=</span><span class="pln"> completeButtonState</span><span class="pun">;</span><span class="pln">\
- digitalWrite</span><span class="pun">(</span><span class="pln">blueLED</span><span class="pun">,</span><span class="pln">HIGH</span><span class="pun">);</span><span class="pln">
- delay</span><span class="pun">(</span><span class="lit">250</span><span class="pun">);</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">blueLED</span><span class="pun">,</span><span class="pln">LOW</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> overallDisplay</span><span class="pun">(){</span><span class="pln">
- </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">taskTotal </span><span class="pun"><</span><span class="pln"> </span><span class="lit">10</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> taskTotal </span><span class="pun">>=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">){</span><span class="pln">
- taskDisplay </span><span class="pun">=</span><span class="pln"> </span><span class="pun">((</span><span class="typ">String</span><span class="pun">)</span><span class="str">"00"</span><span class="pun">+</span><span class="pln">taskTotal</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">taskTotal </span><span class="pun">></span><span class="pln"> </span><span class="lit">9</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> taskTotal </span><span class="pun"><</span><span class="pln"> </span><span class="lit">100</span><span class="pun">){</span><span class="pln">
- taskDisplay </span><span class="pun">=</span><span class="pln"> </span><span class="pun">((</span><span class="typ">String</span><span class="pun">)</span><span class="str">"0"</span><span class="pun">+</span><span class="pln">taskTotal</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
- lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Tasks remaining: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> taskDisplay</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> celebrationLoop</span><span class="pun">(){</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">blueLED</span><span class="pun">,</span><span class="pln">HIGH</span><span class="pun">);</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">greenLED</span><span class="pun">,</span><span class="pln">LOW</span><span class="pun">);</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">redLED</span><span class="pun">,</span><span class="pln">LOW</span><span class="pun">);</span><span class="pln">
- delay</span><span class="pun">(</span><span class="lit">250</span><span class="pun">);</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">blueLED</span><span class="pun">,</span><span class="pln">LOW</span><span class="pun">);</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">greenLED</span><span class="pun">,</span><span class="pln">HIGH</span><span class="pun">);</span><span class="pln">
- delay</span><span class="pun">(</span><span class="lit">250</span><span class="pun">);</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">greenLED</span><span class="pun">,</span><span class="pln">LOW</span><span class="pun">);</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">redLED</span><span class="pun">,</span><span class="pln">HIGH</span><span class="pun">);</span><span class="pln">
- delay</span><span class="pun">(</span><span class="lit">250</span><span class="pun">);</span><span class="pln">
- digitalWrite</span><span class="pun">(</span><span class="pln">redLED</span><span class="pun">,</span><span class="pln">LOW</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span>