Arduino 卡片8震动探测

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MadeInJack/article/details/51711206

1、硬件部分:

震动传感器,我们从名字中应该就可以判断,传感器能够检测震动中的物体。我们用什么来做震动传感器呢?那就是滚珠开关。滚珠开关,其内部含有导电珠子,器件一旦震动,珠子随之滚动,就能使两端的导针导通。

图片从卡片上照的,实现代码未完全按照这个图,是我自己连的,不要死记下图的接线,而是要明白原理,然后上面的端子随便接,滚珠开关也需要一个下拉电阻,LED需要一个限流电阻。

2、代码部分:

代码实现:在没有任何打扰的情况下,程序在不断运行着…,让LED一直处于关闭。突然,被人打扰了(也就是晃动板子),就跳到中断函数blink()中(当然进入中断也是要条件的,我们后面说)。此时,state不断自加,连锁反应的,主函数中if函数检测到state不为0了,那么就让LED亮起了,同时又重新让state为0,等待下一次中断。如果没有中断的话,LED有恢复到关闭的状态。

int led = 13;         //LED接在13脚
//由于此处采用中断技术,中断数字引脚只有2和3,其它脚不行。
//接在2脚时Setup中的中断函数第一个参数需要写0,3脚就写1
int sensorSwitch = 3; //开头接在3脚

unsigned char state = 0;

void setup() {
  pinMode(led,OUTPUT);
  pinMode(sensorSwitch,INPUT);
  //当低电平变高电过程中,触发中断1,并调用blink函数;
  attachInterrupt(1,blink,RISING);
}

void loop() {
  if(state != 0){
      state = 0;
      digitalWrite(led,HIGH); //开灯并配合下方延迟半秒;
      delay(500);
    }else{
      digitalWrite(led,LOW);  //关灯
    }
}

//中断函数,在Setup函数中的attachInterrupt触发时会调用此函数;
void blink(){
  state++;
}

中断函数attachInterrupt() 
什么是中断?打个比方吧,比如你在家好好的看电视,突然家里电话铃响了,那么你不得不停下看电视,先去接电话,等接完电话后,你又可以继续看电视啦!在整个过程中,接电话就是一个中断过程,电话铃响就是中断的标志,或者说是中断条件。

现在知道中断是什么意思了,再回到attachInterrupt()函数,它是一个当外部发生中断时,才被唤醒的函数。区别于其他函数,它依附于中断引脚才发生。大多数板子都有两个外部中断引脚:数字引脚2(中断0)和数字引脚3(中断1)。中断0与中断1是中断号,在函数中需要用到。不同板子,中断号对应引脚可能不同,可以查阅Arduino官方编程语法手册(http://arduino.cc/en/Reference/AttachInterrupt)。


attachInterrupt()需要三个传递参数:

attachInterrupt(interrupt, function, mode)
interrupt:中断号0或者1。如果选择0的话,连接到数字引脚2上,选择1的话,连接到数字引脚3上。

function:调用的中断函数名。写中断函数时,需要特别说明以下三点: 
我们在写中断函数的时候,该函数不能含有参数和返回值。也就是说,要是一个无返回值的函数。
中断函数中不要使用delay()和millis()函数,因为数值不会继续变化。
中断函数中不要读取串口,串口收到的数据可能会丢失。

mode:中断的条件。只有特定的以下四种情况:
LOW:当引脚为低电平时,触发中断。
CHANGE 当引脚电平发生改变时,触发中断。
RISING 当引脚由低电平变为高电平时,触发中断。
FALLING 当引脚由高电平变为低电平时,触发中断。

知道了attachInterrupt()函数的用法,回归到我们的代码中:
//当低电平变高电过程中,触发中断1,并调用blink函数;
  attachInterrupt(0,blink,RISING);
对应上面说明看。1,指中断号1。所以滚珠开关接到数字引脚3。blink是我们下面要调用的中断函数。RISING,指引脚3在由低变为高的一瞬间,中断触发。


为什么要选RISING呢?由于硬件我们还没提到,我们就先滚珠开关想象成按键。在按键没按下的时,是断开的,引脚3处于低的状态。一旦被按下,就和5V导通,变为高。这个过程是引脚由低电平变高电平的过程,所以选择RISING模式。

猜你喜欢

转载自blog.csdn.net/MadeInJack/article/details/51711206