Arduino压电震动传感器(二)

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);
      }  
    }
  }
}
发布了31 篇原创文章 · 获赞 22 · 访问量 9490

猜你喜欢

转载自blog.csdn.net/richowe/article/details/104632426
今日推荐