1 中断在平衡小车等项目中都要用到,对于中断进行验证并加深理解 2 连接示意图
3 实物图
4 程序 int LED = 9; //定义LED为数字引脚9int key = 2; //按键触发中断0char state = LOW;//标志位void setup() { pinMode(LED, OUTPUT); //LED为输出模式 pinMode(key, INPUT_PULLUP); //输入模式 attachInterrupt(0, blink, FALLING);//下降沿触发中断0,调用blink函数}void loop() { if (state == HIGH) { // 如果state为HIGH state = LOW; digitalWrite(LED, HIGH); // 亮 delay(500); //延时500ms } else { digitalWrite(LED, LOW); // 否则,灭 }}void blink() { //中断函数blink() state = !state; //一旦中断触发,state状态反转}
5 说明 · Arduino UNO板卡中断对应pin脚如下 Arduino Uno板卡中断用pin2,pin3引脚,中断程序中第一个是0,0对应pin脚2。 attachInterrupt(0, blink, FALLING);//下降沿触发中断0,调用blink函数
另外一个中断函数经常用到,介绍如下 #include<MsTimer2.h> //MsTimer2库int a; //定义一个全局变量,将在被调用的中断函数中使用void fals(){ //中断函数 static int i=0; //定义的一个静态变量,每次进入中断时,i保留上一次的值 if(i%2==0){ //通过i来改变a的值,用a来改变pin 3 的电平 a=0; } else{ a=1; } if(i==9){ //通过串口查看i的值,并在i=9时关闭中断 MsTimer2::stop(); //关闭定时中断的函数 Serial.println("9中断已结束"); } Serial.println(i); //当i=9时,执行完上面的if语句后还会在串口监视器上显示9 i++; }void setup() { //初始化 Serial.begin(9600); //设置波特率 pinMode(3,OUTPUT); //3号引脚,输出模式 digitalWrite(3,1); MsTimer2::set(2000,fals); //每2秒进入一次中断,中断函数是fals() MsTimer2::start(); //开启定时中断函数}void loop() { //依据中断改变的a值来变换3号引脚的高低电平 if(a==0){ digitalWrite(3,0); } else{ digitalWrite(3,1); } }
程序运行效果
|