用户注册 登录
珍珠湾全球网 返回首页

岳东晓 -- 珍珠湾全球网 ... http://ydx.zzwave.com [收藏] [复制] [分享] [RSS] 岳东晓 -- 珍珠湾全球网

日志

ARDUINO--光线演奏-作曲

热度 7已有 16980 次阅读2013-3-28 14:13 |个人分类:科普|系统分类:科技| , 电阻, 编写程序, LED灯, 接口

今天从AMAZON收到了这个名叫ARDUINO的东东,很好玩,老少皆宜。

ARDUINO是什么呢?这是一个开放设计、开放源代码的微控制器。说简单点就是一个小计算机,外加若干输入、输出接口,然后你可以编写程序,实现你要的功能。

我从AMAZON购买了ARDUINO,一本简介的书籍,外加一些零件 (链接见文末)。总价约50元。零件有光电阻、LED灯、电阻、轰鸣器、马达、热电阻等等。光电阻的电阻根据光线强弱而变化。

很快的,我想了一个小玩意--光线演奏:简单的说就是根据光的强弱演奏不同的音符。乘大家争论的几分钟,搞定了(代码见文末)。

其逻辑如下:读取光电阻上的电压信号,并控制一个LED灯,如果光线弱则灯亮。同时,光线强弱又对应不同的声音频率,输出到轰鸣器。

使用方法:对着电路手舞足蹈,导致光线被不同程度的挡住。

代码如下

const int analogInPin = A0;  // Analog input pin 
const int analogOutPin = A1; // Analog output pin that the LED is attached to

int ncnt = 24;

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)
int inputMax=150;

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600); 
}

void loop() {

  sensorValue = analogRead(analogInPin);            
  outputValue = map(sensorValue, 0, inputMax, 255, 0);  
  analogWrite(analogOutPin, outputValue);           
 
  Serial.print("Playing note = ");  
 int n = map(sensorValue, 0, inputMax, -ncnt/2, ncnt/2);  
  int freq= (int)(pow(2, n/12.0)*3*440.0); //计算频率
  Serial.println(freq);   
   tone(12, freq, 150);
   delay(150); 
  
                      
}



AMAZON产品 链接


路过

鸡蛋
5

鲜花
2

支持

雷人

难过

搞笑

刚表态过的朋友 (7 人)

 

发表评论 评论 (5 个评论)

回复 旭日风天 2013-3-28 15:13
  
回复 8288 2013-3-28 15:30
圣诞节有用
回复 蓝天绿地 2013-3-28 19:12
学习!
回复 鱼雷一号 2013-3-28 21:11
声音有点象"永不消失的电波"
回复 雨柔 2013-3-29 01:24
录下来,再把视频放上来~

facelist

您需要登录后才可以评论 登录 | 用户注册

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

GMT+8, 2024-4-19 02:28 , Processed in 0.029375 second(s), 9 queries , Apc On.

Powered by Discuz! X2.5

回顶部