Advertisement
ahorsewithnoname

finalardu

Apr 29th, 2021
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.04 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 = 144;
  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.  
  106.   // Hedwig's theme fromn the Harry Potter Movies
  107.   // Socre from https://musescore.com/user/3811306/scores/4906610
  108.  
  109.   REST, 2, NOTE_D4, 4,
  110.   NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4,
  111.   NOTE_G4, 2, NOTE_D5, 4,
  112.   NOTE_C5, -2,
  113.   NOTE_A4, -2,
  114.   NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4,
  115.   NOTE_F4, 2, NOTE_GS4, 4,
  116.   NOTE_D4, -1,
  117.   NOTE_D4, 4,
  118.  
  119.   NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4, //10
  120.   NOTE_G4, 2, NOTE_D5, 4,
  121.   NOTE_F5, 2, NOTE_E5, 4,
  122.   NOTE_DS5, 2, NOTE_B4, 4,
  123.   NOTE_DS5, -4, NOTE_D5, 8, NOTE_CS5, 4,
  124.   NOTE_CS4, 2, NOTE_B4, 4,
  125.   NOTE_G4, -1,
  126.   NOTE_AS4, 4,
  127.      
  128.   NOTE_D5, 2, NOTE_AS4, 4,//18
  129.   NOTE_D5, 2, NOTE_AS4, 4,
  130.   NOTE_DS5, 2, NOTE_D5, 4,
  131.   NOTE_CS5, 2, NOTE_A4, 4,
  132.   NOTE_AS4, -4, NOTE_D5, 8, NOTE_CS5, 4,
  133.   NOTE_CS4, 2, NOTE_D4, 4,
  134.   NOTE_D5, -1,
  135.   REST,4, NOTE_AS4,4,  
  136.  
  137.   NOTE_D5, 2, NOTE_AS4, 4,//26
  138.   NOTE_D5, 2, NOTE_AS4, 4,
  139.   NOTE_F5, 2, NOTE_E5, 4,
  140.   NOTE_DS5, 2, NOTE_B4, 4,
  141.   NOTE_DS5, -4, NOTE_D5, 8, NOTE_CS5, 4,
  142.   NOTE_CS4, 2, NOTE_AS4, 4,
  143.   NOTE_G4, -1,
  144.  
  145. };
  146.  
  147.  
  148. int notes = sizeof(melody) / sizeof(melody[0]) / 2;
  149.  
  150. // this calculates the duration of a whole note in ms
  151. int wholenote = (60000 * 4) / tempo;
  152.  
  153. int divider = 0, noteDuration = 0;
  154.  
  155.  
  156. int valor = 0;
  157. int proceso = 1;
  158. bool alreadydid = false;
  159. int pos = 20;
  160. int counter = 0;
  161. long check;
  162. unsigned long previousMillis = 0;
  163. unsigned long previousMilli = 0;
  164. int signo = 1;
  165.  
  166. int lg = 10;
  167. int ly = 8;
  168. int lr = 5;
  169. int bg = 3;
  170. int br = 2;
  171.  
  172. void setup() {
  173.   // put your setup code here, to run once:
  174.   Serial.begin(9600);
  175.   myservo.attach(6);
  176.   myservo.write(0);
  177.   pinMode(lg,OUTPUT);
  178.   pinMode(ly,OUTPUT);
  179.   pinMode(lr,OUTPUT);
  180.   pinMode(bg,OUTPUT);
  181.   pinMode(br,OUTPUT);
  182.  
  183.   pinMode(9,INPUT);
  184.  
  185.   digitalWrite(lr,HIGH);
  186.   digitalWrite(ly,LOW);
  187.   digitalWrite(lg,LOW);
  188.   digitalWrite(bg,HIGH);
  189.   digitalWrite(br,LOW);
  190.  
  191. }
  192.  
  193. void loop() {
  194.   unsigned long currentMillis = millis();
  195.   check = currentMillis - previousMillis;
  196.   //Serial.println(check);
  197.   valor = digitalRead(9);
  198.  
  199.   if(valor == HIGH){
  200.     signo *= -1;
  201.     Serial.println(proceso);
  202.     counter++;
  203.     Serial.println(counter);
  204.     previousMillis = currentMillis;
  205.     alreadydid = false;
  206.     if(counter < 9) proceso = 1 * signo;
  207.     if(counter == 9) tone(buzzer, melody[2], 500);    
  208.     if(counter >= 9 && counter < 18){
  209.       proceso = 3 * signo;    
  210.     }
  211.     if(counter == 18) tone(buzzer, melody[2], 500);
  212.     if(counter >= 18 && counter < 27){
  213.       proceso = 4 * signo;
  214.     }
  215.    
  216.    
  217.     if(counter >= 27) proceso = 2 * signo;
  218.   }
  219.  
  220.   if(valor == LOW) counter = 0;
  221.  
  222.   if(proceso == -1 && alreadydid == false){
  223.     if (currentMillis - previousMillis >= 750 && currentMillis - previousMillis < 950) {
  224.       digitalWrite(lg,LOW);
  225.     }
  226.     if (currentMillis - previousMillis >= 950 && currentMillis - previousMillis < 1950) {
  227.       digitalWrite(ly,HIGH);
  228.     }
  229.     if (currentMillis - previousMillis >= 1950) {
  230.       previousMillis = currentMillis;
  231.       digitalWrite(lr,HIGH);
  232.       digitalWrite(ly,LOW);
  233.       digitalWrite(bg,HIGH);
  234.       digitalWrite(br,LOW);
  235.       alreadydid = true;
  236.       myservo.write(100);
  237.     }
  238.   }
  239.  
  240.   if(proceso == 1 && alreadydid == false){
  241.     if (currentMillis - previousMillis >= 750 && currentMillis - previousMillis < 950) {
  242.       digitalWrite(ly,HIGH);
  243.     }
  244.     if (currentMillis - previousMillis >= 950 && currentMillis - previousMillis < 1950) {
  245.       digitalWrite(lr,LOW);
  246.     }
  247.     if (currentMillis - previousMillis >= 1950) {
  248.       digitalWrite(lg,HIGH);
  249.       digitalWrite(ly,LOW);
  250.       digitalWrite(bg,LOW);
  251.       digitalWrite(br,HIGH);
  252.       alreadydid = true;
  253.       previousMillis = currentMillis;
  254.       myservo.write(0);
  255.     }
  256.   }
  257.  
  258.   if(proceso == 2 || proceso == -2 && alreadydid == false){
  259.     digitalWrite(lg,LOW);
  260.     digitalWrite(lr,LOW);
  261.     digitalWrite(ly,LOW);
  262.     digitalWrite(bg,LOW);
  263.     digitalWrite(br,LOW);
  264.     for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) {
  265.     do{
  266.       randomnumber = int(random(0,5));
  267.     }while(randomnumber == prevrand);
  268.    
  269.     // calculates the duration of each note
  270.     divider = melody[thisNote + 1];
  271.     if (divider > 0) {
  272.       // regular note, just proceed
  273.       noteDuration = (wholenote) / divider;
  274.     } else if (divider < 0) {
  275.       // dotted notes are represented with negative durations!!
  276.       noteDuration = (wholenote) / abs(divider);
  277.       noteDuration *= 1.5; // increases the duration in half for dotted notes
  278.     }
  279.     prevrand = randomnumber;
  280.     // we only play the note for 90% of the duration, leaving 10% as a pause
  281.     tone(buzzer, melody[thisNote], noteDuration * 0.9);
  282.     if(melody[thisNote] != 0)digitalWrite(pinled[randomnumber],HIGH);
  283.     // Wait for the specief duration before playing the next note.
  284.     delay(noteDuration);
  285.     digitalWrite(pinled[randomnumber],LOW);
  286.     // stop the waveform generation before the next note.
  287.     noTone(buzzer);
  288.   }
  289.   alreadydid = true;
  290.   }
  291.   if(proceso == 3 || proceso == -3){
  292.    
  293.     if (currentMillis - previousMillis >= 250 && currentMillis - previousMillis < 500) {
  294.       digitalWrite(lg,HIGH);
  295.       digitalWrite(br,HIGH);
  296.     }
  297.     if (currentMillis - previousMillis >= 500 && currentMillis - previousMillis < 750) {
  298.       digitalWrite(ly,HIGH);
  299.       digitalWrite(bg,HIGH);
  300.     }
  301.     if (currentMillis - previousMillis >= 750 && currentMillis - previousMillis < 1000) {
  302.       digitalWrite(lr,HIGH);
  303.     }
  304.     if (currentMillis - previousMillis >= 1000 && currentMillis - previousMillis < 1250) {
  305.       digitalWrite(lr,LOW);
  306.     }
  307.     if (currentMillis - previousMillis >= 1250 && currentMillis - previousMillis < 1500) {
  308.       digitalWrite(ly,LOW);
  309.       digitalWrite(bg,LOW);
  310.     }
  311.     if (currentMillis - previousMillis >= 1500) {
  312.       digitalWrite(lg,LOW);
  313.       digitalWrite(br,LOW);
  314.       previousMillis = currentMillis;
  315.     }
  316.   }
  317.   if(proceso == 4 || proceso == -4){
  318.     if (currentMillis - previousMillis >= 250 && currentMillis - previousMillis < 500) {
  319.       digitalWrite(lg,HIGH);
  320.       //digitalWrite(br,HIGH);
  321.     }
  322.     if (currentMillis - previousMillis >= 500 && currentMillis - previousMillis < 750) {
  323.       digitalWrite(ly,HIGH);
  324.       //digitalWrite(bg,HIGH);
  325.     }
  326.     if (currentMillis - previousMillis >= 750 && currentMillis - previousMillis < 1000) {
  327.       digitalWrite(lr,HIGH);
  328.     }
  329.     if (currentMillis - previousMillis >= 1000 && currentMillis - previousMillis < 1250) {
  330.       digitalWrite(bg,HIGH);
  331.     }
  332.     if (currentMillis - previousMillis >= 1250 && currentMillis - previousMillis < 1500) {
  333.       digitalWrite(br,HIGH);
  334.       //digitalWrite(bg,LOW);
  335.     }
  336.     if (currentMillis - previousMillis >= 1500 && currentMillis - previousMillis < 1750) {
  337.       digitalWrite(br,LOW);
  338.       //digitalWrite(br,HIGH);
  339.     }
  340.     if (currentMillis - previousMillis >= 1750 && currentMillis - previousMillis < 2000) {
  341.       digitalWrite(bg,LOW);
  342.       //digitalWrite(bg,HIGH);
  343.     }
  344.     if (currentMillis - previousMillis >= 2000 && currentMillis - previousMillis < 2250) {
  345.       digitalWrite(lr,LOW);
  346.     }
  347.     if (currentMillis - previousMillis >= 2250 && currentMillis - previousMillis < 2500) {
  348.       digitalWrite(ly,LOW);
  349.     }
  350.     if (currentMillis - previousMillis >= 2500) {
  351.       digitalWrite(lg,LOW);
  352.       //digitalWrite(bg,LOW);
  353.       previousMillis = currentMillis;
  354.     }
  355.    
  356.   }
  357.   delay(180);
  358. }
  359.  
  360. int servo(int IzDr, unsigned long currentMillis){
  361.  
  362.   if(IzDr == 1){
  363.     pos = 0;
  364.     do{
  365.       if(currentMillis - previousMilli >= 15){
  366.         myservo.write(pos);
  367.         previousMilli = currentMillis;
  368.         pos++;
  369.       }
  370.      
  371.     } while(pos <= 100);
  372.    
  373.   }
  374.   else{
  375.     pos = 100;
  376.     do{
  377.       if(currentMillis - previousMilli >= 15){
  378.         myservo.write(pos);
  379.         previousMilli = currentMillis;
  380.         pos--;
  381.       }
  382.      
  383.     } while(pos >= 0);
  384.    
  385.   }
  386. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement