Loading [MathJax]/jax/output/SVG/config.js

zhenzhubay.com

珍珠湾全球网

 找回密码
 用户注册
查看: 86864|回复: 2
打印 上一主题 下一主题

ARDUINO 光子奏乐(版本0.02)

[复制链接]

87

主题

83

好友

17万

积分

精华
20

跳转到指定楼层
楼主
发表于 2013-3-29 03:12:19 |只看该作者 |倒序浏览
岳东晓 (2013/03/28 11:51): ,ARDUINO很好玩,老少皆宜。主要有两点1)价格低;零件便宜,开发工具完全免费;2)简单易学。今天把昨天那个光线奏乐的东东改进了一下:用5个LED灯显示正在播放的音符。演奏方式:用个小手电筒对着那个光电阻晃来晃去(程序将根据光电阻上的电压值播放不同音符)。代码如下:const int analogInPin = A0; // Analog input pin int ncnt = 24;int sensorValue = 0; // 从光电阻读取的数据int inputMax=550;void setu

ARDUINO 光子奏乐(版本0.02)

昨晚写道,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); 

}


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

Archiver|手机版|珍珠湾全球网

GMT+8, 2025-3-5 13:22 , Processed in 0.012361 second(s), 9 queries , Memcache On.

Powered by Discuz! X2.5

回顶部