Advertisement
ahorsewithnoname

lucecitas

Apr 27th, 2021
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.85 KB | None | 0 0
  1. #include <Servo.h>
  2. #define NOTE_B0  31
  3. #define NOTE_C1  33
  4. #define NOTE_CS1 35
  5. #define NOTE_D1  37
  6. #define NOTE_DS1 39
  7. #define NOTE_E1  41
  8. #define NOTE_F1  44
  9. #define NOTE_FS1 46
  10. #define NOTE_G1  49
  11. #define NOTE_GS1 52
  12. #define NOTE_A1  55
  13. #define NOTE_AS1 58
  14. #define NOTE_B1  62
  15. #define NOTE_C2  65
  16. #define NOTE_CS2 69
  17. #define NOTE_D2  73
  18. #define NOTE_DS2 78
  19. #define NOTE_E2  82
  20. #define NOTE_F2  87
  21. #define NOTE_FS2 93
  22. #define NOTE_G2  98
  23. #define NOTE_GS2 104
  24. #define NOTE_A2  110
  25. #define NOTE_AS2 117
  26. #define NOTE_B2  123
  27. #define NOTE_C3  131
  28. #define NOTE_CS3 139
  29. #define NOTE_D3  147
  30. #define NOTE_DS3 156
  31. #define NOTE_E3  165
  32. #define NOTE_F3  175
  33. #define NOTE_FS3 185
  34. #define NOTE_G3  196
  35. #define NOTE_GS3 208
  36. #define NOTE_A3  220
  37. #define NOTE_AS3 233
  38. #define NOTE_B3  247
  39. #define NOTE_C4  262
  40. #define NOTE_CS4 277
  41. #define NOTE_D4  294
  42. #define NOTE_DS4 311
  43. #define NOTE_E4  330
  44. #define NOTE_F4  349
  45. #define NOTE_FS4 370
  46. #define NOTE_G4  392
  47. #define NOTE_GS4 415
  48. #define NOTE_A4  440
  49. #define NOTE_AS4 466
  50. #define NOTE_B4  494
  51. #define NOTE_C5  523
  52. #define NOTE_CS5 554
  53. #define NOTE_D5  587
  54. #define NOTE_DS5 622
  55. #define NOTE_E5  659
  56. #define NOTE_F5  698
  57. #define NOTE_FS5 740
  58. #define NOTE_G5  784
  59. #define NOTE_GS5 831
  60. #define NOTE_A5  880
  61. #define NOTE_AS5 932
  62. #define NOTE_B5  988
  63. #define NOTE_C6  1047
  64. #define NOTE_CS6 1109
  65. #define NOTE_D6  1175
  66. #define NOTE_DS6 1245
  67. #define NOTE_E6  1319
  68. #define NOTE_F6  1397
  69. #define NOTE_FS6 1480
  70. #define NOTE_G6  1568
  71. #define NOTE_GS6 1661
  72. #define NOTE_A6  1760
  73. #define NOTE_AS6 1865
  74. #define NOTE_B6  1976
  75. #define NOTE_C7  2093
  76. #define NOTE_CS7 2217
  77. #define NOTE_D7  2349
  78. #define NOTE_DS7 2489
  79. #define NOTE_E7  2637
  80. #define NOTE_F7  2794
  81. #define NOTE_FS7 2960
  82. #define NOTE_G7  3136
  83. #define NOTE_GS7 3322
  84. #define NOTE_A7  3520
  85. #define NOTE_AS7 3729
  86. #define NOTE_B7  3951
  87. #define NOTE_C8  4186
  88. #define NOTE_CS8 4435
  89. #define NOTE_D8  4699
  90. #define NOTE_DS8 4978
  91. #define REST      0
  92.  
  93. Servo myservo;
  94. // change this to make the song slower or faster
  95. int tempo = 114;
  96.  
  97. // change this to whichever pin you want to use
  98. int buzzer = 11;
  99.  
  100. int pinled[] = {10,8,5,3,2};
  101. int randomnumber, prevrand;
  102.  
  103. int melody[] = {
  104.  
  105.   // Mii Channel theme
  106.   // Score available at https://musescore.com/user/16403456/scores/4984153
  107.   // Uploaded by Catalina Andrade
  108.  
  109.   NOTE_FS4,8, REST,8, NOTE_A4,8, NOTE_CS5,8, REST,8,NOTE_A4,8, REST,8, NOTE_FS4,8, //1
  110.   NOTE_D4,8, NOTE_D4,8, NOTE_D4,8, REST,8, REST,4, REST,8, NOTE_CS4,8,
  111.   NOTE_D4,8, NOTE_FS4,8, NOTE_A4,8, NOTE_CS5,8, REST,8, NOTE_A4,8, REST,8, NOTE_F4,8,
  112.   NOTE_E5,-4, NOTE_DS5,8, NOTE_D5,8, REST,8, REST,4,
  113.  
  114.   NOTE_GS4,8, REST,8, NOTE_CS5,8, NOTE_FS4,8, REST,8,NOTE_CS5,8, REST,8, NOTE_GS4,8, //5
  115.   REST,8, NOTE_CS5,8, NOTE_G4,8, NOTE_FS4,8, REST,8, NOTE_E4,8, REST,8,
  116.   NOTE_E4,8, NOTE_E4,8, NOTE_E4,8, REST,8, REST,4, NOTE_E4,8, NOTE_E4,8,
  117.   NOTE_E4,8, REST,8, REST,4, NOTE_DS4,8, NOTE_D4,8,
  118.  
  119.   NOTE_CS4,8, REST,8, NOTE_A4,8, NOTE_CS5,8, REST,8,NOTE_A4,8, REST,8, NOTE_FS4,8, //9
  120.   NOTE_D4,8, NOTE_D4,8, NOTE_D4,8, REST,8, NOTE_E5,8, NOTE_E5,8, NOTE_E5,8, REST,8,
  121.   REST,8, NOTE_FS4,8, NOTE_A4,8, NOTE_CS5,8, REST,8, NOTE_A4,8, REST,8, NOTE_F4,8,
  122.   NOTE_E5,2, NOTE_D5,8, REST,8, REST,4,
  123.  
  124.   NOTE_B4,8, NOTE_G4,8, NOTE_D4,8, NOTE_CS4,4, NOTE_B4,8, NOTE_G4,8, NOTE_CS4,8, //13
  125.   NOTE_A4,8, NOTE_FS4,8, NOTE_C4,8, NOTE_B3,4, NOTE_F4,8, NOTE_D4,8, NOTE_B3,8,
  126.   NOTE_E4,8, NOTE_E4,8, NOTE_E4,8, REST,4, REST,4, NOTE_AS4,4,
  127.   NOTE_CS5,8, NOTE_D5,8, NOTE_FS5,8, NOTE_A5,8, REST,8, REST,4,
  128.  
  129.   REST,2, NOTE_A3,4, NOTE_AS3,4, //17
  130.   NOTE_A3,-4, NOTE_A3,8, NOTE_A3,2,
  131.   REST,4, NOTE_A3,8, NOTE_AS3,8, NOTE_A3,8, NOTE_F4,4, NOTE_C4,8,
  132.   NOTE_A3,-4, NOTE_A3,8, NOTE_A3,2,
  133.  
  134.   REST,2, NOTE_B3,4, NOTE_C4,4, //21
  135.   NOTE_CS4,-4, NOTE_C4,8, NOTE_CS4,2,
  136.   REST,4, NOTE_CS4,8, NOTE_C4,8, NOTE_CS4,8, NOTE_GS4,4, NOTE_DS4,8,
  137.   NOTE_CS4,-4, NOTE_DS4,8, NOTE_B3,1,
  138.  
  139.   NOTE_E4,4, NOTE_E4,4, NOTE_E4,4, REST,8,//25
  140.  
  141.   //repeats 1-25
  142.  
  143.   NOTE_FS4,8, REST,8, NOTE_A4,8, NOTE_CS5,8, REST,8,NOTE_A4,8, REST,8, NOTE_FS4,8, //1
  144.   NOTE_D4,8, NOTE_D4,8, NOTE_D4,8, REST,8, REST,4, REST,8, NOTE_CS4,8,
  145.   NOTE_D4,8, NOTE_FS4,8, NOTE_A4,8, NOTE_CS5,8, REST,8, NOTE_A4,8, REST,8, NOTE_F4,8,
  146.   NOTE_E5,-4, NOTE_DS5,8, NOTE_D5,8, REST,8, REST,4,
  147.  
  148.   NOTE_GS4,8, REST,8, NOTE_CS5,8, NOTE_FS4,8, REST,8,NOTE_CS5,8, REST,8, NOTE_GS4,8, //5
  149.   REST,8, NOTE_CS5,8, NOTE_G4,8, NOTE_FS4,8, REST,8, NOTE_E4,8, REST,8,
  150.   NOTE_E4,8, NOTE_E4,8, NOTE_E4,8, REST,8, REST,4, NOTE_E4,8, NOTE_E4,8,
  151.   NOTE_E4,8, REST,8, REST,4, NOTE_DS4,8, NOTE_D4,8,
  152.  
  153.   NOTE_CS4,8, REST,8, NOTE_A4,8, NOTE_CS5,8, REST,8,NOTE_A4,8, REST,8, NOTE_FS4,8, //9
  154.   NOTE_D4,8, NOTE_D4,8, NOTE_D4,8, REST,8, NOTE_E5,8, NOTE_E5,8, NOTE_E5,8, REST,8,
  155.   REST,8, NOTE_FS4,8, NOTE_A4,8, NOTE_CS5,8, REST,8, NOTE_A4,8, REST,8, NOTE_F4,8,
  156.   NOTE_E5,2, NOTE_D5,8, REST,8, REST,4,
  157.  
  158.   NOTE_B4,8, NOTE_G4,8, NOTE_D4,8, NOTE_CS4,4, NOTE_B4,8, NOTE_G4,8, NOTE_CS4,8, //13
  159.   NOTE_A4,8, NOTE_FS4,8, NOTE_C4,8, NOTE_B3,4, NOTE_F4,8, NOTE_D4,8, NOTE_B3,8,
  160.   NOTE_E4,8, NOTE_E4,8, NOTE_E4,8, REST,4, REST,4, NOTE_AS4,4,
  161.   NOTE_CS5,8, NOTE_D5,8, NOTE_FS5,8, NOTE_A5,8, REST,8, REST,4,
  162.  
  163.   REST,2, NOTE_A3,4, NOTE_AS3,4, //17
  164.   NOTE_A3,-4, NOTE_A3,8, NOTE_A3,2,
  165.   REST,4, NOTE_A3,8, NOTE_AS3,8, NOTE_A3,8, NOTE_F4,4, NOTE_C4,8,
  166.   NOTE_A3,-4, NOTE_A3,8, NOTE_A3,2,
  167.  
  168.   REST,2, NOTE_B3,4, NOTE_C4,4, //21
  169.   NOTE_CS4,-4, NOTE_C4,8, NOTE_CS4,2,
  170.   REST,4, NOTE_CS4,8, NOTE_C4,8, NOTE_CS4,8, NOTE_GS4,4, NOTE_DS4,8,
  171.   NOTE_CS4,-4, NOTE_DS4,8, NOTE_B3,1,
  172.  
  173.   NOTE_E4,4, NOTE_E4,4, NOTE_E4,4, REST,8,//25
  174.  
  175.   //finishes with 26
  176.   //NOTE_FS4,8, REST,8, NOTE_A4,8, NOTE_CS5,8, REST,8, NOTE_A4,8, REST,8, NOTE_FS4,8
  177.    
  178. };
  179.  
  180. int notes = sizeof(melody) / sizeof(melody[0]) / 2;
  181.  
  182. // this calculates the duration of a whole note in ms
  183. int wholenote = (60000 * 4) / tempo;
  184.  
  185. int divider = 0, noteDuration = 0;
  186.  
  187.  
  188. int valor = 0;
  189. int proceso = 1;
  190. bool alreadydid = false;
  191. int pos = 20;
  192. int counter = 0;
  193. long check;
  194. unsigned long previousMillis = 0;
  195. unsigned long previousMilli = 0;
  196. int signo = 1;
  197.  
  198. int lg = 10;
  199. int ly = 8;
  200. int lr = 5;
  201. int bg = 3;
  202. int br = 2;
  203.  
  204. void setup() {
  205.   // put your setup code here, to run once:
  206.   Serial.begin(9600);
  207.   myservo.attach(6);
  208.   myservo.write(0);
  209.   pinMode(lg,OUTPUT);
  210.   pinMode(ly,OUTPUT);
  211.   pinMode(lr,OUTPUT);
  212.   pinMode(bg,OUTPUT);
  213.   pinMode(br,OUTPUT);
  214.  
  215.   pinMode(9,INPUT);
  216.  
  217.   digitalWrite(lr,HIGH);
  218.   digitalWrite(ly,LOW);
  219.   digitalWrite(lg,LOW);
  220.   digitalWrite(bg,HIGH);
  221.   digitalWrite(br,LOW);
  222.  
  223. }
  224.  
  225. void loop() {
  226.   unsigned long currentMillis = millis();
  227.   check = currentMillis - previousMillis;
  228.   //Serial.println(check);
  229.   valor = digitalRead(9);
  230.  
  231.   if(valor == HIGH){
  232.     signo *= -1;
  233.     Serial.println(proceso);
  234.     counter++;
  235.     Serial.println(counter);
  236.     previousMillis = currentMillis;
  237.     alreadydid = false;
  238.     if(counter < 9) proceso = 1 * signo;
  239.     if(counter == 9) tone(buzzer, melody[0], 500);    
  240.     if(counter >= 9 && counter < 18){
  241.       proceso = 3 * signo;    
  242.     }
  243.     if(counter >= 18) proceso = 2 * signo;
  244.   }
  245.  
  246.   if(valor == LOW) counter = 0;
  247.  
  248.   if(proceso == -1 && alreadydid == false){
  249.     if (currentMillis - previousMillis >= 750 && currentMillis - previousMillis < 950) {
  250.       digitalWrite(lg,LOW);
  251.     }
  252.     if (currentMillis - previousMillis >= 950 && currentMillis - previousMillis < 1950) {
  253.       digitalWrite(ly,HIGH);
  254.     }
  255.     if (currentMillis - previousMillis >= 1950) {
  256.       previousMillis = currentMillis;
  257.       digitalWrite(lr,HIGH);
  258.       digitalWrite(ly,LOW);
  259.       digitalWrite(bg,HIGH);
  260.       digitalWrite(br,LOW);
  261.       alreadydid = true;
  262.       myservo.write(100);
  263.     }
  264.   }
  265.  
  266.   if(proceso == 1 && alreadydid == false){
  267.     if (currentMillis - previousMillis >= 750 && currentMillis - previousMillis < 950) {
  268.       digitalWrite(ly,HIGH);
  269.     }
  270.     if (currentMillis - previousMillis >= 950 && currentMillis - previousMillis < 1950) {
  271.       digitalWrite(lr,LOW);
  272.     }
  273.     if (currentMillis - previousMillis >= 1950) {
  274.       digitalWrite(lg,HIGH);
  275.       digitalWrite(ly,LOW);
  276.       digitalWrite(bg,LOW);
  277.       digitalWrite(br,HIGH);
  278.       alreadydid = true;
  279.       previousMillis = currentMillis;
  280.       myservo.write(0);
  281.     }
  282.   }
  283.  
  284.   if(proceso == 2 || proceso == -2 && alreadydid == false){
  285.     digitalWrite(lg,LOW);
  286.     digitalWrite(lr,LOW);
  287.     digitalWrite(ly,LOW);
  288.     digitalWrite(bg,LOW);
  289.     digitalWrite(br,LOW);
  290.     for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) {
  291.     do{
  292.       randomnumber = int(random(0,5));
  293.     }while(randomnumber == prevrand);
  294.    
  295.     // calculates the duration of each note
  296.     divider = melody[thisNote + 1];
  297.     if (divider > 0) {
  298.       // regular note, just proceed
  299.       noteDuration = (wholenote) / divider;
  300.     } else if (divider < 0) {
  301.       // dotted notes are represented with negative durations!!
  302.       noteDuration = (wholenote) / abs(divider);
  303.       noteDuration *= 1.5; // increases the duration in half for dotted notes
  304.     }
  305.     prevrand = randomnumber;
  306.     // we only play the note for 90% of the duration, leaving 10% as a pause
  307.     tone(buzzer, melody[thisNote], noteDuration * 0.9);
  308.     if(melody[thisNote] != 0)digitalWrite(pinled[randomnumber],HIGH);
  309.     // Wait for the specief duration before playing the next note.
  310.     delay(noteDuration);
  311.     digitalWrite(pinled[randomnumber],LOW);
  312.     // stop the waveform generation before the next note.
  313.     noTone(buzzer);
  314.   }
  315.   alreadydid = true;
  316.   }
  317.   if(proceso == 3 || proceso == -3){
  318.    
  319.     if (currentMillis - previousMillis >= 250 && currentMillis - previousMillis < 500) {
  320.       digitalWrite(lg,HIGH);
  321.       digitalWrite(br,HIGH);
  322.     }
  323.     if (currentMillis - previousMillis >= 500 && currentMillis - previousMillis < 750) {
  324.       digitalWrite(ly,HIGH);
  325.       digitalWrite(bg,HIGH);
  326.     }
  327.     if (currentMillis - previousMillis >= 750 && currentMillis - previousMillis < 1000) {
  328.       digitalWrite(lr,HIGH);
  329.     }
  330.     if (currentMillis - previousMillis >= 1000 && currentMillis - previousMillis < 1250) {
  331.       digitalWrite(lr,LOW);
  332.     }
  333.     if (currentMillis - previousMillis >= 1250 && currentMillis - previousMillis < 1500) {
  334.       digitalWrite(ly,LOW);
  335.       digitalWrite(bg,LOW);
  336.     }
  337.     if (currentMillis - previousMillis >= 1500) {
  338.       digitalWrite(lg,LOW);
  339.       digitalWrite(br,LOW);
  340.       previousMillis = currentMillis;
  341.     }
  342.   }
  343.   delay(180);
  344. }
  345.  
  346. int servo(int IzDr, unsigned long currentMillis){
  347.  
  348.   if(IzDr == 1){
  349.     pos = 0;
  350.     do{
  351.       if(currentMillis - previousMilli >= 15){
  352.         myservo.write(pos);
  353.         previousMilli = currentMillis;
  354.         pos++;
  355.       }
  356.      
  357.     } while(pos <= 100);
  358.    
  359.   }
  360.   else{
  361.     pos = 100;
  362.     do{
  363.       if(currentMillis - previousMilli >= 15){
  364.         myservo.write(pos);
  365.         previousMilli = currentMillis;
  366.         pos--;
  367.       }
  368.      
  369.     } while(pos >= 0);
  370.    
  371.   }
  372. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement