1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
| #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte const columns = 20, rows = 4; byte arreglo[columns]; volatile int randomizer;
// LCD不同强度指示符号 byte clearChar[8]= {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000}; byte Char0[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111}; byte Char1[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111}; byte Char2[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111,0b11111}; byte Char3[8] = {0b00000,0b00000,0b00000,0b00000,0b11111,0b11111,0b11111,0b11111}; byte Char4[8] = {0b00000,0b00000,0b00000,0b11111,0b11111,0b11111,0b11111,0b11111}; byte Char5[8] = {0b00000,0b00000,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111}; byte Char6[8] = {0b00000,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111}; byte Char7[8] = {0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111};
void setup() { lcd.begin(columns, rows); Serial.begin(9600); // 将音量强度符号加载到LCD lcd.createChar(0, Char0); lcd.createChar(1, Char1); lcd.createChar(2, Char2); lcd.createChar(3, Char3); lcd.createChar(4, Char4); lcd.createChar(5, Char5); lcd.createChar(6, Char6); lcd.createChar(7, Char7); lcd.createChar(8, clearChar); }
void loop() { #if 0 randomizer = generador(); arreglo[0] = randomizer; printing(); // 从右往左显示 for (int i=(sizeof(arreglo) - 1); i>0; i--) { arreglo[i] = arreglo[i-1]; } #endif // 批量采样音量强度值 for(int i = 0;i < 20;i++) { arreglo[i] = generador(); } // 显示音量强度 printing(); }
void printing() { for (int i=0; i < 20; i++) { vumetro(arreglo[i],i); } }
// 采样信号强度值,并映射到0-15 int generador() { int entrada = map(analogRead(A0),0,700,0,15); return entrada; }
// 将声道强度转换成LCD映射的符号 int vumetro(int character, int col) { switch(character) { case 0: lcd.setCursor(col,0); lcd.write(8); lcd.setCursor(col,1); lcd.write((byte)0); break; case 1: lcd.setCursor(col,0); lcd.write(8); lcd.setCursor(col,1); lcd.write(1); break; case 2: lcd.setCursor(col,0); lcd.write(8); lcd.setCursor(col,1); lcd.write(2); break; case 3: lcd.setCursor(col,0); lcd.write(8); lcd.setCursor(col,1); lcd.write(3); break; case 4: lcd.setCursor(col,0); lcd.write(8); lcd.setCursor(col,1); lcd.write(4); break; case 5: lcd.setCursor(col,0); lcd.write(8); lcd.setCursor(col,1); lcd.write(5); break; case 6: lcd.setCursor(col,0); lcd.write(8); lcd.setCursor(col,1); lcd.write(6); break; case 7: lcd.setCursor(col,0); lcd.write(8); lcd.setCursor(col,1); lcd.write(7); break; case 8: lcd.setCursor(col,0); lcd.write((byte)0); lcd.setCursor(col,1); lcd.write(7); break; case 9: lcd.setCursor(col,0); lcd.write(1); lcd.setCursor(col,1); lcd.write(7); break; case 10: lcd.setCursor(col,0); lcd.write(2); lcd.setCursor(col,1); lcd.write(7); break; case 11: lcd.setCursor(col,0); lcd.write(3); lcd.setCursor(col,1); lcd.write(7); break; case 12: lcd.setCursor(col,0); lcd.write(4); lcd.setCursor(col,1); lcd.write(7); break; case 13: lcd.setCursor(col,0); lcd.write(5); lcd.setCursor(col,1); lcd.write(7); break; case 14: lcd.setCursor(col,0); lcd.write(6); lcd.setCursor(col,1); lcd.write(7); break; case 15: lcd.setCursor(col,0); lcd.write(7); lcd.setCursor(col,1); lcd.write(7); break; default: lcd.setCursor(col,0); lcd.write(8); lcd.setCursor(col,1); lcd.write((byte)1); break; } lcd.setCursor(col,3); lcd.print(character, HEX); }
|