昨晚写道,ARDUINO很好玩,老少皆宜。主要有两点
1)价格低;零件便宜,开发工具完全免费;
2)简单易学。
今天把昨天那个光线奏乐的东东改进了一下:用5个LED灯显示正在播放的音符。
演奏方式:用个小手电筒对着那个光电阻晃来晃去(程序将根据光电阻上的电压值播放不同音符)。
代码如下:
const int analogInPin = A0; // Analog input pin
int ncnt = 24;
int sensorValue = 0; // 从光电阻读取的数据
int inputMax=550;
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
for(int i=0; i<5; i++) {
pinMode(i+2, OUTPUT); //五个LED灯连在数字输出2-6
}
}
void loop() {
sensorValue = analogRead(analogInPin);
Serial.print("Playing note = ");
int n = map(sensorValue, 0, inputMax, -ncnt/2, ncnt/2);
Serial.print (sensorValue);
Serial.print (":");
int n2 = n+ ncnt/2;
for(int i=0; i<5; i++) {
digitalWrite(i+2, (n2 & (1<<i)) ? HIGH: LOW);//根据音符控制5个LED灯
}
int freq= (int)(pow(2, n/12.0)*2*440.0); //计算频率
Serial.println(freq);
tone(12, freq, 100);
delay(150);
}