新人求一个最简单的程序-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3425|回复: 5

[未解决] 新人求一个最简单的程序

[复制链接]
发表于 2021-6-4 13:34 | 显示全部楼层 |阅读模式
我要A2按钮接通后13脚led灯输出,中断脚2输入,灯立即灭掉,程序怎么写都不对,用振动器的程序修改也不行,那个高手教教啊:
   ShakeSwitch
   中断检测,控制LED灯亮灭
*/
int SensorLED = 13;       //定义LED为数字引脚9
int SensorINPUT = 2;      //连接震动开关到中断0,也就是数字引脚2
char state = LOW;

void setup() {

  pinMode(SensorLED, OUTPUT);         //LED为输出模式
  pinMode(SensorINPUT, INPUT_PULLUP);        //震动开关为输入模式
  pinMode(A2,INPUT);
  //上降沿触发,触发中断0,调用blink函数
  attachInterrupt(0, blink, RISING);
}

void loop() {

  if (state == LOW) {        // 如果state为HIGH
    state = HIGH;
    digitalWrite(SensorLED, LOW);  // 亮灯
    delay(500);          //延时500ms
  }
  else {
    digitalWrite(SensorLED, HIGH);    // 否则,关灯
  }
}
void blink() {               //中断函数blink()
  state = !state;             //一旦中断触发,state状态反转

发表于 2021-6-5 12:55 | 显示全部楼层

void loop() {
state = digitalRead(SensorINPUT);
  if (state == LOW) {        // 如果state为HIGH
    state = HIGH;
    digitalWrite(SensorLED, LOW);  // 亮灯
    delay(500);          //延时500ms
  }
  else {
    digitalWrite(SensorLED, HIGH);    // 否则,关灯
  }
发表于 2021-6-5 15:46 | 显示全部楼层
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin
const int bottonCountPin = 11;

// variables will change:
volatile int buttonState = 0;         // variable for reading the pushbutton status
volatile int counter = 0;

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
  // Attach an interrupt to the ISR vector
  pinMode(bottonCountPin,INPUT);
  digitalWrite(buttonPin,HIGH);
  digitalWrite(bottonCountPin,HIGH);
  attachInterrupt(digitalPinToInterrupt(buttonPin), pin_ISR, CHANGE);
  Serial.begin(115200);
}
void loop() {
  // Nothing here!
  int val =digitalRead(bottonCountPin);
  if(val==LOW)
  {
    Serial.println(counter);
  }
}

void pin_ISR() {
  buttonState = digitalRead(buttonPin);
  digitalWrite(ledPin, buttonState);
  counter = counter + 1;
}

我认为您可能按钮接线的时候并没有使用上拉电阻,导致状态不明确,同样我一开始也没有使用上拉电阻,得到的结果和您一样,似乎中断程序没有执行,之后我使用了:
digitalWrite(bottonCountPin,HIGH);
来启用了内部的上拉电阻,之后得到了中断程序的执行。

Good Luck~

点评

楼主是io口状态检测都没有做  发表于 2021-6-5 17:49
 楼主| 发表于 2021-9-7 10:50 | 显示全部楼层
谢谢各位大虾
发表于 2021-9-7 13:51 | 显示全部楼层
IO 状态检查一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 23:39 , Processed in 0.098368 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表