Arduino压电震动传感器,前文有介绍模拟输出,用模拟输出可以检测震动的强弱。
TTL电平输出
TTL电平输出可以理解为数字电平,共两种状态:高电平和低电平(即1和0)。有效信号为高电平,输出控制电流最大可达到1A,那么我们就可以用输出的有效信号来控制其他用电器件。这里用Arduino板载的LED来演示。
控制LED
拍下震动传感器,LED亮起,停止拍打,LED灭。
#define LED 13
#define vibrator 2
void setup(){
pinMode(LED,OUTPUT);
pinMode(vibrator,INPUT);
}
void loop(){
int val = digitalRead(vibrator);
if (val == HIGH){
digitalWrite(LED,HIGH);}
else{
digitalWrite(LED,LOW);}
}
控制亮灭
拍下LED灯亮起,再拍下LED灯灭。
#define LED 13
#define vibrator 2
boolean ledstate = true;
void setup(){
pinMode(LED,OUTPUT);
pinMode(vibrator,INPUT);
}
void loop(){
int val = digitalRead(vibrator);
if(value == HIGH){
if(ledstate == true){
digitalWrite(LED,HIGH);
ledstate = !ledstate;
}
else{
digitalWrite(LED,LOW);
ledstate = !ledstate;
}
}
}
bounce2库消抖
安装bounce2库进行消抖,去除拍下传感器时产生的小震动。
/*
**richowe
*/
#include <Bounce2.h>
#define LED 13
#define vibrator 2
boolean ledstate = true;
Bounce debouncer = Bounce();
void setup()
{
pinMode(LED,OUTPUT);
pinMode(vibrator,INPUT);
debouncer.attach(vibrator);
debouncer.interval(5); // 设置消抖时间5ms
}
void loop()
{
debouncer.update();
button();
}
void button()
{
int value = debouncer.read();
if(value == HIGH){
if(ledstate == true){
digitalWrite(LED,HIGH);
ledstate = !ledstate;
}
else{
digitalWrite(LED,LOW);
ledstate = !ledstate;
}
}
}
2亮1灭
拍下两次,LED点亮,再拍下一次,LED灭。增加软件消抖需要一定“大”的震动才能点亮和熄灭。
/*
* richowe
*/
#define LED 13
#define vibrator 2
int value = 0;
void setup(){
pinMode(LED,OUTPUT);
pinMode(vibrator,INPUT);
}
void loop(){
knob();
}
void knob(){
int state = digitalRead(vibrator);
if(state == HIGH){
delay(10); //debounce
if(state == HIGH){
value+=1;
if(value%2 == 0){
digitalWrite(LED,HIGH);value=0;}
else if(value%2 == 1){
digitalWrite(LED,LOW);
}
}
}
}