『数字信号处理实践』仅利用ArduinoUNO通过脉宽调制生成DTMF
简述
DTMF是正弦波的叠加,众所周知,Arduino没有DAC,因此要想仅用ArduinoUNO生成DTMF信号,就必须利用PWM这样的方法。
代码
效果:烧进程序后,将喇叭一边接11号,一边接地,可以考虑加几个电容来滤除谐波、阻隔直流。
#include "Arduino.h"
#define WAVE_TABLE_SIZE 200
#define DTMF_PORT PORTD //输出端口PORTD,0-7号
#define DTMF_DDR DDRD //GPIO_PORTD功能配置寄存器
#define BUZZ_TIME 1000
#define DELAY_TIME 2000
//正弦表
unsigned char waveTable[WAVE_TABLE_SIZE] = {
64, 66, 68, 69, 71, 73, 75, 77, 79, 80, 82, 84, 86, 88, 89,
91, 93, 94, 96, 97, 99, 101, 102, 103, 105, 106, 107, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 120, 121, 121, 122, 122, 123,
123, 123, 123, 124, 124, 124, 124, 124, 123, 123, 123, 123, 122, 122, 121,
121, 120, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 107,
106, 105, 103, 102, 101