新 Nano(二) 单键控制AD9833

新 Nano(二) 单键控制AD9833_第1张图片
新 Nano(二) 单键控制AD9833_第2张图片

演示视频 视频演示2

AD9833 控制并不算复杂,选对合适的库的话几行代码就可以了。

设定频率值则需要很多个按键,比如上图的MHS-5200, 好几个按键还有编码器,往往临时简单实验还需要翻说明书才能搞定。

最近翻出几个触摸按键模块,已测试效果出奇的好,反应灵敏还不需要消抖。

不啰嗦,直接上代码:屏幕左上角是几个标志,方便观察变化;右上角是长按计数,可以做按得越长变量越大,或指数型增长。

#include 
Adafruit_SSD1306 display(128, 64, &Wire, 4);
/*----------------------- ------------------------------------------------*/

/*--------- AD9833 ------ ------------------------------------------------*/
#include 
#include  
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);
}

程序改进中,稍后完善再发。。。

你可能感兴趣的:(单片机)