Arduino - 聲音控制矩陣型LED (MIC + Counter + Matrix LED)


目的:


以聲音作為輸入,將次數顯示於矩陣型LED,0~9間做循環,並有開關作為RESET用。

成果:


Arduino Code:

  1. #include < SPI.h >
  2. int micPin = A0; //麥克風輸入
  3. int mictemp = 0; //麥克風獨到的音量
  4. int temp = 0;
  5. byte symbol[10][8] = {
  6. {
  7. 0x3E,
  8. 0x7F,
  9. 0x71,
  10. 0x59,
  11. 0x4D,
  12. 0x7F,
  13. 0x3E,
  14. 0x00
  15. }, // '0'
  16. {
  17. 0x40,
  18. 0x42,
  19. 0x7F,
  20. 0x7F,
  21. 0x40,
  22. 0x40,
  23. 0x00,
  24. 0x00
  25. }, // '1'
  26. {
  27. 0x62,
  28. 0x73,
  29. 0x59,
  30. 0x49,
  31. 0x6F,
  32. 0x66,
  33. 0x00,
  34. 0x00
  35. }, // '2'
  36. {
  37. 0x22,
  38. 0x63,
  39. 0x49,
  40. 0x49,
  41. 0x7F,
  42. 0x36,
  43. 0x00,
  44. 0x00
  45. }, // '3'
  46. {
  47. 0x18,
  48. 0x1C,
  49. 0x16,
  50. 0x53,
  51. 0x7F,
  52. 0x7F,
  53. 0x50,
  54. 0x00
  55. }, // '4'
  56. {
  57. 0x27,
  58. 0x67,
  59. 0x45,
  60. 0x45,
  61. 0x7D,
  62. 0x39,
  63. 0x00,
  64. 0x00
  65. }, // '5'
  66. {
  67. 0x3C,
  68. 0x7E,
  69. 0x4B,
  70. 0x49,
  71. 0x79,
  72. 0x30,
  73. 0x00,
  74. 0x00
  75. }, // '6'
  76. {
  77. 0x03,
  78. 0x03,
  79. 0x71,
  80. 0x79,
  81. 0x0F,
  82. 0x07,
  83. 0x00,
  84. 0x00
  85. }, // '7'
  86. {
  87. 0x36,
  88. 0x7F,
  89. 0x49,
  90. 0x49,
  91. 0x7F,
  92. 0x36,
  93. 0x00,
  94. 0x00
  95. }, // '8'
  96. {
  97. 0x06,
  98. 0x4F,
  99. 0x49,
  100. 0x69,
  101. 0x3F,
  102. 0x1E,
  103. 0x00,
  104. 0x00
  105. } // '9'
  106. }; //設定8x8LED矩陣顯示器
  107. const byte NOOP = 0x0;
  108. const byte DECODEMODE = 0x9;
  109. const byte INTENSITY = 0xA;
  110. const byte SCANLIMIT = 0xB;
  111. const byte SHUTDOWN = 0xc;
  112. const byte DISPLAYTEST = 0xF;
  113. void max7219(byte reg, byte data) {
  114. digitalWrite(SS, LOW);
  115. SPI.transfer(reg);
  116. SPI.transfer(data);
  117. digitalWrite(SS, HIGH);
  118. }
  119.  
  120. void setup() {
  121. max7219(SCANLIMIT, 7);
  122. max7219(DECODEMODE, 0);
  123. max7219(INTENSITY, 8);
  124. max7219(DISPLAYTEST, 0);
  125. max7219(SHUTDOWN, 1);
  126. pinMode(SS, OUTPUT);
  127. digitalWrite(SS, HIGH);
  128. SPI.begin();
  129.  
  130. for (byte i = 0; i < 8; i++) {
  131. max7219(i + 1, 0);
  132. }
  133. temp = 0;
  134. for (byte i = 0; i < 8; i++) {
  135. max7219(i + 1, symbol[temp][i]);
  136. }
  137. }
  138.  
  139. void loop() {
  140. mictemp = analogRead(micPin);
  141. if (mictemp >= 450) 當收到大於450的輸入 {
  142. for (byte i = 0; i < 8; i++) {
  143. max7219(i + 1, symbol[temp][i]);
  144. }
  145. temp++; //收到訊號+1
  146. if (temp == 10) {
  147. temp = 0; //跑到10歸零
  148. }
  149. delay(500);
  150. }
  151. }

留言