Overview

At two preset time, the alarm robot wanders around randomly and repeats a melody  until it is placed next to the RFID  cards in bathroom or on bed.

 

 

This is the behavior of the robot when it is reminding the user to take a shower or go to bed. A USB power bank is used to provide power as I found out 4 AAA batteries do not provide enough current to support two motors and two speakers playing melody at the same time. However, the batteries do provide enough current when the speakers only vibrate constantly.

This shows a closer look at the working device. When the appropriate RFID card is presented, the device stops moving and playing melody.

The top view of the device.

The elevation view of the device. The RFID reader sticks out so that it can get closer to the RFID card when it is reading.

 

The front view of the device. The parts are arranged in a way to mimic the “face” of a robot, with the speakers being the “eyes” and the batteries case being the “nose”.

Process Image and Review

Motivation and Original Design

I have the problem of procrastinating when it comes to going to sleep. When I am busy during the week, I tend to stay up late working. When I am not as busy, I still go to bed late by watching all kinds of contends. Moreover, I tend to take shower right before I go to bed, which makes the bed time even latter.  I tried to set alarm on my phone to remind myself the time for shower and sleep, but it does not work well as I usually just stop the alarm.  Therefore, I wanted to build an assistive device that really grabs my attention and bring me to physical places at appropriate time.

The original design from the first ideating.

The original design is a small square car that carries two speakers, an electromagnetic sensor, a servo motor, and two continuous servo motors. Magnets will be placed in bathroom and on bed, and the electromagnetic sensor is there to detect the change of EM field, which indicates the physical locations.

The original design of the supporting wheel.

The supporting wheel is added to maintain the balance of the body of the device as well as to help the device turn left or right driven by a servo motor. The supporting wheel is free to rotate like the wheel of a chair.

Prototyping

During prototyping, I changed the continuous servo motors to DC motors because they supply much more power. I also realized that it is very difficult to attach a wheel to the servo motor, and it is much easier to use a  ball roller transfer as a supporting wheel. I was lucky enough to find a ball roller transfer that has the height similar to the radius of a toy tire, which the base of the device can sit on.

Ball roller transfer.

Then I went on to build the circuit on a breadboard. The wiring part is not bad because there are resources on the course website or online that are helpful.

The circuit of the engineering prototype.

However, I had some trouble writing codes for parts that I was not familiar with. For example, I had to learn how to use the library for the RFID reader MFRC522  to write functions that check whether the unique “ID” of the RFID card is the one of the card in the bathroom or on the bed. However, I had the most trouble figuring out how to make the motors and speakers perform two different sequences of actions spontaneously. Then I realized I can solve it by using the blink-without-block tactic. But instead of modifying boolean variables, I have to make a “time map” and assign tasks to the parts in each time interval. However, this is not the best approach when the sequence of actions and hence the time map become long. I will introduce another approach in latter section.

In the function be_annoying, the timer diff_motor and the motor_timemap checks determine which motion to perform.

Redesigning and Building

Because the circuit of the prototype is very messy and clumpy, I decided to solder the wires and components onto a circuit board so that they can fit onto a small robot car. It turned out to be a very time-consuming process but it makes the circuit clear, strong, and secure.

The wires and parts are all soldered onto the circuit board. To make more room from the board, I have cut the legs of the transistor on top.

I then redesign the body of the robot to fit the dimension of the circuit board and the parts.  The front part of the vehicle is not covered up so that the speakers and the RFID reader to extend out for better performance. The circuit is covered by the “shields” that insert into the groves on the side boards.  The idea of the “shields” are inspired by the design of the back of some Lamborghini.

Refined design of the body of the robot.

The shield above the back window.                                                                  https://www.motor1.com/news/78593/after-50-years-the-lovely-lamborghini-miura-is-back/

The sketch of the components. Notice that the grooves on the curved side of the right components are for the shields.

Unfortunately, the “shields” could not be used because the height of the Arduino pro mini is taller than expected due to the soldering on the circuit board. In other words, the soldering tips at the back of the circuit board raise the components up, which get into the way of the shields. Unfortunately, because I was not able to use the laser cutter again before the final critique, I had to abandon the idea and decided to make a pair of wings instead. As a result, the device has a raw look without enclosure.

Finally, the device was built by gluing the parts together and mounting the ball roller transfer onto the base with screws and nuts.

Playing a Song

Because the device was too annoying when the speakers only vibrate constantly to make loud noises, I decided to play a song instead. With two speakers, I can play two melodies at the same time.

 

The lists of notes and the lists of beats. Each note corresponds to a specific frequency for the tone() function.

With a list of notes and a list of beats, the speaker can go through the melody using the blink-without-block technique. However, because there are substantial notes and beats,  I could not use “if” anymore as it gets too tedious. As a result, a loop was written to generate the time-map by looping through the list of beat and add the previous beats up.

The loop that generate the time map for speaker 1.

Finally, a global variable “counter” determines which note to play and what beat it has.

The code that tells the speaker what note to play and how long to play it.

Discussion

Feedback

One of the feedback suggested to build “a cover” to hide the device’s components while another suggested putting “a shell” and bunch of screws” around the battery .  I really like these feedback because I will have a less chance to hack the system when I am not aware of the circuit and the batteries are difficult to remove. Instead of removing the batteries, now the only option to make the machine stop is to to the designated physical place to get the RFID card. As a result, the device can better serve the original purpose of making me take shower or go to sleep.

There are also feedback about “adding a flash light” and adding an interface for “adjustable time for the alarm”. With a flashlight, the robot car can grab more attention, especially at night. And with an interface to adjust the time, the device can be more user-friendly and convenient to use. Therefore, I think those are great feedback and potential improvement to the device.

Self Critique  and What I have learnt

I am pleased about the function that the device can perform. All the parts, including the RFID reader and the motors, work better than I expected. As a result, the device can perfectly perform its intended job. However, I am not satisfied about the design of the final product. As mentioned before, the robot looks rather raw without cover and the wires of the parts still look kind of messy.

One of the biggest lesson I learnt is that I have to make a clear schedule before starting the project. In this project, I only have a rough schedule my mind and as I spent more and more time on the technical issues, I had to push back the task of designing until the very end. And it is a very bad idea to push anything to the very end. Instead, I should have a schedule that assigns equal time to technical and designing tasks. Moreover, if there is a technical problem that is very time consuming, I should stick to the schedule and move on. If I have more time, I can come back to the problem and finish the feature. I also learnt that it is challenging to write code for arduino if I am not familiar with the language of C. But it is also not too bad because there are many references that I can rely on.

Next Step

If I was to build another iteration, I would design a cover for the robot that the speakers and  RFID reader are fixed at the surface. I would use a USB power bank instead of batteries to power the robot so that enough current would be supplied. I would use the design of the “shield” to cover up the components. I would add a LCD and a rotating switch to make an user interface for adjusting time, changing the color of the flashlight, and changing songs.

Technical information

Schematic

Code

  1. <span class="com">/*Sleep Time Reminder
  2. * Zerui Huo
  3. * The code makes two motors spin and two speaker vibrate at a preset time until the RFID reader
  4. detects the desired RFID card.
  5. *Pin mapping:
  6. pin | mode | description
  7. ------|--------|------------
  8. 2 OUTPUT The pin that sends pwm signal to the motor driver and controls tire 1
  9. 3 OUTPUT The pin that sends pwm signal to the motor driver and controls tire 1
  10. 4 OUTPUT The pin that sends pwm signal to the motor driver and controls tire 2
  11. 5 OUTPUT The pin that sends pwm signal to the motor driver and controls tire 2
  12. 6 OUTPUT The pin that is connect to transistor to control speaker 1
  13. 7 OUTPUT The pin that is connect to transistor to control speaker 2
  14. 9 SDA pin for the RFID reader
  15. 10 RST pin for the RFID reader
  16. 11 MOSI pin for the RFID reader
  17. 12 MISO pin for the RFID reader
  18. 13 SCK pin for the RFID reader
  19. A4 SDA pin for the real time clock
  20. A5 SCL pin for the real time clock
  21. VCC The pin for power to go into the Arduino pro mini
  22. *The code in the functions set_motor_pwm and set_two_motors_pwm are inspired by the website https://courses.ideate.cmu.edu/16-223/f2016/text/ex/Arduino/DRV8833-motor-driver/DRV8833-motor-driver.html.
  23. The function getID is from the website https://lastminuteengineers.com/how-rfid-works-rc522-arduino-tutorial/.
  24. When writing the code to set the time in the real time clock, I refer to https://create.arduino.cc/projecthub/MisterBotBreak/how-to-use-a-real-time-clock-module-ds3231-bc90fe.
  25. The music score of the song, Il Vento D'Oro (Golden Wind), is from https://musescore.com/winthos/scores/5366398 by Winthos.
  26. The the pitch values are from https://www.arduino.cc/en/Tutorial/ToneMelody?from=Tutorial.Tone and are written by Brett Hagma.
  27. */</span><span class="pln">
  28. </span><span class="com">#include</span><span class="pln"> </span><span class="str">"pitches.h"</span><span class="pln">
  29. </span><span class="com">#include</span><span class="pln"> </span><span class="str">"SPI.h"</span><span class="pln">
  30. </span><span class="com">#include</span><span class="pln"> </span><span class="str">"MFRC522.h"</span><span class="pln">
  31. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><Wire.h></span><span class="pln">
  32. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><ds3231.h></span><span class="pln">
  33. </span><span class="com">//Naming all the pins to their function</span><span class="pln">
  34. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> motorA1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  35. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> motorA2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">
  36. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> motorB1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
  37. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> motorB2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pun">;</span><span class="pln">
  38. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> speaker1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">6</span><span class="pun">;</span><span class="pln">
  39. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> speaker2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">7</span><span class="pun">;</span><span class="pln">
  40. </span><span class="com">//Define the two pins for the RFID</span><span class="pln">
  41. </span><span class="com">#define</span><span class="pln"> pinSDA </span><span class="lit">10</span><span class="pln">
  42. </span><span class="com">#define</span><span class="pln"> pinRST </span><span class="lit">9</span><span class="pln">
  43. </span><span class="com">//Setting the intervals for the all the timers</span><span class="pln">
  44. </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> </span><span class="typ">Motortimer</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  45. </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> </span><span class="typ">Speakertimer1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  46. </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> </span><span class="typ">Speakertimer2</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  47. </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> </span><span class="typ">Clocktimer</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  48. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> </span><span class="typ">Clockwait</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">;</span><span class="pln">
  49. </span><span class="com">//Setting up the strings to check for the RFID reader</span><span class="pln">
  50. </span><span class="kwd">byte</span><span class="pln"> readCard</span><span class="pun">[</span><span class="lit">4</span><span class="pun">];</span><span class="pln">
  51. </span><span class="typ">String</span><span class="pln"> </span><span class="typ">Bathroom_ID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"A06EC9B"</span><span class="pun">;</span><span class="pln"> </span><span class="com">//Unique ID for the RFID card that will be placed in bathroom</span><span class="pln">
  52. </span><span class="typ">String</span><span class="pln"> </span><span class="typ">Bed_ID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"31BD82FC"</span><span class="pun">;</span><span class="pln"> </span><span class="com">//Unique ID for the RFID card that will be placed onto the bed</span><span class="pln">
  53. </span><span class="typ">String</span><span class="pln"> tagID </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
  54. </span><span class="com">//"Link" the pins to the RFID's SDA and RST</span><span class="pln">
  55. MFRC522 mfrc522</span><span class="pun">(</span><span class="pln">pinSDA</span><span class="pun">,</span><span class="pln"> pinRST</span><span class="pun">);</span><span class="pln">
  56. </span><span class="com">//For the realtime clock</span><span class="pln">
  57. </span><span class="kwd">struct</span><span class="pln"> ts t</span><span class="pun">;</span><span class="pln">
  58. </span><span class="com">//Defining the constants for the speakers to play melody</span><span class="pln">
  59. </span><span class="com">//notemap for speaker 1 and speaker 2</span><span class="pln">
  60. </span><span class="kwd">int</span><span class="pln"> note1</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">
  61. NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_F4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_E4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">
  62. NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">
  63. NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_F4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_E4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">
  64. NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">
  65. NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_F4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_E4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">
  66. NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">
  67. NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln">
  68. </span><span class="pun">};</span><span class="pln">
  69. </span><span class="kwd">int</span><span class="pln"> note2</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">NOTE_B1</span><span class="pun">,</span><span class="pln">
  70. NOTE_B1</span><span class="pun">,</span><span class="pln">
  71. NOTE_B1</span><span class="pun">,</span><span class="pln">
  72. NOTE_B1</span><span class="pun">,</span><span class="pln"> NOTE_B1</span><span class="pun">,</span><span class="pln">
  73. NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS2</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln">
  74. NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_F3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_E3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D3</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln">
  75. NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS2</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln">
  76. NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln">
  77. </span><span class="pun">};</span><span class="pln">
  78. </span><span class="com">//beatmap for each notes for speaker 1 and speaker 2. 8 means eighth note, etc.</span><span class="pln">
  79. </span><span class="kwd">int</span><span class="pln"> beat1</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">
  80. </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">
  81. </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">
  82. </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">8</span><span class="pun">,</span><span class="pln">
  83. </span><span class="pun">};</span><span class="pln">
  84. </span><span class="kwd">int</span><span class="pln"> beat2</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
  85. </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln">
  86. </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">
  87. </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">8</span><span class="pun">,</span><span class="pln">
  88. </span><span class="pun">};</span><span class="pln">
  89. </span><span class="com">//Determining the length of the list of beat and creat empty timemaps for the speakers</span><span class="pln">
  90. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> length_of_beat1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">155</span><span class="pun">;</span><span class="pln">
  91. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> length_of_beat2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  92. </span><span class="kwd">int</span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">length_of_beat1</span><span class="pun">];</span><span class="pln">
  93. </span><span class="kwd">int</span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">length_of_beat2</span><span class="pun">];</span><span class="pln">
  94. </span><span class="com">//Note counter indicate which note the speakers are on. They are set to 0 because array start from 0 and in such way they are more convenient to use latter.</span><span class="pln">
  95. </span><span class="kwd">int</span><span class="pln"> counter1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  96. </span><span class="kwd">int</span><span class="pln"> counter2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  97. </span><span class="com">//The following are written supplemental functions</span><span class="pln">
  98. </span><span class="com">//RFID:</span><span class="pln">
  99. </span><span class="com">//Funtion to access the NUID and put the first 4 bytes (8 digits) into the string "tagID"</span><span class="pln">
  100. </span><span class="kwd">boolean</span><span class="pln"> getID</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  101. </span><span class="com">//Verify if any card is presented</span><span class="pln">
  102. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln"> mfrc522</span><span class="pun">.</span><span class="pln">PICC_IsNewCardPresent</span><span class="pun">())</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  103. </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  104. </span><span class="pun">}</span><span class="pln">
  105. </span><span class="com">// Verify if the NUID has been readed</span><span class="pln">
  106. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln"> mfrc522</span><span class="pun">.</span><span class="pln">PICC_ReadCardSerial</span><span class="pun">())</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  107. </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  108. </span><span class="pun">}</span><span class="pln">
  109. tagID </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
  110. </span><span class="com">//A loop that put the first 4 bytes of the unique ID of the card into the variable tagID</span><span class="pln">
  111. </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="typ">uint8_t</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun"><</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  112. tagID </span><span class="pun">=</span><span class="pln"> tagID </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="typ">String</span><span class="pun">(</span><span class="pln">mfrc522</span><span class="pun">.</span><span class="pln">uid</span><span class="pun">.</span><span class="pln">uidByte</span><span class="pun">[</span><span class="pln">i</span><span class="pun">],</span><span class="pln"> HEX</span><span class="pun">));</span><span class="pln">
  113. </span><span class="pun">}</span><span class="pln">
  114. tagID</span><span class="pun">.</span><span class="pln">toUpperCase</span><span class="pun">();</span><span class="pln">
  115. mfrc522</span><span class="pun">.</span><span class="pln">PICC_HaltA</span><span class="pun">();</span><span class="pln"> </span><span class="com">// Tells the RFID readert to stop reading.</span><span class="pln">
  116. </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  117. </span><span class="pun">}</span><span class="pln">
  118. </span><span class="com">//Motors:</span><span class="pln">
  119. </span><span class="com">//Function to give direction and speed to one of the motor</span><span class="pln">
  120. </span><span class="kwd">void</span><span class="pln"> set_motor_pwm</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> pwm</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> input_1</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> input_2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  121. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">pwm </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">
  122. digitalWrite</span><span class="pun">(</span><span class="pln">input_1</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="pln">pwm</span><span class="pun">);</span><span class="pln">
  123. analogWrite</span><span class="pun">(</span><span class="pln">input_2</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  124. </span><span class="pun">}</span><span class="pln">
  125. </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  126. digitalWrite</span><span class="pun">(</span><span class="pln">input_1</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  127. analogWrite</span><span class="pun">(</span><span class="pln">input_2</span><span class="pun">,</span><span class="pln"> pwm</span><span class="pun">);</span><span class="pln">
  128. </span><span class="pun">}</span><span class="pln">
  129. </span><span class="pun">}</span><span class="pln">
  130. </span><span class="com">//Function that gives direction and speed to both motor using the previous function</span><span class="pln">
  131. </span><span class="kwd">void</span><span class="pln"> set_two_motors_pwm</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> pwmA</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> pwmB</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  132. set_motor_pwm</span><span class="pun">(</span><span class="pln">pwmA</span><span class="pun">,</span><span class="pln"> motorA1</span><span class="pun">,</span><span class="pln"> motorA2</span><span class="pun">);</span><span class="pln">
  133. set_motor_pwm</span><span class="pun">(</span><span class="pln">pwmB</span><span class="pun">,</span><span class="pln"> motorB1</span><span class="pun">,</span><span class="pln"> motorB2</span><span class="pun">);</span><span class="pln">
  134. </span><span class="pun">}</span><span class="pln">
  135. </span><span class="com">//Speakers:</span><span class="pln">
  136. </span><span class="com">//Funtion that make the speaker play the note according to its notemap and timemap</span><span class="pln">
  137. </span><span class="kwd">void</span><span class="pln"> play_note</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> speaker</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> time</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  138. </span><span class="com">//Determine which speaker and therefore which counter to modify</span><span class="pln">
  139. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">speaker </span><span class="pun">==</span><span class="pln"> </span><span class="lit">6</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  140. </span><span class="com">//The start is a speacial case</span><span class="pln">
  141. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">counter1 </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">
  142. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun"><</span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  143. tone</span><span class="pun">(</span><span class="pln">speaker</span><span class="pun">,</span><span class="pln"> note1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">]);</span><span class="pln">
  144. </span><span class="pun">}</span><span class="pln">
  145. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  146. counter1 </span><span class="pun">=</span><span class="pln"> counter1 </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  147. </span><span class="pun">}</span><span class="pln">
  148. </span><span class="pun">}</span><span class="pln">
  149. </span><span class="com">//if time exceeds the last element of the timemap, reset the counter and play the melody from start</span><span class="pln">
  150. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">length_of_beat1 </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">
  151. counter1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  152. </span><span class="typ">Speakertimer1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  153. </span><span class="pun">}</span><span class="pln">
  154. </span><span class="com">//Again, (2000 / beat1[thisbeat - 1]) * 0.3 is the time gap for distinguishing between notes</span><span class="pln">
  155. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">counter1 </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat1</span><span class="pun">[</span><span class="pln">counter1 </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.3</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> time </span><span class="pun"><</span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  156. tone</span><span class="pun">(</span><span class="pln">speaker</span><span class="pun">,</span><span class="pln"> note1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">]);</span><span class="pln">
  157. </span><span class="pun">}</span><span class="pln">
  158. </span><span class="com">//When the speaker finish playing the current note</span><span class="pln">
  159. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  160. counter1 </span><span class="pun">=</span><span class="pln"> counter1 </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  161. </span><span class="pun">}</span><span class="pln">
  162. </span><span class="pun">}</span><span class="pln">
  163. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">speaker </span><span class="pun">==</span><span class="pln"> </span><span class="lit">7</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  164. </span><span class="com">//The start is a speacial case</span><span class="pln">
  165. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">counter2 </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">
  166. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun"><</span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">counter2</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  167. tone</span><span class="pun">(</span><span class="pln">speaker</span><span class="pun">,</span><span class="pln"> note2</span><span class="pun">[</span><span class="pln">counter2</span><span class="pun">]);</span><span class="pln">
  168. </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Speaker 2 starts"</span><span class="pun">);</span><span class="pln">
  169. </span><span class="pun">}</span><span class="pln">
  170. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">counter2</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  171. counter2 </span><span class="pun">=</span><span class="pln"> counter2 </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  172. </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Speaker 2 counter 2"</span><span class="pun">);</span><span class="pln">
  173. </span><span class="pun">}</span><span class="pln">
  174. </span><span class="pun">}</span><span class="pln">
  175. </span><span class="com">//if time exceeds the last element of the timemap, reset the counter and play the melody from start</span><span class="pln">
  176. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">length_of_beat2 </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">
  177. counter2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  178. </span><span class="typ">Speakertimer2</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  179. </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Speaker 2 end"</span><span class="pun">);</span><span class="pln">
  180. </span><span class="pun">}</span><span class="pln">
  181. </span><span class="com">//Again, (2000 / beat1[thisbeat - 1]) * 0.3 is the time gap for distinguishing between notes</span><span class="pln">
  182. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">counter2 </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat2</span><span class="pun">[</span><span class="pln">counter2 </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.3</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> time </span><span class="pun"><</span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">counter2</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  183. tone</span><span class="pun">(</span><span class="pln">speaker</span><span class="pun">,</span><span class="pln"> note2</span><span class="pun">[</span><span class="pln">counter2</span><span class="pun">]);</span><span class="pln">
  184. </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Speaker 2 next note"</span><span class="pun">);</span><span class="pln">
  185. </span><span class="pun">}</span><span class="pln">
  186. </span><span class="com">//When the speaker finish playing the current note</span><span class="pln">
  187. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">counter2</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  188. counter2 </span><span class="pun">=</span><span class="pln"> counter2 </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  189. </span><span class="pun">}</span><span class="pln">
  190. </span><span class="pun">}</span><span class="pln">
  191. </span><span class="pun">}</span><span class="pln">
  192. </span><span class="com">//Function that controls what happen when it's time to shower/sleep</span><span class="pln">
  193. </span><span class="kwd">void</span><span class="pln"> be_annoying</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  194. </span><span class="com">//how long has passed since the start of the cycle</span><span class="pln">
  195. </span><span class="kwd">int</span><span class="pln"> diff_motor </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"> </span><span class="typ">Motortimer</span><span class="pun">;</span><span class="pln">
  196. </span><span class="kwd">int</span><span class="pln"> diff_speaker1 </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"> </span><span class="typ">Speakertimer1</span><span class="pun">;</span><span class="pln">
  197. </span><span class="kwd">int</span><span class="pln"> diff_speaker2 </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"> </span><span class="typ">Speakertimer2</span><span class="pun">;</span><span class="pln">
  198. </span><span class="com">//the timemap of actions for motors</span><span class="pln">
  199. </span><span class="kwd">int</span><span class="pln"> motor_timemap</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">3000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10000</span><span class="pun">};</span><span class="pln">
  200. </span><span class="com">//motors' sequence of motions</span><span class="pln">
  201. </span><span class="com">//Motion1</span><span class="pln">
  202. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> diff_motor </span><span class="pun"><=</span><span class="pln"> motor_timemap</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  203. set_two_motors_pwm</span><span class="pun">(</span><span class="pln">random</span><span class="pun">(-</span><span class="lit">225</span><span class="pun">,</span><span class="lit">225</span><span class="pun">),</span><span class="pln">random</span><span class="pun">(-</span><span class="lit">225</span><span class="pun">,</span><span class="lit">225</span><span class="pun">));</span><span class="pln">
  204. </span><span class="pun">}</span><span class="pln">
  205. </span><span class="com">//Motion2</span><span class="pln">
  206. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> diff_motor </span><span class="pun">>=</span><span class="pln"> motor_timemap</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"> diff_motor </span><span class="pun"><=</span><span class="pln"> motor_timemap</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  207. set_two_motors_pwm</span><span class="pun">(</span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">);</span><span class="pln">
  208. </span><span class="pun">}</span><span class="pln">
  209. </span><span class="com">//Motion3</span><span class="pln">
  210. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> diff_motor </span><span class="pun">>=</span><span class="pln"> motor_timemap</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"> diff_motor </span><span class="pun"><=</span><span class="pln"> motor_timemap</span><span class="pun">[</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  211. set_two_motors_pwm</span><span class="pun">(-</span><span class="lit">200</span><span class="pun">,</span><span class="pln"> </span><span class="lit">200</span><span class="pun">);</span><span class="pln">
  212. </span><span class="pun">}</span><span class="pln">
  213. </span><span class="com">//Motion4</span><span class="pln">
  214. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> diff_motor </span><span class="pun">>=</span><span class="pln"> motor_timemap</span><span class="pun">[</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> diff_motor </span><span class="pun"><=</span><span class="pln"> motor_timemap</span><span class="pun">[</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  215. set_two_motors_pwm</span><span class="pun">(</span><span class="pln">random</span><span class="pun">(-</span><span class="lit">225</span><span class="pun">,</span><span class="lit">225</span><span class="pun">),</span><span class="pln"> random</span><span class="pun">(-</span><span class="lit">225</span><span class="pun">,</span><span class="lit">225</span><span class="pun">));</span><span class="pln">
  216. </span><span class="pun">}</span><span class="pln">
  217. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> diff_motor </span><span class="pun">>=</span><span class="pln"> motor_timemap</span><span class="pun">[</span><span class="lit">3</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  218. </span><span class="com">//Serial.println("cycle ends");</span><span class="pln">
  219. </span><span class="typ">Motortimer</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  220. </span><span class="pun">}</span><span class="pln">
  221. </span><span class="com">//Speaker1's sequence of actions</span><span class="pln">
  222. play_note</span><span class="pun">(</span><span class="pln">speaker1</span><span class="pun">,</span><span class="pln"> diff_speaker1</span><span class="pun">);</span><span class="pln">
  223. play_note</span><span class="pun">(</span><span class="pln">speaker2</span><span class="pun">,</span><span class="pln"> diff_speaker2</span><span class="pun">);</span><span class="pln">
  224. </span><span class="pun">}</span><span class="pln">
  225. </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">
  226. </span><span class="com">//Setting up the motors' pins</span><span class="pln">
  227. pinMode</span><span class="pun">(</span><span class="pln">motorA1</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  228. pinMode</span><span class="pun">(</span><span class="pln">motorA2</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  229. pinMode</span><span class="pun">(</span><span class="pln">motorB1</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  230. pinMode</span><span class="pun">(</span><span class="pln">motorB2</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  231. </span><span class="com">//Starting in the coasting mode</span><span class="pln">
  232. digitalWrite</span><span class="pun">(</span><span class="pln">motorA1</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  233. digitalWrite</span><span class="pun">(</span><span class="pln">motorA2</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  234. digitalWrite</span><span class="pun">(</span><span class="pln">motorB1</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  235. digitalWrite</span><span class="pun">(</span><span class="pln">motorB2</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  236. </span><span class="com">//Setting up the pins for the transistor for the speakers</span><span class="pln">
  237. pinMode</span><span class="pun">(</span><span class="pln">speaker1</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  238. pinMode</span><span class="pun">(</span><span class="pln">speaker2</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  239. </span><span class="com">//Initializing the RFDI</span><span class="pln">
  240. SPI</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">();</span><span class="pln">
  241. mfrc522</span><span class="pun">.</span><span class="pln">PCD_Init</span><span class="pun">();</span><span class="pln">
  242. </span><span class="com">//Initializing the serial monitor</span><span class="pln">
  243. </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">
  244. </span><span class="com">//Setting up for the real-time clock</span><span class="pln">
  245. </span><span class="typ">Wire</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">();</span><span class="pln">
  246. DS3231_init</span><span class="pun">(</span><span class="pln">DS3231_INTCN</span><span class="pun">);</span><span class="pln">
  247. </span><span class="com">//Set up of the t for the real-time clock</span><span class="pln">
  248. t</span><span class="pun">.</span><span class="pln">hour </span><span class="pun">=</span><span class="pln"> </span><span class="lit">24</span><span class="pun">;</span><span class="pln">
  249. t</span><span class="pun">.</span><span class="pln">min </span><span class="pun">=</span><span class="pln"> </span><span class="lit">30</span><span class="pun">;</span><span class="pln">
  250. t</span><span class="pun">.</span><span class="pln">sec </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  251. t</span><span class="pun">.</span><span class="pln">mday </span><span class="pun">=</span><span class="pln"> </span><span class="lit">30</span><span class="pun">;</span><span class="pln">
  252. t</span><span class="pun">.</span><span class="pln">mon </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  253. t</span><span class="pun">.</span><span class="pln">year </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2020</span><span class="pun">;</span><span class="pln">
  254. DS3231_set</span><span class="pun">(</span><span class="pln">t</span><span class="pun">);</span><span class="pln">
  255. </span><span class="com">//loop that generate the timemap for speaker1 that adds up the time of previous beats</span><span class="pln">
  256. </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> thisbeat </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> thisbeat </span><span class="pun"><</span><span class="pln"> length_of_beat1</span><span class="pun">;</span><span class="pln"> thisbeat</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  257. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">thisbeat </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">
  258. speaker_timemap1</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat1</span><span class="pun">[</span><span class="lit">0</span><span class="pun">];</span><span class="pln">
  259. </span><span class="pun">}</span><span class="pln">
  260. </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  261. </span><span class="com">//This adds up the time for the previous beats. For example, the second note is played from the time of 2000/8 + (2000/8)*0.3 to 2000/8 + (2000/8)*0.3+2000/8. There is a 0.3-note time gap to distinguish between notes.</span><span class="pln">
  262. speaker_timemap1</span><span class="pun">[</span><span class="pln">thisbeat</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">thisbeat </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat1</span><span class="pun">[</span><span class="pln">thisbeat </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.3</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat1</span><span class="pun">[</span><span class="pln">thisbeat</span><span class="pun">];</span><span class="pln">
  263. </span><span class="pun">}</span><span class="pln">
  264. </span><span class="pun">}</span><span class="pln">
  265. </span><span class="com">//loop that generate the timemap for speaker2 that adds up the time of previous beats</span><span class="pln">
  266. </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> thisbeat </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> thisbeat </span><span class="pun"><</span><span class="pln"> length_of_beat2</span><span class="pun">;</span><span class="pln"> thisbeat</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  267. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">thisbeat </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">
  268. speaker_timemap2</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat2</span><span class="pun">[</span><span class="lit">0</span><span class="pun">];</span><span class="pln">
  269. </span><span class="pun">}</span><span class="pln">
  270. </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  271. </span><span class="com">//This adds up the time for the previous beats. For example, the second note is played from the time of 2000/8 + (2000/8)*0.3 to 2000/8 + (2000/8)*0.3+2000/8. There is a 0.3-note time gap to distinguish between notes.</span><span class="pln">
  272. speaker_timemap2</span><span class="pun">[</span><span class="pln">thisbeat</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">thisbeat </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat2</span><span class="pun">[</span><span class="pln">thisbeat </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.3</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat2</span><span class="pun">[</span><span class="pln">thisbeat</span><span class="pun">];</span><span class="pln">
  273. </span><span class="pun">}</span><span class="pln">
  274. </span><span class="pun">}</span><span class="pln">
  275. </span><span class="pun">}</span><span class="pln">
  276. </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">
  277. </span><span class="com">//The time to take shower</span><span class="pln">
  278. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">t</span><span class="pun">.</span><span class="pln">hour </span><span class="pun">==</span><span class="pln"> </span><span class="lit">23</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> t</span><span class="pun">.</span><span class="pln">min </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> t</span><span class="pun">.</span><span class="pln">sec </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">
  279. </span><span class="typ">Motortimer</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  280. </span><span class="typ">Speakertimer1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  281. </span><span class="typ">Speakertimer2</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  282. </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(!</span><span class="pln"> getID</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> tagID </span><span class="pun">!=</span><span class="pln"> </span><span class="typ">Bathroom_ID</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  283. be_annoying</span><span class="pun">();</span><span class="pln">
  284. </span><span class="pun">}</span><span class="pln">
  285. noTone</span><span class="pun">(</span><span class="pln">speaker1</span><span class="pun">);</span><span class="pln">
  286. noTone</span><span class="pun">(</span><span class="pln">speaker2</span><span class="pun">);</span><span class="pln">
  287. set_two_motors_pwm</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">
  288. </span><span class="pun">}</span><span class="pln">
  289. </span><span class="com">//The time to sleep</span><span class="pln">
  290. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">t</span><span class="pun">.</span><span class="pln">hour </span><span class="pun">==</span><span class="pln"> </span><span class="lit">24</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> t</span><span class="pun">.</span><span class="pln">min </span><span class="pun">==</span><span class="pln"> </span><span class="lit">30</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> t</span><span class="pun">.</span><span class="pln">sec </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">
  291. </span><span class="typ">Motortimer</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  292. </span><span class="typ">Speakertimer1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  293. </span><span class="typ">Speakertimer2</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  294. </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(!</span><span class="pln"> getID</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> tagID </span><span class="pun">!=</span><span class="pln"> </span><span class="typ">Bed_ID</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  295. be_annoying</span><span class="pun">();</span><span class="pln">
  296. </span><span class="pun">}</span><span class="pln">
  297. set_two_motors_pwm</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">
  298. noTone</span><span class="pun">(</span><span class="pln">speaker1</span><span class="pun">);</span><span class="pln">
  299. noTone</span><span class="pun">(</span><span class="pln">speaker2</span><span class="pun">);</span><span class="pln">
  300. </span><span class="pun">}</span><span class="pln">
  301. </span><span class="com">//Printing the time for debugging purpose</span><span class="pln">
  302. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</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"> </span><span class="typ">Clocktimer</span><span class="pun">)</span><span class="pln"> </span><span class="pun">>=</span><span class="pln"> </span><span class="typ">Clockwait</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  303. </span><span class="com">//displaying the time on the serial monitor</span><span class="pln">
  304. DS3231_get</span><span class="pun">(&</span><span class="pln">t</span><span class="pun">);</span><span class="pln">
  305. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Date : "</span><span class="pun">);</span><span class="pln">
  306. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">t</span><span class="pun">.</span><span class="pln">mon</span><span class="pun">);</span><span class="pln">
  307. </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">
  308. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">t</span><span class="pun">.</span><span class="pln">mday</span><span class="pun">);</span><span class="pln">
  309. </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">
  310. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">t</span><span class="pun">.</span><span class="pln">year</span><span class="pun">);</span><span class="pln">
  311. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"\t Hour : "</span><span class="pun">);</span><span class="pln">
  312. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">t</span><span class="pun">.</span><span class="pln">hour</span><span class="pun">);</span><span class="pln">
  313. </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">
  314. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">t</span><span class="pun">.</span><span class="pln">min</span><span class="pun">);</span><span class="pln">
  315. </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">
  316. </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">t</span><span class="pun">.</span><span class="pln">sec</span><span class="pun">);</span><span class="pln">
  317. </span><span class="typ">Clocktimer</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
  318. </span><span class="pun">}</span><span class="pln">
  319. </span><span class="pun">}</span>
<span class="com">/*Sleep Time Reminder
 * Zerui Huo
 * The code makes two motors spin and two speaker vibrate at a preset time until the RFID reader
   detects the desired RFID card.

 *Pin mapping:
  
     pin   | mode   | description
     ------|--------|------------
     2      OUTPUT    The pin that sends pwm signal to the motor driver and controls tire 1
     3      OUTPUT    The pin that sends pwm signal to the motor driver and controls tire 1
     4      OUTPUT    The pin that sends pwm signal to the motor driver and controls tire 2
     5      OUTPUT    The pin that sends pwm signal to the motor driver and controls tire 2
     6      OUTPUT    The pin that is connect to transistor to control speaker 1
     7      OUTPUT    The pin that is connect to transistor to control speaker 2
     9                SDA pin for the RFID reader
     10               RST pin for the RFID reader
     11               MOSI pin for the RFID reader
     12               MISO pin for the RFID reader
     13               SCK pin for the RFID reader
     A4               SDA pin for the real time clock
     A5               SCL pin for the real time clock
     VCC              The pin for power to go into the Arduino pro mini
     


  *The code in the functions set_motor_pwm and set_two_motors_pwm are inspired by the website https://courses.ideate.cmu.edu/16-223/f2016/text/ex/Arduino/DRV8833-motor-driver/DRV8833-motor-driver.html.
   The function getID is from the website https://lastminuteengineers.com/how-rfid-works-rc522-arduino-tutorial/.
   When writing the code to set the time in the real time clock, I refer to https://create.arduino.cc/projecthub/MisterBotBreak/how-to-use-a-real-time-clock-module-ds3231-bc90fe.
   The music score of the song, Il Vento D'Oro (Golden Wind), is from https://musescore.com/winthos/scores/5366398 by Winthos.
   The the pitch values are from https://www.arduino.cc/en/Tutorial/ToneMelody?from=Tutorial.Tone and are written by Brett Hagma.
*/</span><span class="pln">

</span><span class="com">#include</span><span class="pln"> </span><span class="str">"pitches.h"</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">"SPI.h"</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">"MFRC522.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"><ds3231.h></span><span class="pln">

</span><span class="com">//Naming all the pins to their function</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> motorA1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</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"> motorA2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> motorB1 </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">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> motorB2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</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"> speaker1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">6</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"> speaker2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">7</span><span class="pun">;</span><span class="pln">

</span><span class="com">//Define the two pins for the RFID</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> pinSDA </span><span class="lit">10</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> pinRST </span><span class="lit">9</span><span class="pln">

</span><span class="com">//Setting the intervals for the all the timers</span><span class="pln">
</span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> </span><span class="typ">Motortimer</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> </span><span class="typ">Speakertimer1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> </span><span class="typ">Speakertimer2</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> </span><span class="typ">Clocktimer</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> </span><span class="typ">Clockwait</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">;</span><span class="pln">

</span><span class="com">//Setting up the strings to check for the RFID reader</span><span class="pln">
</span><span class="kwd">byte</span><span class="pln"> readCard</span><span class="pun">[</span><span class="lit">4</span><span class="pun">];</span><span class="pln">
</span><span class="typ">String</span><span class="pln"> </span><span class="typ">Bathroom_ID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"A06EC9B"</span><span class="pun">;</span><span class="pln">  </span><span class="com">//Unique ID for the RFID card that will be placed in bathroom</span><span class="pln">
</span><span class="typ">String</span><span class="pln"> </span><span class="typ">Bed_ID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"31BD82FC"</span><span class="pun">;</span><span class="pln">  </span><span class="com">//Unique ID for the RFID card that will be placed onto the bed</span><span class="pln">
</span><span class="typ">String</span><span class="pln"> tagID </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">

</span><span class="com">//"Link" the pins to the RFID's SDA and RST</span><span class="pln">
MFRC522 mfrc522</span><span class="pun">(</span><span class="pln">pinSDA</span><span class="pun">,</span><span class="pln"> pinRST</span><span class="pun">);</span><span class="pln">

</span><span class="com">//For the realtime clock</span><span class="pln">
</span><span class="kwd">struct</span><span class="pln"> ts t</span><span class="pun">;</span><span class="pln">

</span><span class="com">//Defining the constants for the speakers to play melody</span><span class="pln">
</span><span class="com">//notemap for speaker 1 and speaker 2</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> note1</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">    
               NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_F4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_E4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">
               NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">    
               NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_F4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_E4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">
               NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">    
               NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_F4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_E4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">
               NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS3</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln">    
               NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> NOTE_B3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_A3</span><span class="pun">,</span><span class="pln"> NOTE_B3</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"> note2</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">NOTE_B1</span><span class="pun">,</span><span class="pln">                                                                                         
               NOTE_B1</span><span class="pun">,</span><span class="pln">
               NOTE_B1</span><span class="pun">,</span><span class="pln">                                                                                         
               NOTE_B1</span><span class="pun">,</span><span class="pln"> NOTE_B1</span><span class="pun">,</span><span class="pln">
               NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS2</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln">    
               NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_F3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_E3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D3</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln">
               NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_D3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_FS2</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln">    
               NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> NOTE_A2</span><span class="pun">,</span><span class="pln"> NOTE_B2</span><span class="pun">,</span><span class="pln">
              </span><span class="pun">};</span><span class="pln">


</span><span class="com">//beatmap for each notes for speaker 1 and speaker 2. 8 means eighth note, etc.</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> beat1</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln">  </span><span class="pun">{</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">    </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">
                </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">    </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">
                </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">    </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">
                </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">    </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">8</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"> beat2</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln">  </span><span class="pun">{</span><span class="lit">1</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">1</span><span class="pun">,</span><span class="pln">                                                   </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln">
                </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">     </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">
                </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">16</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">16</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">16</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">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln">     </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</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">16</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">8</span><span class="pun">,</span><span class="pln">
               </span><span class="pun">};</span><span class="pln">



</span><span class="com">//Determining the length of the list of beat and creat empty timemaps for the speakers</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> length_of_beat1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">155</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"> length_of_beat2 </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">int</span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">length_of_beat1</span><span class="pun">];</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">length_of_beat2</span><span class="pun">];</span><span class="pln">

</span><span class="com">//Note counter indicate which note the speakers are on. They are set to 0 because array start from 0 and in such way they are more convenient to use latter.</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> counter1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> counter2 </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">//The following are written supplemental functions</span><span class="pln">

</span><span class="com">//RFID:</span><span class="pln">
</span><span class="com">//Funtion to access the NUID and put the first 4 bytes (8 digits) into the string "tagID"</span><span class="pln">
</span><span class="kwd">boolean</span><span class="pln"> getID</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">//Verify if any card is presented</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln"> mfrc522</span><span class="pun">.</span><span class="pln">PICC_IsNewCardPresent</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"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="com">// Verify if the NUID has been readed</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln"> mfrc522</span><span class="pun">.</span><span class="pln">PICC_ReadCardSerial</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"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  tagID </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
  </span><span class="com">//A loop that put the first 4 bytes of the unique ID of the card into the variable tagID</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="typ">uint8_t</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun"><</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    tagID </span><span class="pun">=</span><span class="pln"> tagID </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="typ">String</span><span class="pun">(</span><span class="pln">mfrc522</span><span class="pun">.</span><span class="pln">uid</span><span class="pun">.</span><span class="pln">uidByte</span><span class="pun">[</span><span class="pln">i</span><span class="pun">],</span><span class="pln"> HEX</span><span class="pun">));</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  tagID</span><span class="pun">.</span><span class="pln">toUpperCase</span><span class="pun">();</span><span class="pln">
  mfrc522</span><span class="pun">.</span><span class="pln">PICC_HaltA</span><span class="pun">();</span><span class="pln"> </span><span class="com">// Tells the RFID readert to stop reading.</span><span class="pln">
  </span><span class="kwd">return</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="com">//Motors:</span><span class="pln">
</span><span class="com">//Function to give direction and speed to one of the motor</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> set_motor_pwm</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> pwm</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> input_1</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> input_2</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">pwm </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">
    digitalWrite</span><span class="pun">(</span><span class="pln">input_1</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="pln">pwm</span><span class="pun">);</span><span class="pln">
    analogWrite</span><span class="pun">(</span><span class="pln">input_2</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    digitalWrite</span><span class="pun">(</span><span class="pln">input_1</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
    analogWrite</span><span class="pun">(</span><span class="pln">input_2</span><span class="pun">,</span><span class="pln"> pwm</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">//Function that gives direction and speed to both motor using the previous function</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> set_two_motors_pwm</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> pwmA</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> pwmB</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  set_motor_pwm</span><span class="pun">(</span><span class="pln">pwmA</span><span class="pun">,</span><span class="pln"> motorA1</span><span class="pun">,</span><span class="pln"> motorA2</span><span class="pun">);</span><span class="pln">
  set_motor_pwm</span><span class="pun">(</span><span class="pln">pwmB</span><span class="pun">,</span><span class="pln"> motorB1</span><span class="pun">,</span><span class="pln"> motorB2</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">//Speakers:</span><span class="pln">

</span><span class="com">//Funtion that make the speaker play the note according to its notemap and timemap</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> play_note</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> speaker</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> time</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">//Determine which speaker and therefore which counter to modify</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">speaker </span><span class="pun">==</span><span class="pln"> </span><span class="lit">6</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">//The start is a speacial case</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">counter1 </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="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun"><</span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        tone</span><span class="pun">(</span><span class="pln">speaker</span><span class="pun">,</span><span class="pln"> note1</span><span class="pun">[</span><span class="pln">counter1</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">time </span><span class="pun">></span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        counter1 </span><span class="pun">=</span><span class="pln"> counter1 </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="com">//if time exceeds the last element of the timemap, reset the counter and play the melody from start</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">length_of_beat1 </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">
      counter1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
      </span><span class="typ">Speakertimer1</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">

    </span><span class="com">//Again, (2000 / beat1[thisbeat - 1]) * 0.3 is the time gap for distinguishing between notes</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">counter1 </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat1</span><span class="pun">[</span><span class="pln">counter1 </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.3</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> time </span><span class="pun"><</span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      tone</span><span class="pun">(</span><span class="pln">speaker</span><span class="pun">,</span><span class="pln"> note1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">]);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="com">//When the speaker finish playing the current note</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln">  speaker_timemap1</span><span class="pun">[</span><span class="pln">counter1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      counter1 </span><span class="pun">=</span><span class="pln"> counter1 </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">speaker </span><span class="pun">==</span><span class="pln"> </span><span class="lit">7</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">//The start is a speacial case</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">counter2 </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="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun"><</span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">counter2</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        tone</span><span class="pun">(</span><span class="pln">speaker</span><span class="pun">,</span><span class="pln"> note2</span><span class="pun">[</span><span class="pln">counter2</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="str">"Speaker 2 starts"</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">time </span><span class="pun">></span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">counter2</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        counter2 </span><span class="pun">=</span><span class="pln"> counter2 </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</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="str">"Speaker 2 counter 2"</span><span class="pun">);</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="com">//if time exceeds the last element of the timemap, reset the counter and play the melody from start</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">length_of_beat2 </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">
      counter2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
      </span><span class="typ">Speakertimer2</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</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="str">"Speaker 2 end"</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="com">//Again, (2000 / beat1[thisbeat - 1]) * 0.3 is the time gap for distinguishing between notes</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">counter2 </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat2</span><span class="pun">[</span><span class="pln">counter2 </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.3</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> time </span><span class="pun"><</span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">counter2</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      tone</span><span class="pun">(</span><span class="pln">speaker</span><span class="pun">,</span><span class="pln"> note2</span><span class="pun">[</span><span class="pln">counter2</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="str">"Speaker 2 next note"</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="com">//When the speaker finish playing the current note</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">time </span><span class="pun">></span><span class="pln">  speaker_timemap2</span><span class="pun">[</span><span class="pln">counter2</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      counter2 </span><span class="pun">=</span><span class="pln"> counter2 </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">//Function that controls what happen when it's time to shower/sleep</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> be_annoying</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">


  </span><span class="com">//how long has passed since the start of the cycle</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> diff_motor </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"> </span><span class="typ">Motortimer</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> diff_speaker1 </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"> </span><span class="typ">Speakertimer1</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> diff_speaker2 </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"> </span><span class="typ">Speakertimer2</span><span class="pun">;</span><span class="pln">

  </span><span class="com">//the timemap of actions for motors</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> motor_timemap</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">3000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10000</span><span class="pun">};</span><span class="pln">


  </span><span class="com">//motors' sequence of motions</span><span class="pln">
  </span><span class="com">//Motion1</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> diff_motor </span><span class="pun"><=</span><span class="pln">  motor_timemap</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    set_two_motors_pwm</span><span class="pun">(</span><span class="pln">random</span><span class="pun">(-</span><span class="lit">225</span><span class="pun">,</span><span class="lit">225</span><span class="pun">),</span><span class="pln">random</span><span class="pun">(-</span><span class="lit">225</span><span class="pun">,</span><span class="lit">225</span><span class="pun">));</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="com">//Motion2</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> diff_motor </span><span class="pun">>=</span><span class="pln"> motor_timemap</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"> diff_motor </span><span class="pun"><=</span><span class="pln">  motor_timemap</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    set_two_motors_pwm</span><span class="pun">(</span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </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">//Motion3</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> diff_motor </span><span class="pun">>=</span><span class="pln"> motor_timemap</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"> diff_motor </span><span class="pun"><=</span><span class="pln"> motor_timemap</span><span class="pun">[</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    set_two_motors_pwm</span><span class="pun">(-</span><span class="lit">200</span><span class="pun">,</span><span class="pln"> </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">//Motion4</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> diff_motor </span><span class="pun">>=</span><span class="pln"> motor_timemap</span><span class="pun">[</span><span class="lit">2</span><span class="pun">]</span><span class="pln">  </span><span class="pun">&&</span><span class="pln"> diff_motor </span><span class="pun"><=</span><span class="pln"> motor_timemap</span><span class="pun">[</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    set_two_motors_pwm</span><span class="pun">(</span><span class="pln">random</span><span class="pun">(-</span><span class="lit">225</span><span class="pun">,</span><span class="lit">225</span><span class="pun">),</span><span class="pln"> random</span><span class="pun">(-</span><span class="lit">225</span><span class="pun">,</span><span class="lit">225</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"> diff_motor </span><span class="pun">>=</span><span class="pln"> motor_timemap</span><span class="pun">[</span><span class="lit">3</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">//Serial.println("cycle ends");</span><span class="pln">
    </span><span class="typ">Motortimer</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">


  </span><span class="com">//Speaker1's sequence of actions</span><span class="pln">
  play_note</span><span class="pun">(</span><span class="pln">speaker1</span><span class="pun">,</span><span class="pln"> diff_speaker1</span><span class="pun">);</span><span class="pln">
  play_note</span><span class="pun">(</span><span class="pln">speaker2</span><span class="pun">,</span><span class="pln"> diff_speaker2</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">
  </span><span class="com">//Setting up the motors' pins</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="pln">motorA1</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">motorA2</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">motorB1</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">motorB2</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//Starting in the coasting mode</span><span class="pln">
  digitalWrite</span><span class="pun">(</span><span class="pln">motorA1</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  digitalWrite</span><span class="pun">(</span><span class="pln">motorA2</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  digitalWrite</span><span class="pun">(</span><span class="pln">motorB1</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">
  digitalWrite</span><span class="pun">(</span><span class="pln">motorB2</span><span class="pun">,</span><span class="pln"> LOW</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//Setting up the pins for the transistor for the speakers</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="pln">speaker1</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">speaker2</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//Initializing the RFDI</span><span class="pln">
  SPI</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">();</span><span class="pln">
  mfrc522</span><span class="pun">.</span><span class="pln">PCD_Init</span><span class="pun">();</span><span class="pln">

  </span><span class="com">//Initializing the serial monitor</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">//Setting up for the real-time clock</span><span class="pln">
  </span><span class="typ">Wire</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">();</span><span class="pln">
  DS3231_init</span><span class="pun">(</span><span class="pln">DS3231_INTCN</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//Set up of the t for the real-time clock</span><span class="pln">
  t</span><span class="pun">.</span><span class="pln">hour </span><span class="pun">=</span><span class="pln"> </span><span class="lit">24</span><span class="pun">;</span><span class="pln">
  t</span><span class="pun">.</span><span class="pln">min </span><span class="pun">=</span><span class="pln"> </span><span class="lit">30</span><span class="pun">;</span><span class="pln">
  t</span><span class="pun">.</span><span class="pln">sec </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  t</span><span class="pun">.</span><span class="pln">mday </span><span class="pun">=</span><span class="pln"> </span><span class="lit">30</span><span class="pun">;</span><span class="pln">
  t</span><span class="pun">.</span><span class="pln">mon </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  t</span><span class="pun">.</span><span class="pln">year </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2020</span><span class="pun">;</span><span class="pln">

  DS3231_set</span><span class="pun">(</span><span class="pln">t</span><span class="pun">);</span><span class="pln">


  </span><span class="com">//loop that generate the timemap for speaker1 that adds up the time of previous beats</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> thisbeat </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> thisbeat </span><span class="pun"><</span><span class="pln"> length_of_beat1</span><span class="pun">;</span><span class="pln"> thisbeat</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">thisbeat </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">
      speaker_timemap1</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat1</span><span class="pun">[</span><span class="lit">0</span><span class="pun">];</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="com">//This adds up the time for the previous beats. For example, the second note is played from the time of 2000/8 + (2000/8)*0.3 to 2000/8 + (2000/8)*0.3+2000/8. There is a 0.3-note time gap to distinguish between notes.</span><span class="pln">
      speaker_timemap1</span><span class="pun">[</span><span class="pln">thisbeat</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> speaker_timemap1</span><span class="pun">[</span><span class="pln">thisbeat </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat1</span><span class="pun">[</span><span class="pln">thisbeat </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.3</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat1</span><span class="pun">[</span><span class="pln">thisbeat</span><span class="pun">];</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="com">//loop that generate the timemap for speaker2 that adds up the time of previous beats</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> thisbeat </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> thisbeat </span><span class="pun"><</span><span class="pln"> length_of_beat2</span><span class="pun">;</span><span class="pln"> thisbeat</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">thisbeat </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">
      speaker_timemap2</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat2</span><span class="pun">[</span><span class="lit">0</span><span class="pun">];</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="com">//This adds up the time for the previous beats. For example, the second note is played from the time of 2000/8 + (2000/8)*0.3 to 2000/8 + (2000/8)*0.3+2000/8. There is a 0.3-note time gap to distinguish between notes.</span><span class="pln">
      speaker_timemap2</span><span class="pun">[</span><span class="pln">thisbeat</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> speaker_timemap2</span><span class="pun">[</span><span class="pln">thisbeat </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat2</span><span class="pun">[</span><span class="pln">thisbeat </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">])</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.3</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2000</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> beat2</span><span class="pun">[</span><span class="pln">thisbeat</span><span class="pun">];</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">


</span><span class="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">//The time to take shower</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">t</span><span class="pun">.</span><span class="pln">hour </span><span class="pun">==</span><span class="pln"> </span><span class="lit">23</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> t</span><span class="pun">.</span><span class="pln">min </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> t</span><span class="pun">.</span><span class="pln">sec </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="typ">Motortimer</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
    </span><span class="typ">Speakertimer1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
    </span><span class="typ">Speakertimer2</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
    </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(!</span><span class="pln"> getID</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> tagID </span><span class="pun">!=</span><span class="pln"> </span><span class="typ">Bathroom_ID</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      be_annoying</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    noTone</span><span class="pun">(</span><span class="pln">speaker1</span><span class="pun">);</span><span class="pln">
    noTone</span><span class="pun">(</span><span class="pln">speaker2</span><span class="pun">);</span><span class="pln">
    set_two_motors_pwm</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">
  </span><span class="pun">}</span><span class="pln">


  </span><span class="com">//The time to sleep</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">t</span><span class="pun">.</span><span class="pln">hour </span><span class="pun">==</span><span class="pln"> </span><span class="lit">24</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> t</span><span class="pun">.</span><span class="pln">min </span><span class="pun">==</span><span class="pln"> </span><span class="lit">30</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> t</span><span class="pun">.</span><span class="pln">sec </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="typ">Motortimer</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
    </span><span class="typ">Speakertimer1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
    </span><span class="typ">Speakertimer2</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> millis</span><span class="pun">();</span><span class="pln">
    </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(!</span><span class="pln"> getID</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> tagID </span><span class="pun">!=</span><span class="pln"> </span><span class="typ">Bed_ID</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      be_annoying</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    set_two_motors_pwm</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">
    noTone</span><span class="pun">(</span><span class="pln">speaker1</span><span class="pun">);</span><span class="pln">
    noTone</span><span class="pun">(</span><span class="pln">speaker2</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">



  </span><span class="com">//Printing the time for debugging purpose</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</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"> </span><span class="typ">Clocktimer</span><span class="pun">)</span><span class="pln"> </span><span class="pun">>=</span><span class="pln"> </span><span class="typ">Clockwait</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

    </span><span class="com">//displaying the time on the serial monitor</span><span class="pln">
    DS3231_get</span><span class="pun">(&</span><span class="pln">t</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">"Date : "</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">t</span><span class="pun">.</span><span class="pln">mon</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">t</span><span class="pun">.</span><span class="pln">mday</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">t</span><span class="pun">.</span><span class="pln">year</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">"\t Hour : "</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">t</span><span class="pun">.</span><span class="pln">hour</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">t</span><span class="pun">.</span><span class="pln">min</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">t</span><span class="pun">.</span><span class="pln">sec</span><span class="pun">);</span><span class="pln">

    </span><span class="typ">Clocktimer</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">

</span><span class="pun">}</span>
  1. <span class="com">/*************************************************
  2. * Constants for all the notes
  3. *************************************************/</span><span class="pln">
  4. </span><span class="com">#define</span><span class="pln"> NOTE_B0 </span><span class="lit">31</span><span class="pln">
  5. </span><span class="com">#define</span><span class="pln"> NOTE_C1 </span><span class="lit">33</span><span class="pln">
  6. </span><span class="com">#define</span><span class="pln"> NOTE_CS1 </span><span class="lit">35</span><span class="pln">
  7. </span><span class="com">#define</span><span class="pln"> NOTE_D1 </span><span class="lit">37</span><span class="pln">
  8. </span><span class="com">#define</span><span class="pln"> NOTE_DS1 </span><span class="lit">39</span><span class="pln">
  9. </span><span class="com">#define</span><span class="pln"> NOTE_E1 </span><span class="lit">41</span><span class="pln">
  10. </span><span class="com">#define</span><span class="pln"> NOTE_F1 </span><span class="lit">44</span><span class="pln">
  11. </span><span class="com">#define</span><span class="pln"> NOTE_FS1 </span><span class="lit">46</span><span class="pln">
  12. </span><span class="com">#define</span><span class="pln"> NOTE_G1 </span><span class="lit">49</span><span class="pln">
  13. </span><span class="com">#define</span><span class="pln"> NOTE_GS1 </span><span class="lit">52</span><span class="pln">
  14. </span><span class="com">#define</span><span class="pln"> NOTE_A1 </span><span class="lit">55</span><span class="pln">
  15. </span><span class="com">#define</span><span class="pln"> NOTE_AS1 </span><span class="lit">58</span><span class="pln">
  16. </span><span class="com">#define</span><span class="pln"> NOTE_B1 </span><span class="lit">62</span><span class="pln">
  17. </span><span class="com">#define</span><span class="pln"> NOTE_C2 </span><span class="lit">65</span><span class="pln">
  18. </span><span class="com">#define</span><span class="pln"> NOTE_CS2 </span><span class="lit">69</span><span class="pln">
  19. </span><span class="com">#define</span><span class="pln"> NOTE_D2 </span><span class="lit">73</span><span class="pln">
  20. </span><span class="com">#define</span><span class="pln"> NOTE_DS2 </span><span class="lit">78</span><span class="pln">
  21. </span><span class="com">#define</span><span class="pln"> NOTE_E2 </span><span class="lit">82</span><span class="pln">
  22. </span><span class="com">#define</span><span class="pln"> NOTE_F2 </span><span class="lit">87</span><span class="pln">
  23. </span><span class="com">#define</span><span class="pln"> NOTE_FS2 </span><span class="lit">93</span><span class="pln">
  24. </span><span class="com">#define</span><span class="pln"> NOTE_G2 </span><span class="lit">98</span><span class="pln">
  25. </span><span class="com">#define</span><span class="pln"> NOTE_GS2 </span><span class="lit">104</span><span class="pln">
  26. </span><span class="com">#define</span><span class="pln"> NOTE_A2 </span><span class="lit">110</span><span class="pln">
  27. </span><span class="com">#define</span><span class="pln"> NOTE_AS2 </span><span class="lit">117</span><span class="pln">
  28. </span><span class="com">#define</span><span class="pln"> NOTE_B2 </span><span class="lit">123</span><span class="pln">
  29. </span><span class="com">#define</span><span class="pln"> NOTE_C3 </span><span class="lit">131</span><span class="pln">
  30. </span><span class="com">#define</span><span class="pln"> NOTE_CS3 </span><span class="lit">139</span><span class="pln">
  31. </span><span class="com">#define</span><span class="pln"> NOTE_D3 </span><span class="lit">147</span><span class="pln">
  32. </span><span class="com">#define</span><span class="pln"> NOTE_DS3 </span><span class="lit">156</span><span class="pln">
  33. </span><span class="com">#define</span><span class="pln"> NOTE_E3 </span><span class="lit">165</span><span class="pln">
  34. </span><span class="com">#define</span><span class="pln"> NOTE_F3 </span><span class="lit">175</span><span class="pln">
  35. </span><span class="com">#define</span><span class="pln"> NOTE_FS3 </span><span class="lit">185</span><span class="pln">
  36. </span><span class="com">#define</span><span class="pln"> NOTE_G3 </span><span class="lit">196</span><span class="pln">
  37. </span><span class="com">#define</span><span class="pln"> NOTE_GS3 </span><span class="lit">208</span><span class="pln">
  38. </span><span class="com">#define</span><span class="pln"> NOTE_A3 </span><span class="lit">220</span><span class="pln">
  39. </span><span class="com">#define</span><span class="pln"> NOTE_AS3 </span><span class="lit">233</span><span class="pln">
  40. </span><span class="com">#define</span><span class="pln"> NOTE_B3 </span><span class="lit">247</span><span class="pln">
  41. </span><span class="com">#define</span><span class="pln"> NOTE_C4 </span><span class="lit">262</span><span class="pln">
  42. </span><span class="com">#define</span><span class="pln"> NOTE_CS4 </span><span class="lit">277</span><span class="pln">
  43. </span><span class="com">#define</span><span class="pln"> NOTE_D4 </span><span class="lit">294</span><span class="pln">
  44. </span><span class="com">#define</span><span class="pln"> NOTE_DS4 </span><span class="lit">311</span><span class="pln">
  45. </span><span class="com">#define</span><span class="pln"> NOTE_E4 </span><span class="lit">330</span><span class="pln">
  46. </span><span class="com">#define</span><span class="pln"> NOTE_F4 </span><span class="lit">349</span><span class="pln">
  47. </span><span class="com">#define</span><span class="pln"> NOTE_FS4 </span><span class="lit">370</span><span class="pln">
  48. </span><span class="com">#define</span><span class="pln"> NOTE_G4 </span><span class="lit">392</span><span class="pln">
  49. </span><span class="com">#define</span><span class="pln"> NOTE_GS4 </span><span class="lit">415</span><span class="pln">
  50. </span><span class="com">#define</span><span class="pln"> NOTE_A4 </span><span class="lit">440</span><span class="pln">
  51. </span><span class="com">#define</span><span class="pln"> NOTE_AS4 </span><span class="lit">466</span><span class="pln">
  52. </span><span class="com">#define</span><span class="pln"> NOTE_B4 </span><span class="lit">494</span><span class="pln">
  53. </span><span class="com">#define</span><span class="pln"> NOTE_C5 </span><span class="lit">523</span><span class="pln">
  54. </span><span class="com">#define</span><span class="pln"> NOTE_CS5 </span><span class="lit">554</span><span class="pln">
  55. </span><span class="com">#define</span><span class="pln"> NOTE_D5 </span><span class="lit">587</span><span class="pln">
  56. </span><span class="com">#define</span><span class="pln"> NOTE_DS5 </span><span class="lit">622</span><span class="pln">
  57. </span><span class="com">#define</span><span class="pln"> NOTE_E5 </span><span class="lit">659</span><span class="pln">
  58. </span><span class="com">#define</span><span class="pln"> NOTE_F5 </span><span class="lit">698</span><span class="pln">
  59. </span><span class="com">#define</span><span class="pln"> NOTE_FS5 </span><span class="lit">740</span><span class="pln">
  60. </span><span class="com">#define</span><span class="pln"> NOTE_G5 </span><span class="lit">784</span><span class="pln">
  61. </span><span class="com">#define</span><span class="pln"> NOTE_GS5 </span><span class="lit">831</span><span class="pln">
  62. </span><span class="com">#define</span><span class="pln"> NOTE_A5 </span><span class="lit">880</span><span class="pln">
  63. </span><span class="com">#define</span><span class="pln"> NOTE_AS5 </span><span class="lit">932</span><span class="pln">
  64. </span><span class="com">#define</span><span class="pln"> NOTE_B5 </span><span class="lit">988</span><span class="pln">
  65. </span><span class="com">#define</span><span class="pln"> NOTE_C6 </span><span class="lit">1047</span><span class="pln">
  66. </span><span class="com">#define</span><span class="pln"> NOTE_CS6 </span><span class="lit">1109</span><span class="pln">
  67. </span><span class="com">#define</span><span class="pln"> NOTE_D6 </span><span class="lit">1175</span><span class="pln">
  68. </span><span class="com">#define</span><span class="pln"> NOTE_DS6 </span><span class="lit">1245</span><span class="pln">
  69. </span><span class="com">#define</span><span class="pln"> NOTE_E6 </span><span class="lit">1319</span><span class="pln">
  70. </span><span class="com">#define</span><span class="pln"> NOTE_F6 </span><span class="lit">1397</span><span class="pln">
  71. </span><span class="com">#define</span><span class="pln"> NOTE_FS6 </span><span class="lit">1480</span><span class="pln">
  72. </span><span class="com">#define</span><span class="pln"> NOTE_G6 </span><span class="lit">1568</span><span class="pln">
  73. </span><span class="com">#define</span><span class="pln"> NOTE_GS6 </span><span class="lit">1661</span><span class="pln">
  74. </span><span class="com">#define</span><span class="pln"> NOTE_A6 </span><span class="lit">1760</span><span class="pln">
  75. </span><span class="com">#define</span><span class="pln"> NOTE_AS6 </span><span class="lit">1865</span><span class="pln">
  76. </span><span class="com">#define</span><span class="pln"> NOTE_B6 </span><span class="lit">1976</span><span class="pln">
  77. </span><span class="com">#define</span><span class="pln"> NOTE_C7 </span><span class="lit">2093</span><span class="pln">
  78. </span><span class="com">#define</span><span class="pln"> NOTE_CS7 </span><span class="lit">2217</span><span class="pln">
  79. </span><span class="com">#define</span><span class="pln"> NOTE_D7 </span><span class="lit">2349</span><span class="pln">
  80. </span><span class="com">#define</span><span class="pln"> NOTE_DS7 </span><span class="lit">2489</span><span class="pln">
  81. </span><span class="com">#define</span><span class="pln"> NOTE_E7 </span><span class="lit">2637</span><span class="pln">
  82. </span><span class="com">#define</span><span class="pln"> NOTE_F7 </span><span class="lit">2794</span><span class="pln">
  83. </span><span class="com">#define</span><span class="pln"> NOTE_FS7 </span><span class="lit">2960</span><span class="pln">
  84. </span><span class="com">#define</span><span class="pln"> NOTE_G7 </span><span class="lit">3136</span><span class="pln">
  85. </span><span class="com">#define</span><span class="pln"> NOTE_GS7 </span><span class="lit">3322</span><span class="pln">
  86. </span><span class="com">#define</span><span class="pln"> NOTE_A7 </span><span class="lit">3520</span><span class="pln">
  87. </span><span class="com">#define</span><span class="pln"> NOTE_AS7 </span><span class="lit">3729</span><span class="pln">
  88. </span><span class="com">#define</span><span class="pln"> NOTE_B7 </span><span class="lit">3951</span><span class="pln">
  89. </span><span class="com">#define</span><span class="pln"> NOTE_C8 </span><span class="lit">4186</span><span class="pln">
  90. </span><span class="com">#define</span><span class="pln"> NOTE_CS8 </span><span class="lit">4435</span><span class="pln">
  91. </span><span class="com">#define</span><span class="pln"> NOTE_D8 </span><span class="lit">4699</span><span class="pln">
  92. </span><span class="com">#define</span><span class="pln"> NOTE_DS8 </span><span class="lit">4978</span>
<span class="com">/*************************************************
 * Constants for all the notes
 *************************************************/</span><span class="pln">


</span><span class="com">#define</span><span class="pln"> NOTE_B0  </span><span class="lit">31</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_C1  </span><span class="lit">33</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_CS1 </span><span class="lit">35</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_D1  </span><span class="lit">37</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_DS1 </span><span class="lit">39</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_E1  </span><span class="lit">41</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_F1  </span><span class="lit">44</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_FS1 </span><span class="lit">46</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_G1  </span><span class="lit">49</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_GS1 </span><span class="lit">52</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_A1  </span><span class="lit">55</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_AS1 </span><span class="lit">58</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_B1  </span><span class="lit">62</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_C2  </span><span class="lit">65</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_CS2 </span><span class="lit">69</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_D2  </span><span class="lit">73</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_DS2 </span><span class="lit">78</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_E2  </span><span class="lit">82</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_F2  </span><span class="lit">87</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_FS2 </span><span class="lit">93</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_G2  </span><span class="lit">98</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_GS2 </span><span class="lit">104</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_A2  </span><span class="lit">110</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_AS2 </span><span class="lit">117</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_B2  </span><span class="lit">123</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_C3  </span><span class="lit">131</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_CS3 </span><span class="lit">139</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_D3  </span><span class="lit">147</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_DS3 </span><span class="lit">156</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_E3  </span><span class="lit">165</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_F3  </span><span class="lit">175</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_FS3 </span><span class="lit">185</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_G3  </span><span class="lit">196</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_GS3 </span><span class="lit">208</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_A3  </span><span class="lit">220</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_AS3 </span><span class="lit">233</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_B3  </span><span class="lit">247</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_C4  </span><span class="lit">262</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_CS4 </span><span class="lit">277</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_D4  </span><span class="lit">294</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_DS4 </span><span class="lit">311</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_E4  </span><span class="lit">330</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_F4  </span><span class="lit">349</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_FS4 </span><span class="lit">370</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_G4  </span><span class="lit">392</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_GS4 </span><span class="lit">415</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_A4  </span><span class="lit">440</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_AS4 </span><span class="lit">466</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_B4  </span><span class="lit">494</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_C5  </span><span class="lit">523</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_CS5 </span><span class="lit">554</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_D5  </span><span class="lit">587</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_DS5 </span><span class="lit">622</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_E5  </span><span class="lit">659</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_F5  </span><span class="lit">698</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_FS5 </span><span class="lit">740</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_G5  </span><span class="lit">784</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_GS5 </span><span class="lit">831</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_A5  </span><span class="lit">880</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_AS5 </span><span class="lit">932</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_B5  </span><span class="lit">988</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_C6  </span><span class="lit">1047</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_CS6 </span><span class="lit">1109</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_D6  </span><span class="lit">1175</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_DS6 </span><span class="lit">1245</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_E6  </span><span class="lit">1319</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_F6  </span><span class="lit">1397</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_FS6 </span><span class="lit">1480</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_G6  </span><span class="lit">1568</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_GS6 </span><span class="lit">1661</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_A6  </span><span class="lit">1760</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_AS6 </span><span class="lit">1865</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_B6  </span><span class="lit">1976</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_C7  </span><span class="lit">2093</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_CS7 </span><span class="lit">2217</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_D7  </span><span class="lit">2349</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_DS7 </span><span class="lit">2489</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_E7  </span><span class="lit">2637</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_F7  </span><span class="lit">2794</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_FS7 </span><span class="lit">2960</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_G7  </span><span class="lit">3136</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_GS7 </span><span class="lit">3322</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_A7  </span><span class="lit">3520</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_AS7 </span><span class="lit">3729</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_B7  </span><span class="lit">3951</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_C8  </span><span class="lit">4186</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_CS8 </span><span class="lit">4435</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_D8  </span><span class="lit">4699</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> NOTE_DS8 </span><span class="lit">4978</span>