Overview

Slap on light switch

Front face of the Slap On Light Switch

The device detects vibrations of a dry wall, and toggles a power source for lights and other everyday appliances.

Process

design choices made

Wiring of the Powerswitch Tail before changing hardware

In my first working prototype, I was able to use a Powerswitch Tail from adafruit which was lended from IDeATe. The Powerswitch Tail is a discontinued device that takes 5V input to toggle a 120V outlet. The use of the Powerswitch Tail allowed me to work with high voltage wall plugs without actually wiring into it.  However, I decided that it would seem pointless to make a device to help with my everyday life if I had to return it after the project. So I had to look for an alternative. This choice meant I had to push back the hardware testing and exterior design of the project, but I felt like it was worth it. I was able to find an alternative Four Outlet Power Relay Module. It was bulkier but worked after tweaking the code as instead of a power, ground, data input found in the Powerswitch Tail, it was just a Vin and Vout.

Addition of button to the circuitry

Another choice I had to make was the process of resetting the device. Originally, I had wanted zero input beyond the wall knocking into the device to simplify the process. However, this would’ve meant that anytime I needed to debug, I would need to connect the arduino to my laptop. I decided that the two main things I needed to ever edit was the zero and the sensitivity of the device. So I added a button and a potentiometer to my project.

additional process photos

Testing data input from accelerometer’s reaction to dry wall knocking. As I only theorized about the detection during the planning phase

Complete Circuitry with accelerometer, potentiometer, button, Power Relay, and LCD output

Complete laser cut exterior

Discussion

Response

It looks neatly done.It’s not very marketable in the sense that there is a very specific reason you wanted to make this. It works great.”

I think that it is actually very marketable as it is very versatile. Since the device controls just a regular wall plug, it could apply to a lot of different devices. I can see that the input could be too specific, but there are dry walls in every building, and it could work very well in an apartment or house if the dry wall separates two rooms of the same house.

I like the novelty of the device. Good catch with the debouncing filter as well. Seems quite cathartic too (if you’re using knocks to toggle the light).

I think I should explore the therapeutic aspect of the device more. A lot of feedback, written and verbal, talked about how cathartic and fun it is to use.

self critique

I am very happy with the project. This is the first “thing” I think I’ve made on my own since coming to CMU, so the design process not something I was familiar with. As such, I think I gave myself an easier task technology wise. I think I have created what I had in mind. I do think I could’ve done better with the designing stage, as I am prone to just play around with parts and tinker until I figure everything out.

what I’ve learned

It was the first time I used the laser cutter for a project like this. I think that I am now better and designing and planning out a box using the laser cutter, as I think I spent ages on figuring out the corners and slots for the box. I’ve also learned how bright and intense LCD lights are, which defeats the purpose of my light switch if I have a constant LCD light shining in the corner.

next steps

I think the next step is downsizing the device. I think that will take using an arduino nano, as well as figuring out how the power relay works so that I can custom make my own. I would separate the accelerometer from the rest of the device so that I could attach it further away from the wall plug. I have found that the more central the sensor is, the more sensitive it is – which makes sense from a physics perspective, the center of a string moves more during a vibration, say on a guitar.

Technical Information

schematic

Schematic from fritzing

Code
  1. <span class="com">/*
  2. * Slap On Light Switch
  3. *
  4. * Description: Detects variation in the z-axis of the accelerometer, and
  5. * toggles the power relay by sending toggling the 5V power supply to the
  6. * relay. The detection is controlled by a potentiometer for its sensitivity
  7. * and button for its zero
  8. *
  9. * pin mapping:
  10. *
  11. * pin mode descr
  12. * A0 input potentiometer to control sensitivity
  13. * A3 input z-axis of accelerometer
  14. * SDA/SCL I2C LCD Display
  15. * 7 input button to zero
  16. * 10 output Power Relay Toggle
  17. */</span><span class="pln">
  18. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><Wire.h></span><span class="pln">
  19. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><LiquidCrystal_I2C.h></span><span class="pln">
  20. </span><span class="typ">LiquidCrystal_I2C</span><span class="pln"> screen</span><span class="pun">(</span><span class="lit">0x27</span><span class="pun">,</span><span class="pln"> </span><span class="lit">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln"> </span><span class="com">//create screen called screen</span><span class="pln">
  21. </span><span class="com">//setup timing</span><span class="pln">
  22. </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> timer </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  23. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> INTERVAL </span><span class="pun">=</span><span class="pln"> </span><span class="lit">500</span><span class="pun">;</span><span class="pln">
  24. </span><span class="com">// read the three axes of an analog accelerometer</span><span class="pln">
  25. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> ZPIN </span><span class="pun">=</span><span class="pln"> A3</span><span class="pun">;</span><span class="pln">
  26. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> TAILPIN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln">
  27. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> RESETPIN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">7</span><span class="pun">;</span><span class="pln">
  28. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> POTPIN </span><span class="pun">=</span><span class="pln"> A0</span><span class="pun">;</span><span class="pln">
  29. </span><span class="kwd">int</span><span class="pln"> threshold</span><span class="pun">;</span><span class="pln">
  30. </span><span class="kwd">int</span><span class="pln"> sensitive</span><span class="pun">;</span><span class="pln">
  31. </span><span class="kwd">bool</span><span class="pln"> lightmode </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  32. </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">
  33. </span><span class="com">//pin setups</span><span class="pln">
  34. pinMode</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  35. pinMode</span><span class="pun">(</span><span class="pln">TAILPIN</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  36. pinMode</span><span class="pun">(</span><span class="pln">RESETPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  37. pinMode</span><span class="pun">(</span><span class="pln">POTPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  38. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">(</span><span class="lit">9600</span><span class="pun">);</span><span class="pln">
  39. </span><span class="com">//turn off power relay</span><span class="pln">
  40. digitalWrite</span><span class="pun">(</span><span class="pln">TAILPIN</span><span class="pun">,</span><span class="pln"> HIGH</span><span class="pun">);</span><span class="pln">
  41. threshold </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">);</span><span class="pln">
  42. </span><span class="com">//set up screen</span><span class="pln">
  43. screen</span><span class="pun">.</span><span class="pln">init</span><span class="pun">();</span><span class="pln">
  44. screen</span><span class="pun">.</span><span class="pln">backlight</span><span class="pun">();</span><span class="pln">
  45. screen</span><span class="pun">.</span><span class="pln">home</span><span class="pun">();</span><span class="pln">
  46. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"booting up"</span><span class="pun">);</span><span class="pln">
  47. delay</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
  48. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">threshold </span><span class="pun">==</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">)){</span><span class="pln">
  49. threshold </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">);</span><span class="pln">
  50. </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">
  51. threshold </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">);</span><span class="pln">
  52. </span><span class="pun">}</span><span class="pln">
  53. </span><span class="pun">}</span><span class="pln">
  54. </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">
  55. </span><span class="kwd">int</span><span class="pln"> measured </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">);</span><span class="pln">
  56. </span><span class="kwd">int</span><span class="pln"> reset </span><span class="pun">=</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">RESETPIN</span><span class="pun">);</span><span class="pln">
  57. </span><span class="com">//set sensitivity</span><span class="pln">
  58. sensitive </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">POTPIN</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">1022</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">20</span><span class="pun">);</span><span class="pln">
  59. </span><span class="com">//detects knock input toggle switch</span><span class="pln">
  60. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">abs</span><span class="pun">(</span><span class="pln">measured </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"> sensitive</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  61. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">lightmode</span><span class="pun">){</span><span class="pln">
  62. digitalWrite</span><span class="pun">(</span><span class="pln">TAILPIN</span><span class="pun">,</span><span class="pln"> HIGH</span><span class="pun">);</span><span class="pln">
  63. lightmode </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  64. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  65. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">" ON"</span><span class="pun">);</span><span class="pln">
  66. delay</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
  67. </span><span class="pun">}</span><span class="pln">
  68. </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  69. digitalWrite</span><span class="pun">(</span><span class="pln">TAILPIN</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  70. lightmode </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  71. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  72. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"OFF"</span><span class="pun">);</span><span class="pln">
  73. delay</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
  74. </span><span class="pun">}}</span><span class="pln">
  75. </span><span class="com">//resetting the zero</span><span class="pln">
  76. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">reset </span><span class="pun">==</span><span class="pln"> HIGH</span><span class="pun">){</span><span class="pln">
  77. screen</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  78. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"resetting"</span><span class="pun">);</span><span class="pln">
  79. threshold </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">);</span><span class="pln">
  80. delay</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
  81. </span><span class="pun">}</span><span class="pln">
  82. </span><span class="com">//timer for LCD</span><span class="pln">
  83. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">millis</span><span class="pun">()</span><span class="pln"> </span><span class="pun">>=</span><span class="pln"> timer</span><span class="pun">){</span><span class="pln">
  84. </span><span class="com">//reset screen</span><span class="pln">
  85. screen</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  86. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  87. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"b: m:"</span><span class="pun">);</span><span class="pln">
  88. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  89. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"s:"</span><span class="pun">);</span><span class="pln">
  90. </span><span class="com">//print numbers</span><span class="pln">
  91. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  92. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">threshold</span><span class="pun">);</span><span class="pln">
  93. screen</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="lit">0</span><span class="pun">);</span><span class="pln">
  94. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">measured</span><span class="pun">);</span><span class="pln">
  95. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  96. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sensitive</span><span class="pun">);</span><span class="pln">
  97. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  98. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">lightmode</span><span class="pun">){</span><span class="pln">
  99. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">" ON"</span><span class="pun">);</span><span class="pln">
  100. </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">
  101. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"OFF"</span><span class="pun">);</span><span class="pln">
  102. </span><span class="pun">}</span><span class="pln">
  103. timer </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">()</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> INTERVAL</span><span class="pun">;</span><span class="pln">
  104. </span><span class="pun">}</span><span class="pln">
  105. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">threshold</span><span class="pun">);</span><span class="pln">
  106. </span><span class="typ">Serial</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">
  107. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">measured</span><span class="pun">);</span><span class="pln">
  108. </span><span class="typ">Serial</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">
  109. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">lightmode</span><span class="pun">);</span><span class="pln">
  110. </span><span class="typ">Serial</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">
  111. </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">reset</span><span class="pun">);</span><span class="pln">
  112. </span><span class="pun">}</span>
<span class="com">/*
 * Slap On Light Switch
 *
 * Description: Detects variation in the z-axis of the accelerometer, and
 * toggles the power relay by sending toggling the 5V power supply to the
 * relay. The detection is controlled by a potentiometer for its sensitivity
 * and button for its zero
 * 
 * pin mapping:
 * 
 * pin      mode      descr
 * A0       input     potentiometer to control sensitivity
 * A3       input     z-axis of accelerometer
 * SDA/SCL            I2C LCD Display    
 * 7        input     button to zero
 * 10       output    Power Relay Toggle
 */</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="typ">LiquidCrystal_I2C</span><span class="pln"> screen</span><span class="pun">(</span><span class="lit">0x27</span><span class="pun">,</span><span class="pln"> </span><span class="lit">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln"> </span><span class="com">//create screen called screen</span><span class="pln">

</span><span class="com">//setup timing</span><span class="pln">
</span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> timer </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> INTERVAL </span><span class="pun">=</span><span class="pln"> </span><span class="lit">500</span><span class="pun">;</span><span class="pln">

</span><span class="com">// read the three axes of an analog accelerometer</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> ZPIN </span><span class="pun">=</span><span class="pln"> A3</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> TAILPIN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> RESETPIN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">7</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> POTPIN </span><span class="pun">=</span><span class="pln"> A0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> threshold</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> sensitive</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> lightmode </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">void</span><span class="pln"> setup</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">//pin setups</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="pln">ZPIN</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">TAILPIN</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">RESETPIN</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">POTPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  
  </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">(</span><span class="lit">9600</span><span class="pun">);</span><span class="pln">
  </span><span class="com">//turn off power relay</span><span class="pln">
  digitalWrite</span><span class="pun">(</span><span class="pln">TAILPIN</span><span class="pun">,</span><span class="pln"> HIGH</span><span class="pun">);</span><span class="pln">
  threshold </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">);</span><span class="pln">
  
  </span><span class="com">//set up screen</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">init</span><span class="pun">();</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">backlight</span><span class="pun">();</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">home</span><span class="pun">();</span><span class="pln">
  screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"booting up"</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="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">threshold </span><span class="pun">==</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">)){</span><span class="pln">
    threshold </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</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">
    threshold </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">void</span><span class="pln"> loop</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"> measured </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> reset </span><span class="pun">=</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">RESETPIN</span><span class="pun">);</span><span class="pln">
  </span><span class="com">//set sensitivity</span><span class="pln">
  sensitive </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">POTPIN</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">1022</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">20</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//detects knock input toggle switch</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">abs</span><span class="pun">(</span><span class="pln">measured </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"> sensitive</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">lightmode</span><span class="pun">){</span><span class="pln">
      digitalWrite</span><span class="pun">(</span><span class="pln">TAILPIN</span><span class="pun">,</span><span class="pln"> HIGH</span><span class="pun">);</span><span class="pln">
      lightmode </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
      screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
      screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">" ON"</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="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      digitalWrite</span><span class="pun">(</span><span class="pln">TAILPIN</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
      lightmode </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
      screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
      screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"OFF"</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">//resetting the zero</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">reset </span><span class="pun">==</span><span class="pln"> HIGH</span><span class="pun">){</span><span class="pln">
    screen</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
    screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"resetting"</span><span class="pun">);</span><span class="pln">
    threshold </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">ZPIN</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">//timer for LCD</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">millis</span><span class="pun">()</span><span class="pln"> </span><span class="pun">>=</span><span class="pln"> timer</span><span class="pun">){</span><span class="pln">
      </span><span class="com">//reset screen</span><span class="pln">
      screen</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
      screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
      screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"b:      m:"</span><span class="pun">);</span><span class="pln">
      screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
      screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"s:"</span><span class="pun">);</span><span class="pln">

      </span><span class="com">//print numbers</span><span class="pln">
      screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
      screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">threshold</span><span class="pun">);</span><span class="pln">
      screen</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="lit">0</span><span class="pun">);</span><span class="pln">
      screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">measured</span><span class="pun">);</span><span class="pln">
      screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
      screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sensitive</span><span class="pun">);</span><span class="pln">
      screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</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">lightmode</span><span class="pun">){</span><span class="pln">
        screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">" ON"</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">
        screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"OFF"</span><span class="pun">);</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
      timer </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">()</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> INTERVAL</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="kwd">print</span><span class="pun">(</span><span class="pln">threshold</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">Serial</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="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">measured</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">Serial</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="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">lightmode</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">Serial</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="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">reset</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span>