TonyChyi

我在那一角落患过抽风

Arduino,你会唱小星星吗
2019年07月01日 文章
啊,好久没更新一些代码什么的了,都快忘了这里是个技术博客了 #include <Arduino.h> #define PIN 11 // Output pin #define TONE_C 262 #define TONE_D 294 #define TONE_E 330 #define TONE_F 349 #define TONE_G 392 #define TONE_A 440 // Standard #define TONE_B 494 #define TONE_N 0 #define BEAT_TIME 450 // ms, 120bpm #define BEAT_SILENT 50 // ms, 120bpm #define QUAD_SCORE BEAT_TIME+BEAT_SILENT // 500ms #define LEN(x) (sizeof x)/(sizeof(int)) void setup() { pinMode(PIN, OUTPUT); digitalWrite(PIN, LOW); } void loop() { delay(BEAT_TIME + BEAT_SILENT); line1(); line2(); line1(); line3(); line4(); line1(); line3(); delay(2000); } void line1() { // EEFG GFED CCDE play(TONE_E, QUAD_SCORE); play(TONE_E, QUAD_SCORE); play(TONE_F, QUAD_SCORE); play(TONE_G, QUAD_SCORE); play(TONE_G, QUAD_SCORE); play(TONE_F, QUAD_SCORE); play(TONE_E, QUAD_SCORE); play(TONE_D, QUAD_SCORE); play(TONE_C, QUAD_SCORE); play(TONE_C, QUAD_SCORE); play(TONE_D, QUAD_SCORE); play(TONE_E, QUAD_SCORE); } void line2 () { // E.
Tags: #Arduino
用 Arduino 的蜂鸣器发出非方波声音
2018年03月14日 文章
在网上看了很多有关 Arduino 使用蜂鸣器来播放声音的例子,然而在我们西图社区昨天的讨论中,有人提出一个问题: 对了我突然在想Arduino套件送的那个buzzer能不能用来唱歌 能不能发出除了方波以外的其他波形 我个人认为,理论上,应该是可以的,为了验证自己的想法,就写了下面这个程序 // 使用 Arduino 的第 11 个引脚,可以支持模拟输出 #define SOURCE 11 #define LED 13 // 半周期时长 #define PERIOD(x) (1000/x)/2 void setup() { // put your setup code here, to run once: pinMode(SOURCE, OUTPUT); pinMode(LED, OUTPUT); square(440, 2); delay(500); saw(440, 2); delay(500); trangle(440, 2); delay(500); sine(440, 2); delay(500); analogWrite(SOURCE, 0); } // 执行完成后闪灯提示 void loop() { // put your main code here, to run repeatedly: for(int i = 0; i < 3; i++){ digitalWrite(LED, HIGH); delay(500); digitalWrite(LED, LOW); delay(500); } delay(1500); } // 传统的方波 -_-_-_ void square(double _tone, int len_second) { double p = PERIOD(_tone); for(int j = 0; j < len_second; j++){ for(int i = 0; i < _tone; i++){ digitalWrite(SOURCE, HIGH); delay((int)p); digitalWrite(SOURCE, LOW); delay((int)p); } } } // 锯齿波 /|/|/| void saw(int _tone, int len_second){ double p = PERIOD(_tone) * 1000; for(int j = 0; j < len_second; j++){ for(int i = 0; i < 256; i++){ analogWrite(SOURCE, i); delayMicroseconds( (int)p * 2 ); } } } // 三角波 \/\/\/\/ void trangle(int _tone, int len_second){ double p = PERIOD(_tone) * 1000; for(int j = 0; j < len_second; j++){ for(int i = 0; i < 256; i++) { analogWrite(SOURCE, i); delayMicroseconds( (int)p ); } for(int i = 255; i >= 0; i--){ analogWrite(SOURCE, i); delayMicroseconds( (int)p ); } } } // 正弦波 ^v^v^v^v void sine(int _tone, int len_second) { double p = PERIOD(_tone); for(int j = 0; j < len_second; j++){ for(int i = 0; i < 360; i++) { double x = sin(i) * 127.
Tags: #瞎折腾 · #Arduino

 

TonyChyi © 2018 GPLv2