[Final Images and Video Not Available – the device is currently in Pittsburgh and I am not available to take a proper image of the final product.]

Overview

This project is an alarm clock that will drive around your room and flicker your lights until you wake up and stop it.

 

Process images and review

I used a smaller screen than I had wanted.  Essentially, I didn’t want a very big boxy alarm clock, since I thought it would look a little ugly aesthetically speaking. This decision was a factor in the next decision I will talk about.

Making the smaller screen functional

I made the UI simpler than I wanted it to be. At first, I wanted the screen to have options for how quick the robot would run around, how quick the lights would flicker, how easy it would be for the robot to dodge obstacles, and then all the setting for time, date, alarm etc. I also originally wanted it to show the seconds. But due to difficulty and space, I decided to go for a much simpler UI. Which looks like the following.

Simpler UI

 

Another decision I had to make early on was how many wheels I wanted and how big. Considering that I had some easy pre-geared wheels I kind of wanted to integrate those into the design to make my life easier. This also meant I had to build around the size of the wheels. Most alarm clocks aren’t that big, which mean’t if I was using those wheels, things were going to have to be squished into to the smallest space possible. I ended up just using two of those pre-geared wheels and adding a small point turn bearing later to conserve space for electronics.

Two wheel with small point turn bearing decision

Here is an image of my initial idea for this project and how I wanted it to turn out.

Original brainstorming

 

Discussion

Response

Where would be the light be located? Also will other lights be hinder the photoresistor? The user interface is easy, with easy buttons and options to choose from, the ultrasonic sensor works great to avoid bumping into other stuff. I would like to see how big the range the movement is. In the demo it stayed pretty much in the same area, I would like to see it run around like in bigger area, so it would make you get up more.

The light would be located anywhere in your room. The idea was that you would be able to purchase a bigger set of NeoPixel lights and hang them anywhere around your room.  Something I could work on is making a better system to trigger the lights. As of now, with no adjustable threshold, the lights would not go off in a very dark room. I would really like to add a magnetic trigger so that this would work in a lot more environments than the current system does.  The device currently has an infinite range, it only looked like it stayed in the same area because I forced it into a circle with my foot.

 

I think the entire idea is really cool and i really appreciate the attention to details that you have p especially in terms of the user interface! I think the entire project is really crazy and I am super happy that you were able to get a lot of your features done!

Thank you so much! It took a lot of time to get some of these features to work, especially the UI. I do think I could have paid more attention to detail if I had paced myself a little better considering our time constraint.

 

Self critique

I am satisfied with how it came out, but not entirely happy with it.  My project basically does what I wanted it to do, but the end game of my process was very rushed. (my fault though) If I had paced myself and spent more time I think I could have solved some issues with some better solutions than the ones I currently have. I also think I could have made it look a lot more aesthetically pleasing if I had given myself more time. In conclusion, I did meet my goals, but not my own expectations.

 

What you learned

What would you do differently next time?

I would have allotted more time to this project. Most of the project was done in under 10 hours on the day before it was due. This gave me very little time to come up with elegant solutions to problems I had. It also gave me little time to manufacture and work on aesthetics.

Did you get hung up at a particular point in progress, or fail to see an easy workaround to a problem?

I think the main issue here is that I thought I had solved the hardest issue of the project and then left rest of the project to a way later date. When that date came, a lot of unexpected issues came up and I only had a couple of hours to fix them. This also led to me to “tunnelvision” and put my brain in a box. I only realized some better solutions after the due date.

What you learned about your own abilities and/or limitations

Given the amount of time I used to produce a working product I think I did a very good job. On the flip side, I am my own limiter. I can only imagine what I would’ve produced if I had used the time I had more wisely.

 

Next steps

Do you expect to build another iteration of this project?

If Zach would give us extra credit to do so, I would not be apposed to building another iteration. Well, if I were to build another iteration, I would implement a magnetic trigger for the lights in the room. This would allow me to create a “home” for the alarm clock as it waits until the next alarm date. I would create an easy way to turn it off/on and a way to charge it in its “home”. I would also try to add a sound to it while the alarm goes off. It currently doesn’t have a sound due to some internal libraries colliding, but I would find a workaround to this. Lastly, I would make it more aesthetically pleasing.

Technical information

Alarm Clock Schematic

Lights Schematic

Alarm Clock Code

  1. <span class="com">/* Catch the Clock (alarm clock code)
  2. * Estevan Chairez
  3. *
  4. * Description: This code runs all the logic for the alarm clock.
  5. * It will set up the menu screen and let the user select options,
  6. * trigger the motors to autonomously navigate its surrounding area
  7. * if the clock reaches the set alarm time and turn off to stop the alarm.
  8. * The potentiometer will act as a scroll-knob, the pushbutton as
  9. * a button to select options and numbers.
  10. *
  11. * Pin mapping:
  12. *
  13. * pin | mode | description
  14. * ------|--------|------------
  15. * A3 input potentiometer
  16. * 2 input momentary pushbutton
  17. * 4 input TRIG pin for ultrasonic sensor
  18. * 6 input ECHO pin for ultrasonic sensor
  19. * 3 output B1IN for motor 1
  20. * 5 output B2IN for motor 1
  21. * 9 output A2IN for motor 2
  22. * 10 output A1IN for motor 2
  23. *
  24. */</span><span class="pln">
  25. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><DS1307RTC.h></span><span class="pln">
  26. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><Wire.h></span><span class="pln">
  27. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><LiquidCrystal_I2C.h></span><span class="pln">
  28. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><NewPing.h></span><span class="pln">
  29. </span><span class="com">#define</span><span class="pln"> POTENT A3
  30. </span><span class="com">#define</span><span class="pln"> BUTTON </span><span class="lit">2</span><span class="pln">
  31. </span><span class="com">#define</span><span class="pln"> TRIG </span><span class="lit">4</span><span class="pln">
  32. </span><span class="com">#define</span><span class="pln"> ECHO </span><span class="lit">6</span><span class="pln">
  33. </span><span class="com">#define</span><span class="pln"> MAX_DISTANCE </span><span class="lit">200</span><span class="pln">
  34. </span><span class="com">#define</span><span class="pln"> THRESHOLD </span><span class="lit">40</span><span class="pln">
  35. </span><span class="com">#define</span><span class="pln"> AIN_1 </span><span class="lit">10</span><span class="pln">
  36. </span><span class="com">#define</span><span class="pln"> AIN_2 </span><span class="lit">9</span><span class="pln">
  37. </span><span class="com">#define</span><span class="pln"> BIN_1 </span><span class="lit">3</span><span class="pln">
  38. </span><span class="com">#define</span><span class="pln"> BIN_2 </span><span class="lit">5</span><span class="pln">
  39. </span><span class="com">///////////////////////////////////</span><span class="pln">
  40. </span><span class="com">// global variables and objects</span><span class="pln">
  41. </span><span class="com">///////////////////////////////////</span><span class="pln">
  42. </span><span class="typ">tmElements_t</span><span class="pln"> tm</span><span class="pun">;</span><span class="pln">
  43. </span><span class="kwd">int</span><span class="pln"> alarmTime</span><span class="pun">[</span><span class="lit">2</span><span class="pun">];</span><span class="pln">
  44. </span><span class="kwd">int</span><span class="pln"> knobPos</span><span class="pun">;</span><span class="pln">
  45. </span><span class="kwd">int</span><span class="pln"> velocity </span><span class="pun">=</span><span class="pln"> </span><span class="lit">70</span><span class="pun">;</span><span class="pln">
  46. </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> minInPico </span><span class="pun">=</span><span class="pln"> </span><span class="lit">60000</span><span class="pun">;</span><span class="pln">
  47. </span><span class="kwd">bool</span><span class="pln"> clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  48. </span><span class="kwd">bool</span><span class="pln"> dateState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  49. </span><span class="kwd">bool</span><span class="pln"> timeState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  50. </span><span class="kwd">bool</span><span class="pln"> alarmState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  51. </span><span class="kwd">bool</span><span class="pln"> alarmOn </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  52. </span><span class="kwd">bool</span><span class="pln"> hasAlarm </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  53. </span><span class="kwd">bool</span><span class="pln"> reStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  54. </span><span class="typ">NewPing</span><span class="pln"> sonar</span><span class="pun">(</span><span class="pln">TRIG</span><span class="pun">,</span><span class="pln"> ECHO</span><span class="pun">,</span><span class="pln"> MAX_DISTANCE</span><span class="pun">);</span><span class="pln">
  55. </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="pln"> </span><span class="lit">20</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">);</span><span class="pln">
  56. </span><span class="com">////////////////////////////////////</span><span class="pln">
  57. </span><span class="com">// clock functions</span><span class="pln">
  58. </span><span class="com">////////////////////////////////////</span><span class="pln">
  59. </span><span class="kwd">void</span><span class="pln"> displayDate</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> character</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> line</span><span class="pun">,</span><span class="pln"> </span><span class="typ">tmElements_t</span><span class="pln"> tm</span><span class="pun">)</span><span class="pln">
  60. </span><span class="pun">{</span><span class="pln">
  61. lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="pln">character</span><span class="pun">,</span><span class="pln"> line</span><span class="pun">);</span><span class="pln">
  62. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Month</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> </span><span class="lit">10</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">"0"</span><span class="pun">);</span><span class="pln">
  63. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Month</span><span class="pun">);</span><span class="pln">
  64. 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">
  65. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Day</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> </span><span class="lit">10</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">"0"</span><span class="pun">);</span><span class="pln">
  66. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Day</span><span class="pun">);</span><span class="pln">
  67. 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">
  68. 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="lit">1952</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> tm</span><span class="pun">.</span><span class="typ">Year</span><span class="pun">));</span><span class="pln">
  69. </span><span class="pun">}</span><span class="pln">
  70. </span><span class="kwd">void</span><span class="pln"> displayTime</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> character</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> line</span><span class="pun">,</span><span class="pln"> </span><span class="typ">tmElements_t</span><span class="pln"> tm</span><span class="pun">)</span><span class="pln">
  71. </span><span class="pun">{</span><span class="pln">
  72. </span><span class="typ">String</span><span class="pln"> minutes</span><span class="pun">,</span><span class="pln"> hours</span><span class="pun">;</span><span class="pln">
  73. lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="pln">character</span><span class="pun">,</span><span class="pln"> line</span><span class="pun">);</span><span class="pln">
  74. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Hour</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> </span><span class="lit">10</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">"0"</span><span class="pun">);</span><span class="pln">
  75. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Hour</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">
  76. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Minute</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> </span><span class="lit">10</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">"0"</span><span class="pun">);</span><span class="pln">
  77. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Minute</span><span class="pun">);</span><span class="pln">
  78. </span><span class="pun">}</span><span class="pln">
  79. </span><span class="com">// displays the main clock idle screen, which has the </span><span class="pln">
  80. </span><span class="com">// options to set time, date and alarm </span><span class="pln">
  81. </span><span class="kwd">void</span><span class="pln"> displayClock</span><span class="pun">()</span><span class="pln">
  82. </span><span class="pun">{</span><span class="pln">
  83. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">RTC</span><span class="pun">.</span><span class="pln">read</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  84. </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Hour</span><span class="pun">);</span><span class="pln">
  85. </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Minute</span><span class="pun">);</span><span class="pln">
  86. lcd</span><span class="pun">.</span><span class="pln">noCursor</span><span class="pun">();</span><span class="pln">
  87. displayDate</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> tm</span><span class="pun">);</span><span class="pln">
  88. displayTime</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> tm</span><span class="pun">);</span><span class="pln">
  89. </span><span class="pun">}</span><span class="pln">
  90. lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  91. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Set Time"</span><span class="pun">);</span><span class="pln">
  92. lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
  93. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Set Date"</span><span class="pun">);</span><span class="pln">
  94. lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">);</span><span class="pln">
  95. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Set Alarm"</span><span class="pun">);</span><span class="pln">
  96. lcd</span><span class="pun">.</span><span class="pln">cursor</span><span class="pun">();</span><span class="pln">
  97. </span><span class="pun">}</span><span class="pln">
  98. </span><span class="com">/////////////////////////////////////</span><span class="pln">
  99. </span><span class="com">// other functions</span><span class="pln">
  100. </span><span class="com">/////////////////////////////////////</span><span class="pln">
  101. </span><span class="com">// gives the right range when trying to set days, minutes, hours etc.</span><span class="pln">
  102. </span><span class="kwd">int</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> type</span><span class="pun">)</span><span class="pln">
  103. </span><span class="pun">{</span><span class="pln">
  104. </span><span class="kwd">int</span><span class="pln"> num</span><span class="pun">;</span><span class="pln">
  105. lcd</span><span class="pun">.</span><span class="pln">noCursor</span><span class="pun">();</span><span class="pln">
  106. </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">true</span><span class="pun">)</span><span class="pln">
  107. </span><span class="pun">{</span><span class="pln">
  108. lcd</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  109. lcd</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  110. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">type </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">
  111. num </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">24</span><span class="pun">);</span><span class="pln">
  112. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Set Hour: "</span><span class="pun">);</span><span class="pln">
  113. </span><span class="pun">}</span><span class="pln">
  114. </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">type </span><span class="pun">==</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  115. num </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">60</span><span class="pun">);</span><span class="pln">
  116. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Set Minute: "</span><span class="pun">);</span><span class="pln">
  117. </span><span class="pun">}</span><span class="pln">
  118. </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">type </span><span class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  119. num </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</span><span class="pun">);</span><span class="pln">
  120. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Set Month: "</span><span class="pun">);</span><span class="pln">
  121. </span><span class="pun">}</span><span class="pln">
  122. </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">type </span><span class="pun">==</span><span class="pln"> </span><span class="lit">4</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  123. num </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">31</span><span class="pun">);</span><span class="pln">
  124. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Set Day: "</span><span class="pun">);</span><span class="pln">
  125. </span><span class="pun">}</span><span class="pln">
  126. </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  127. num </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1980</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2050</span><span class="pun">);</span><span class="pln">
  128. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Set Year: "</span><span class="pun">);</span><span class="pln">
  129. </span><span class="pun">}</span><span class="pln">
  130. lcd</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">num</span><span class="pun">);</span><span class="pln">
  131. delay</span><span class="pun">(</span><span class="lit">200</span><span class="pun">);</span><span class="pln">
  132. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> HIGH</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
  133. </span><span class="pun">}</span><span class="pln">
  134. </span><span class="kwd">return</span><span class="pln"> num</span><span class="pun">;</span><span class="pln">
  135. </span><span class="pun">}</span><span class="pln">
  136. </span><span class="com">// autonomous control of robot traveling around area once</span><span class="pln">
  137. </span><span class="com">// alarm is set off</span><span class="pln">
  138. </span><span class="kwd">void</span><span class="pln"> alarmProtocol</span><span class="pun">()</span><span class="pln">
  139. </span><span class="pun">{</span><span class="pln">
  140. lcd</span><span class="pun">.</span><span class="pln">noCursor</span><span class="pun">();</span><span class="pln">
  141. lcd</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  142. </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">true</span><span class="pun">)</span><span class="pln">
  143. </span><span class="pun">{</span><span class="pln">
  144. </span><span class="com">// turn in place</span><span class="pln">
  145. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">sonar</span><span class="pun">.</span><span class="pln">ping_cm</span><span class="pun">()</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> THRESHOLD</span><span class="pun">)</span><span class="pln">
  146. </span><span class="pun">{</span><span class="pln">
  147. analogWrite</span><span class="pun">(</span><span class="pln">AIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  148. analogWrite</span><span class="pun">(</span><span class="pln">AIN_2</span><span class="pun">,</span><span class="pln"> velocity</span><span class="pun">);</span><span class="pln">
  149. analogWrite</span><span class="pun">(</span><span class="pln">BIN_1</span><span class="pun">,</span><span class="pln"> velocity</span><span class="pun">);</span><span class="pln">
  150. analogWrite</span><span class="pun">(</span><span class="pln">BIN_2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  151. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  152. </span><span class="pun">}</span><span class="pln">
  153. </span><span class="com">// go straight</span><span class="pln">
  154. </span><span class="kwd">else</span><span class="pln">
  155. </span><span class="pun">{</span><span class="pln">
  156. analogWrite</span><span class="pun">(</span><span class="pln">AIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  157. analogWrite</span><span class="pun">(</span><span class="pln">AIN_2</span><span class="pun">,</span><span class="pln"> velocity</span><span class="pun">);</span><span class="pln">
  158. analogWrite</span><span class="pun">(</span><span class="pln">BIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  159. analogWrite</span><span class="pun">(</span><span class="pln">BIN_2</span><span class="pun">,</span><span class="pln"> velocity</span><span class="pun">);</span><span class="pln">
  160. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  161. </span><span class="pun">}</span><span class="pln">
  162. </span><span class="com">// turn motors off</span><span class="pln">
  163. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> HIGH</span><span class="pun">)</span><span class="pln">
  164. </span><span class="pun">{</span><span class="pln">
  165. analogWrite</span><span class="pun">(</span><span class="pln">AIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  166. analogWrite</span><span class="pun">(</span><span class="pln">AIN_2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  167. analogWrite</span><span class="pun">(</span><span class="pln">BIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  168. analogWrite</span><span class="pun">(</span><span class="pln">BIN_2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  169. delay</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">);</span><span class="pln">
  170. </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
  171. </span><span class="pun">}</span><span class="pln">
  172. </span><span class="pun">}</span><span class="pln">
  173. hasAlarm </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  174. clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  175. reStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  176. </span><span class="pun">}</span><span class="pln">
  177. </span><span class="kwd">void</span><span class="pln"> setup</span><span class="pun">()</span><span class="pln">
  178. </span><span class="pun">{</span><span class="pln">
  179. pinMode</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  180. pinMode</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  181. pinMode</span><span class="pun">(</span><span class="pln">AIN_1</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  182. pinMode</span><span class="pun">(</span><span class="pln">AIN_2</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  183. pinMode</span><span class="pun">(</span><span class="pln">BIN_1</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  184. pinMode</span><span class="pun">(</span><span class="pln">BIN_2</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  185. </span><span class="com">// set motors off</span><span class="pln">
  186. analogWrite</span><span class="pun">(</span><span class="pln">AIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  187. analogWrite</span><span class="pun">(</span><span class="pln">AIN_2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  188. analogWrite</span><span class="pun">(</span><span class="pln">BIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  189. analogWrite</span><span class="pun">(</span><span class="pln">BIN_2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  190. </span><span class="com">// default clock in lcd</span><span class="pln">
  191. lcd</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">(</span><span class="lit">20</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">);</span><span class="pln">
  192. lcd</span><span class="pun">.</span><span class="pln">backlight</span><span class="pun">();</span><span class="pln">
  193. displayClock</span><span class="pun">();</span><span class="pln">
  194. lcd</span><span class="pun">.</span><span class="pln">cursor</span><span class="pun">();</span><span class="pln">
  195. </span><span class="pun">}</span><span class="pln">
  196. </span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">()</span><span class="pln">
  197. </span><span class="pun">{</span><span class="pln">
  198. </span><span class="com">// default state to go into other menus</span><span class="pln">
  199. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">clockState</span><span class="pun">)</span><span class="pln">
  200. </span><span class="pun">{</span><span class="pln">
  201. </span><span class="com">// brings you back to default menu</span><span class="pln">
  202. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">reStart</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  203. lcd</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  204. displayClock</span><span class="pun">();</span><span class="pln">
  205. reStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  206. </span><span class="pun">}</span><span class="pln">
  207. </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> currentMillis </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  208. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">currentMillis </span><span class="pun">></span><span class="pln"> minInPico</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  209. displayClock</span><span class="pun">();</span><span class="pln">
  210. currentMillis </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  211. </span><span class="pun">}</span><span class="pln">
  212. </span><span class="com">// logic for set time, date, alarm settings</span><span class="pln">
  213. knobPos </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">);</span><span class="pln">
  214. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">knobPos </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">4</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">13</span><span class="pun">,</span><span class="pln"> knobPos</span><span class="pun">);</span><span class="pln">
  215. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">hasAlarm </span><span class="pun">&&</span><span class="pln"> tm</span><span class="pun">.</span><span class="typ">Hour</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> alarmTime</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"> tm</span><span class="pun">.</span><span class="typ">Minute</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> alarmTime</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">
  216. clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  217. alarmOn </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  218. </span><span class="pun">}</span><span class="pln">
  219. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">knobPos </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"> digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> HIGH</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  220. lcd</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  221. clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  222. timeState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  223. </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="pln"> </span><span class="pun">(</span><span class="pln">knobPos </span><span class="pun">==</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> HIGH</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  224. lcd</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  225. clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  226. dateState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  227. </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="pln"> </span><span class="pun">(</span><span class="pln">knobPos </span><span class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> HIGH</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  228. lcd</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  229. clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  230. alarmState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  231. </span><span class="pun">}</span><span class="pln">
  232. delay</span><span class="pun">(</span><span class="lit">200</span><span class="pun">);</span><span class="pln">
  233. </span><span class="pun">}</span><span class="pln">
  234. </span><span class="com">// to set time</span><span class="pln">
  235. </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">timeState</span><span class="pun">)</span><span class="pln">
  236. </span><span class="pun">{</span><span class="pln">
  237. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  238. tm</span><span class="pun">.</span><span class="typ">Hour</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  239. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  240. tm</span><span class="pun">.</span><span class="typ">Minute</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="lit">2</span><span class="pun">);</span><span class="pln">
  241. timeState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  242. clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  243. reStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  244. RTC</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">);</span><span class="pln">
  245. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  246. </span><span class="pun">}</span><span class="pln">
  247. </span><span class="com">// to set date</span><span class="pln">
  248. </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">dateState</span><span class="pun">)</span><span class="pln">
  249. </span><span class="pun">{</span><span class="pln">
  250. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  251. tm</span><span class="pun">.</span><span class="typ">Month</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="lit">3</span><span class="pun">);</span><span class="pln">
  252. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  253. tm</span><span class="pun">.</span><span class="typ">Day</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="lit">4</span><span class="pun">);</span><span class="pln">
  254. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  255. tm</span><span class="pun">.</span><span class="typ">Year</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="lit">5</span><span class="pun">);</span><span class="pln">
  256. dateState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  257. clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  258. reStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  259. RTC</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">);</span><span class="pln">
  260. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  261. </span><span class="pun">}</span><span class="pln">
  262. </span><span class="com">// to set alarm</span><span class="pln">
  263. </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">alarmState</span><span class="pun">)</span><span class="pln">
  264. </span><span class="pun">{</span><span class="pln">
  265. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  266. alarmTime</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"> configureNumber</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  267. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  268. alarmTime</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"> configureNumber</span><span class="pun">(</span><span class="lit">2</span><span class="pun">);</span><span class="pln">
  269. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  270. alarmState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  271. clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  272. reStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  273. hasAlarm </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  274. RTC</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">);</span><span class="pln">
  275. delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  276. </span><span class="pun">}</span><span class="pln">
  277. </span><span class="com">// sets robot to run around area</span><span class="pln">
  278. </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">alarmOn</span><span class="pun">)</span><span class="pln"> alarmProtocol</span><span class="pun">();</span><span class="pln">
  279. </span><span class="pun">}</span>
<span class="com">/* Catch the Clock (alarm clock code)
 * Estevan Chairez
 * 
 * Description: This code runs all the logic for the alarm clock.
 * It will set up the menu screen and let the user select options,
 * trigger the motors to autonomously navigate its surrounding area
 * if the clock reaches the set alarm time and turn off to stop the alarm.
 * The potentiometer will act as a scroll-knob, the pushbutton as
 * a button to select options and numbers.
 * 
 * Pin mapping:
 * 
 * pin   | mode   | description
 * ------|--------|------------
 * A3     input     potentiometer   
 * 2      input     momentary pushbutton 
 * 4      input     TRIG pin for ultrasonic sensor
 * 6      input     ECHO pin for ultrasonic sensor
 * 3      output    B1IN for motor 1     
 * 5      output    B2IN for motor 1
 * 9      output    A2IN for motor 2
 * 10     output    A1IN for motor 2
 * 
 */</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str"><DS1307RTC.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"><LiquidCrystal_I2C.h></span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str"><NewPing.h></span><span class="pln">

</span><span class="com">#define</span><span class="pln"> POTENT A3
</span><span class="com">#define</span><span class="pln"> BUTTON </span><span class="lit">2</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> TRIG </span><span class="lit">4</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> ECHO </span><span class="lit">6</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> MAX_DISTANCE </span><span class="lit">200</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> THRESHOLD </span><span class="lit">40</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> AIN_1 </span><span class="lit">10</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> AIN_2 </span><span class="lit">9</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> BIN_1 </span><span class="lit">3</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> BIN_2 </span><span class="lit">5</span><span class="pln">

</span><span class="com">///////////////////////////////////</span><span class="pln">
</span><span class="com">// global variables and objects</span><span class="pln">
</span><span class="com">///////////////////////////////////</span><span class="pln">

</span><span class="typ">tmElements_t</span><span class="pln"> tm</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> alarmTime</span><span class="pun">[</span><span class="lit">2</span><span class="pun">];</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> knobPos</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> velocity </span><span class="pun">=</span><span class="pln"> </span><span class="lit">70</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> minInPico </span><span class="pun">=</span><span class="pln"> </span><span class="lit">60000</span><span class="pun">;</span><span class="pln">

</span><span class="kwd">bool</span><span class="pln"> clockState </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">bool</span><span class="pln"> dateState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> timeState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> alarmState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> alarmOn </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> hasAlarm </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> reStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">

</span><span class="typ">NewPing</span><span class="pln"> sonar</span><span class="pun">(</span><span class="pln">TRIG</span><span class="pun">,</span><span class="pln"> ECHO</span><span class="pun">,</span><span class="pln"> MAX_DISTANCE</span><span class="pun">);</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="pln"> </span><span class="lit">20</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">);</span><span class="pln">


</span><span class="com">////////////////////////////////////</span><span class="pln">
</span><span class="com">// clock functions</span><span class="pln">
</span><span class="com">////////////////////////////////////</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> displayDate</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> character</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> line</span><span class="pun">,</span><span class="pln"> </span><span class="typ">tmElements_t</span><span class="pln"> tm</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="pln">character</span><span class="pun">,</span><span class="pln"> line</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Month</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> </span><span class="lit">10</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">"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="pln">tm</span><span class="pun">.</span><span class="typ">Month</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="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Day</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> </span><span class="lit">10</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">"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="pln">tm</span><span class="pun">.</span><span class="typ">Day</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">
  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="lit">1952</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> tm</span><span class="pun">.</span><span class="typ">Year</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"> displayTime</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> character</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> line</span><span class="pun">,</span><span class="pln"> </span><span class="typ">tmElements_t</span><span class="pln"> tm</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="typ">String</span><span class="pln"> minutes</span><span class="pun">,</span><span class="pln"> hours</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="pln">character</span><span class="pun">,</span><span class="pln"> line</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Hour</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> </span><span class="lit">10</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">"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="pln">tm</span><span class="pun">.</span><span class="typ">Hour</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="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">tm</span><span class="pun">.</span><span class="typ">Minute</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> </span><span class="lit">10</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">"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="pln">tm</span><span class="pun">.</span><span class="typ">Minute</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// displays the main clock idle screen, which has the </span><span class="pln">
</span><span class="com">// options to set time, date and alarm </span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> displayClock</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">RTC</span><span class="pun">.</span><span class="pln">read</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">))</span><span class="pln"> </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="pln">tm</span><span class="pun">.</span><span class="typ">Hour</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="pln">tm</span><span class="pun">.</span><span class="typ">Minute</span><span class="pun">);</span><span class="pln">
    lcd</span><span class="pun">.</span><span class="pln">noCursor</span><span class="pun">();</span><span class="pln">
    displayDate</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> tm</span><span class="pun">);</span><span class="pln">
    displayTime</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> tm</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">10</span><span class="pun">,</span><span class="pln"> </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">"Set Time"</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">10</span><span class="pun">,</span><span class="pln"> </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="str">"Set Date"</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">10</span><span class="pun">,</span><span class="pln"> </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="str">"Set Alarm"</span><span class="pun">);</span><span class="pln">
  lcd</span><span class="pun">.</span><span class="pln">cursor</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/////////////////////////////////////</span><span class="pln">
</span><span class="com">// other functions</span><span class="pln">
</span><span class="com">/////////////////////////////////////</span><span class="pln">

</span><span class="com">// gives the right range when trying to set days, minutes, hours etc.</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> type</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"> num</span><span class="pun">;</span><span class="pln">
  lcd</span><span class="pun">.</span><span class="pln">noCursor</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">true</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">clear</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">4</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">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">type </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">
      num </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">24</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">"Set Hour: "</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="pln"> </span><span class="pun">(</span><span class="pln">type </span><span class="pun">==</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      num </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">60</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">"Set Minute: "</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="pln"> </span><span class="pun">(</span><span class="pln">type </span><span class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      num </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</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">"Set Month: "</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="pln"> </span><span class="pun">(</span><span class="pln">type </span><span class="pun">==</span><span class="pln"> </span><span class="lit">4</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      num </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">31</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">"Set Day: "</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">
      num </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1980</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2050</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">"Set Year: "</span><span class="pun">);</span><span class="pln">
    </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">num</span><span class="pun">);</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">200</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> HIGH</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> num</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// autonomous control of robot traveling around area once</span><span class="pln">
</span><span class="com">// alarm is set off</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> alarmProtocol</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">noCursor</span><span class="pun">();</span><span class="pln">
  lcd</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">true</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// turn in place</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">sonar</span><span class="pun">.</span><span class="pln">ping_cm</span><span class="pun">()</span><span class="pln"> </span><span class="pun"><</span><span class="pln"> THRESHOLD</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">AIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">AIN_2</span><span class="pun">,</span><span class="pln"> velocity</span><span class="pun">);</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">BIN_1</span><span class="pun">,</span><span class="pln"> velocity</span><span class="pun">);</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">BIN_2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
      delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    </span><span class="com">// go straight</span><span class="pln">
    </span><span class="kwd">else</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">AIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">AIN_2</span><span class="pun">,</span><span class="pln"> velocity</span><span class="pun">);</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">BIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">BIN_2</span><span class="pun">,</span><span class="pln"> velocity</span><span class="pun">);</span><span class="pln">
      delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    </span><span class="com">// turn motors off</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> HIGH</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">AIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">AIN_2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">BIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
      analogWrite</span><span class="pun">(</span><span class="pln">BIN_2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
      delay</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">);</span><span class="pln">
      </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  hasAlarm </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  reStart </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">void</span><span class="pln"> setup</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="pln">POTENT</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">BUTTON</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">AIN_1</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">AIN_2</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">BIN_1</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">BIN_2</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  </span><span class="com">// set motors off</span><span class="pln">
  analogWrite</span><span class="pun">(</span><span class="pln">AIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  analogWrite</span><span class="pun">(</span><span class="pln">AIN_2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  analogWrite</span><span class="pun">(</span><span class="pln">BIN_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  analogWrite</span><span class="pun">(</span><span class="pln">BIN_2</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">// default clock in lcd</span><span class="pln">
  lcd</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">(</span><span class="lit">20</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</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">
  displayClock</span><span class="pun">();</span><span class="pln">
  lcd</span><span class="pun">.</span><span class="pln">cursor</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"> loop</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="com">// default state to go into other menus</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">clockState</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// brings you back to default menu</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">reStart</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">clear</span><span class="pun">();</span><span class="pln">
      displayClock</span><span class="pun">();</span><span class="pln">
      reStart </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="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> currentMillis </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">currentMillis </span><span class="pun">></span><span class="pln"> minInPico</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      displayClock</span><span class="pun">();</span><span class="pln">
      currentMillis </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="com">// logic for set time, date, alarm settings</span><span class="pln">
    knobPos </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">POTENT</span><span class="pun">),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">knobPos </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">4</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">13</span><span class="pun">,</span><span class="pln"> knobPos</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">hasAlarm </span><span class="pun">&&</span><span class="pln"> tm</span><span class="pun">.</span><span class="typ">Hour</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> alarmTime</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"> tm</span><span class="pun">.</span><span class="typ">Minute</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> alarmTime</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">
      clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
      alarmOn </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">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">knobPos </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"> digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> HIGH</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">clear</span><span class="pun">();</span><span class="pln">
      clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
      timeState </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="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">knobPos </span><span class="pun">==</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> HIGH</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">clear</span><span class="pun">();</span><span class="pln">
      clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
      dateState </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="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">knobPos </span><span class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> HIGH</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">clear</span><span class="pun">();</span><span class="pln">
      clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
      alarmState </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">
    delay</span><span class="pun">(</span><span class="lit">200</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="com">// to set time</span><span class="pln">
  </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">timeState</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">100</span><span class="pun">);</span><span class="pln">
    tm</span><span class="pun">.</span><span class="typ">Hour</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
    tm</span><span class="pun">.</span><span class="typ">Minute</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="lit">2</span><span class="pun">);</span><span class="pln">
    timeState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
    clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
    reStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
    RTC</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">);</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="com">// to set date</span><span class="pln">
  </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">dateState</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">100</span><span class="pun">);</span><span class="pln">
    tm</span><span class="pun">.</span><span class="typ">Month</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="lit">3</span><span class="pun">);</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
    tm</span><span class="pun">.</span><span class="typ">Day</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="lit">4</span><span class="pun">);</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
    tm</span><span class="pun">.</span><span class="typ">Year</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> configureNumber</span><span class="pun">(</span><span class="lit">5</span><span class="pun">);</span><span class="pln">
    dateState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
    clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
    reStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
    RTC</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">);</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="com">// to set alarm</span><span class="pln">
  </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">alarmState</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">100</span><span class="pun">);</span><span class="pln">
    alarmTime</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"> configureNumber</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
    alarmTime</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"> configureNumber</span><span class="pun">(</span><span class="lit">2</span><span class="pun">);</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
    alarmState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
    clockState </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
    reStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
    hasAlarm </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
    RTC</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">tm</span><span class="pun">);</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="com">// sets robot to run around area</span><span class="pln">
  </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">alarmOn</span><span class="pun">)</span><span class="pln"> alarmProtocol</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span>

 

 

Lights Code

  1. <span class="com">/* Catch the Clock (lights code)
  2. * Estevan Chairez
  3. *
  4. * Description: This code runs the logic for the flickering
  5. * lights portion of the project. If the potentiometer reads
  6. * a value under a certain threshold, it will flicker the lights
  7. * and if not, the lights stay off.
  8. *
  9. * Pin mapping:
  10. *
  11. * pin | mode | description
  12. * ------|--------|------------
  13. * A0 input potentiometer
  14. * 10 output neopixel strip
  15. */</span><span class="pln">
  16. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><Adafruit_NeoPixel.h></span><span class="pln">
  17. </span><span class="com">#define</span><span class="pln"> LED </span><span class="lit">10</span><span class="pln">
  18. </span><span class="com">#define</span><span class="pln"> LED_COUNT </span><span class="lit">42</span><span class="pln">
  19. </span><span class="com">#define</span><span class="pln"> PHOTO A0
  20. </span><span class="com">#define</span><span class="pln"> THRESH </span><span class="lit">600</span><span class="pln">
  21. </span><span class="typ">Adafruit_NeoPixel</span><span class="pln"> strip </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Adafruit_NeoPixel</span><span class="pun">(</span><span class="pln">LED_COUNT</span><span class="pun">,</span><span class="pln"> LED</span><span class="pun">,</span><span class="pln"> NEO_GRB </span><span class="pun">+</span><span class="pln"> NEO_KHZ800</span><span class="pun">);</span><span class="pln">
  22. </span><span class="typ">uint32_t</span><span class="pln"> white </span><span class="pun">=</span><span class="pln"> strip</span><span class="pun">.</span><span class="typ">Color</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">);</span><span class="pln">
  23. </span><span class="kwd">void</span><span class="pln"> setup</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  24. pinMode</span><span class="pun">(</span><span class="pln">PHOTO</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  25. strip</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">();</span><span class="pln">
  26. strip</span><span class="pun">.</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
  27. </span><span class="pun">}</span><span class="pln">
  28. </span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">(){</span><span class="pln">
  29. </span><span class="kwd">int</span><span class="pln"> photoVal </span><span class="pun">=</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">PHOTO</span><span class="pun">);</span><span class="pln">
  30. </span><span class="com">// flash lights</span><span class="pln">
  31. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">photoVal </span><span class="pun"><</span><span class="pln"> THRESH</span><span class="pun">){</span><span class="pln">
  32. strip</span><span class="pun">.</span><span class="pln">fill</span><span class="pun">(</span><span class="pln">white</span><span class="pun">);</span><span class="pln">
  33. strip</span><span class="pun">.</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
  34. delay</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
  35. strip</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  36. strip</span><span class="pun">.</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
  37. delay</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
  38. </span><span class="pun">}</span><span class="pln">
  39. </span><span class="com">// lights off</span><span class="pln">
  40. </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  41. strip</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  42. strip</span><span class="pun">.</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
  43. </span><span class="pun">}</span><span class="pln">
  44. </span><span class="pun">}</span>
<span class="com">/* Catch the Clock (lights code)
 * Estevan Chairez
 * 
 * Description: This code runs the logic for the flickering
 * lights portion of the project. If the potentiometer reads
 * a value under a certain threshold, it will flicker the lights
 * and if not, the lights stay off.
 * 
 * Pin mapping:
 * 
 * pin   | mode   | description
 * ------|--------|------------
 * A0     input     potentiometer   
 * 10     output    neopixel strip 
 */</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str"><Adafruit_NeoPixel.h></span><span class="pln">

</span><span class="com">#define</span><span class="pln"> LED </span><span class="lit">10</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> LED_COUNT </span><span class="lit">42</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> PHOTO A0
</span><span class="com">#define</span><span class="pln"> THRESH </span><span class="lit">600</span><span class="pln">

</span><span class="typ">Adafruit_NeoPixel</span><span class="pln"> strip </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Adafruit_NeoPixel</span><span class="pun">(</span><span class="pln">LED_COUNT</span><span class="pun">,</span><span class="pln"> LED</span><span class="pun">,</span><span class="pln"> NEO_GRB </span><span class="pun">+</span><span class="pln"> NEO_KHZ800</span><span class="pun">);</span><span class="pln">
</span><span class="typ">uint32_t</span><span class="pln"> white </span><span class="pun">=</span><span class="pln"> strip</span><span class="pun">.</span><span class="typ">Color</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">);</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="pun">{</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="pln">PHOTO</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln"> 

  strip</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">();</span><span class="pln">
  strip</span><span class="pun">.</span><span class="pln">show</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"> loop</span><span class="pun">(){</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> photoVal </span><span class="pun">=</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">PHOTO</span><span class="pun">);</span><span class="pln">

  </span><span class="com">// flash lights</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">photoVal </span><span class="pun"><</span><span class="pln"> THRESH</span><span class="pun">){</span><span class="pln">
    strip</span><span class="pun">.</span><span class="pln">fill</span><span class="pun">(</span><span class="pln">white</span><span class="pun">);</span><span class="pln">
    strip</span><span class="pun">.</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
    strip</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
    strip</span><span class="pun">.</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
    delay</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="com">// lights off</span><span class="pln">
  </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    strip</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
    strip</span><span class="pun">.</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span>