更多内容,请访问我的网站:https://jiangge12.github.io/
AD9833 控制并不算复杂,选对合适的库的话几行代码就可以了。
设定频率值则需要很多个按键,比如上图的MHS-5200, 好几个按键还有编码器,往往临时简单实验还需要翻说明书才能搞定。
最近翻出几个触摸按键模块,已测试效果出奇的好,反应灵敏还不需要消抖。
不啰嗦,直接上代码:屏幕左上角是几个标志,方便观察变化;右上角是长按计数,可以做按得越长变量越大,或指数型增长。
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, 4);
/*----------------------- ------------------------------------------------*/
/*--------- AD9833 ------ ------------------------------------------------*/
#include <MD_AD9833.h>
#include <SPI.h>
MD_AD9833 AD(/*DATA*/10, /*CLK*/11, /*FSYNC*/12);
/*----------------------- ------------------------------------------------*/
boolean touching = 0;
boolean holding = 0;
boolean single_touch;
boolean add_or_sub;
long touch_start_time;
long holding_count;
long Freq=10000;
int Waveform=0;
/*----------------------- ------------------------------------------------*/
void setup(){
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.setTextColor(1);
pinMode(A0,OUTPUT);digitalWrite(A0,HIGH); // Touch Vcc ,data=A2, 注意不同厂家的触摸按键模块 引脚顺序可能不同
pinMode(A1,OUTPUT);digitalWrite(A1,LOW); // Touch Gnd
pinMode(8, OUTPUT); digitalWrite(8,HIGH); // AD9833 vcc
pinMode(9, OUTPUT); digitalWrite(9,LOW); // AD9833 Gnd
AD.begin();
}
/*----------------------- ------------------------------------------------*/
void loop(){
touch_detect(7); // 检测按键并设置标志位,参数7表示 10ms x 7,总时间70ms
touch_handle(); // 根据标志位改变变量值
AD9833_Set(Waveform,Freq); // 变量值写入芯片
refresh_display(); // 当前工作状态写到OLED以及串口
delay(50);
}
程序改进中,稍后完善再发。。。