极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9252|回复: 2

求助,想实现类似音乐打地鼠的功能

[复制链接]
发表于 2012-12-26 04:45:39 | 显示全部楼层 |阅读模式
本帖最后由 kenblue 于 2013-1-17 13:00 编辑

我是一个学产品设计的,刚刚学编程两个星期,想自己做一个音乐打地鼠游戏当作业交

电路都已经连接好了,但是程序怎么都运行不了

下面是代码

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

  90. #define WHOLE 8
  91. #define HALF 4
  92. #define QUARTER 2
  93. #define EIGHTH 1
  94. #define SIXTEENTH 0.5


  95. int tune[] = {
  96.   NOTE_E4, NOTE_E4, NOTE_E4, NOTE_C4, NOTE_E4, NOTE_G4, NOTE_G3,
  97.   NOTE_C4, NOTE_G3, NOTE_E3, NOTE_A3, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_B3,
  98.   NOTE_C4, NOTE_G3, NOTE_E3, NOTE_A3, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_B3,
  99.   NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_C5, NOTE_C5, NOTE_C5,
  100.   NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_DS4, NOTE_D4, NOTE_C4,
  101.   NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3, NOTE_G3, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4,
  102.   NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3, NOTE_G3
  103. };

  104. int duration[] = {
  105.   8,4,4,8,4,2,2,
  106.   3,3,3,4,4,8,4,8,8,8,4,8,4,3,8,8,3,
  107.   3,3,3,4,4,8,4,8,8,8,4,8,4,3,8,8,2,
  108.   8,8,8,4,4,8,8,4,8,8,3,8,8,8,4,4,4,8,2,
  109.   8,8,8,4,4,8,8,4,8,8,3,3,3,1,
  110.   8,4,4,8,4,8,4,8,2,8,4,4,8,4,1,
  111.   8,4,4,8,4,8,4,8,2
  112. };

  113. int length;
  114. int tonePin=10;

  115. void setup() {
  116.   for (int i=2; i<=5; i++)
  117.   {
  118.     pinMode(i,OUTPUT);
  119.   }

  120.   for (int j=6; j<=9; j++)
  121.   {
  122.     pinMode(j,INPUT);
  123.   }
  124.   pinMode(tonePin,OUTPUT);
  125. length = sizeof(tune)/sizeof(tune[0]);
  126.    Serial.begin(9600);
  127.   Serial.println("done");

  128. }


  129. int LL1= 2 ;
  130. int LL2= 3 ;
  131. int LL3= 4 ;
  132. int LL4= 5 ;
  133. int BB1= 6 ;
  134. int BB2= 7 ;
  135. int BB3= 8 ;
  136. int BB4= 9 ;
  137. int b1;
  138. int b2;
  139. int b3;
  140. int b4;
  141. int r=0;


  142. void loop()
  143. {
  144.   for(int x=0;x<length;x++)//循环音符的次数
  145.   {
  146.     r=random(2,6);
  147.      Serial.println(r);
  148.     if(r==2)
  149.     {
  150.       b1 = digitalRead(BB1);
  151.       while(b1==LOW)
  152.       {
  153.         b1=digitalRead(BB1);
  154.         digitalWrite(LL1,HIGH);
  155.          Serial.println("1");
  156.       }
  157.       tone(tonePin,tune[x]);
  158.       delay(10*duration[x]);
  159.       noTone(tonePin);
  160.       r=0;
  161.     }

  162.     if(r==3)
  163.     {
  164.        b2 = digitalRead(BB2);
  165.       while(b2==LOW)
  166.       {
  167.         b2=digitalRead(BB2);
  168.         digitalWrite(LL2,HIGH);
  169.         Serial.println("2");
  170.       }
  171.       tone(tonePin,tune[x]);
  172.       delay(10*duration[x]);
  173.       noTone(tonePin);
  174.       r=0;
  175.     }

  176.     if(r==4)
  177.     {
  178.        b3 = digitalRead(BB3);
  179.       while(b3==LOW)
  180.       {
  181.         b3=digitalRead(BB3);
  182.         digitalWrite(LL3,HIGH);
  183.         Serial.println("3");
  184.       }
  185.       tone(tonePin,tune[x]);
  186.       delay(10*duration[x]);
  187.       noTone(tonePin);
  188.       r=0;
  189.     }
  190.    
  191.     if(r==5)  //4号循环
  192.     {
  193.       b4 = digitalRead(BB4);
  194.       while(b4==LOW)
  195.       {
  196.         b4=digitalRead(BB4);
  197.         digitalWrite(LL4,HIGH);
  198.         delay(500);
  199.        Serial.println("4");
  200.       }
  201.       tone(tonePin,tune[x]);
  202.       delay(10*duration[x]);
  203.       noTone(tonePin);
  204.       r=0;
  205.     }
  206.   }
  207. }

复制代码



这个代码抄袭了论坛里很多代码才写出来的。。

LL1代表LED一号
BB1代表微动开关1号

想实现的功能是当一个随机按钮上的灯亮起,按下去就可以发一个音,一直跟着随机按钮按就可以有马里奥的音乐

但是实际运行发现随机数的第一个数永远都是5

并且永远都在4号循环里转,不管我怎么按4号按钮都出不了循环,更奇怪的是4号灯也不亮。。只是监视器里不断有”4“输出


谁能帮忙看下到底是哪里错了呢。。?

谢谢你们了!!!

http://www.braun.com/medialib/fl ... /series-7-stage.swfddd
回复

使用道具 举报

发表于 2012-12-26 12:35:16 | 显示全部楼层
随机数产生,用randomSeed(seed);  random();这两个函数试试。下面是他们的使用方法。
http://wiki.geek-workshop.com/do ... eference:randomseed
http://wiki.geek-workshop.com/do ... ge_reference:random
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-28 05:21:02 | 显示全部楼层
谢谢啦 问题解决了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-20 01:27 , Processed in 0.045855 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表