概述
本实验利用避障传感器代替开关,遇到一次障碍物发光方式改变一次。初始状态下灯光不亮,在传感器前挡住一次,表明打开LED灯光,进入慢闪状态,然后陆续的挡住避障传感器,灯光的闪烁变得急促。这样还可以模拟自行车灯进行调节灯光。
元件清单:
Zduino UNO × 1;
OJ传感器扩展板 × 1;
USB数据线 × 1 ;
3p杜邦线 × 2 ;
避障传感器× 1;
食人鱼LED × 1;
知识要点:
外部中断:是用来监视外部事件的发生,当标定好的外部事件有触发时,立即放下正在运行的程序,相应外部中断,执行中断函数。(例如钓鱼的时候,当发现浮漂再动时,立即放下手中其他事情,拉起鱼竿)。
UNO的中断引脚为2 和3 分别对应 外部中断0和1.
attachInterrupt(interrupt, function, mode)
interrupt 中断编号。
Function 中断函数名。中断触发后,即会运行的函数名称
mode 中断模式。包含LOW ,CHANGE,RISING,FALLING
LOW:低电平触发
CHANGE:电平跳变触发
RISING:上升沿触发,电平有低到高
FALLING:下降沿触发,电平有高到底
接线示意图:
/*
www.openjumper.cn
日期:2013.5.18
IDE 版本:1.0.1
功能:避障传感器与灯光互动,当首次挡住避障传感器后LED灯慢闪,第二次挡住时,
LED灯闪烁速度变快,第三次,LED灯闪烁速度更加变快,第四次挡住时,LED灯熄灭
回到初始状态。
*/
int LEDpin=13; //定义LED输出引脚
int time = 0; //外部中断次数
void setup() {
pinMode(LEDpin, OUTPUT);
attachInterrupt(0,flash, LOW); //外部中断0,即2号IO口为中断接口,中断子函数为flash ,低电平触发中断
}
void loop() {
switch(time){
case 0 :
digitalWrite(LEDpin,LOW); //默认输出低电平,熄灭LED
break;
case 1 :
digitalWrite(LEDpin,HIGH);
delay(1000);
digitalWrite(LEDpin,LOW); //第一次中断,LED延时1秒闪烁
delay(1000);
break;
case 2 :
digitalWrite(LEDpin,HIGH); //第二次中断,延时500ms
delay(500);
digitalWrite(LEDpin,LOW);
delay(500);
break;
case 3 :
digitalWrite(LEDpin,HIGH); //第三次中断,延时100ms
delay(100);
digitalWrite(LEDpin,LOW);
delay(100);
break;
default:break;
}
}
void flash() //中断服务函数
{
time++;
if(time==4)
time=0;
} //每次进入中断后,time次数加1,当加到4的时候,回到初始状态