Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 两个ISR';阿杜伊诺酒店_Arduino_Isr - Fatal编程技术网

Arduino 两个ISR';阿杜伊诺酒店

Arduino 两个ISR';阿杜伊诺酒店,arduino,isr,Arduino,Isr,我正在为一个家庭作业写一些代码,其中一部分是让一个16x2的液晶显示屏显示一个时钟,显示arduino已经开启了多长时间。这个时钟需要运行一个定时器中断。我已经让这部分工作,但任务的第二部分是有另一个中断(一个外部按钮作为信号),将重置时钟到所有0的。目前ISR似乎什么都没做。有什么想法吗 #include <LiquidCrystal.h> #include <TimerOne.h> int buttonPin = 2; LiquidCrystal lcd(12, 1

我正在为一个家庭作业写一些代码,其中一部分是让一个16x2的液晶显示屏显示一个时钟,显示arduino已经开启了多长时间。这个时钟需要运行一个定时器中断。我已经让这部分工作,但任务的第二部分是有另一个中断(一个外部按钮作为信号),将重置时钟到所有0的。目前ISR似乎什么都没做。有什么想法吗

#include <LiquidCrystal.h>
#include <TimerOne.h>

int buttonPin = 2;
LiquidCrystal lcd(12, 11, 6, 5, 4, 3);
int secs, tens, minutes, tenminutes, hours, tenhours;
volatile long counter = 0;

void setup() {
  Timer1.initialize(100000);
  Timer1.attachInterrupt(timerISR);
  pinMode(buttonPin, INPUT_PULLUP);
  attachInterrupt(0, buttonPressISR, CHANGE);
  lcd.begin(16, 2);
  lcd.setCursor(0,1);
  lcd.print("0");
  lcd.setCursor(1,1);
  lcd.print("0");
  lcd.setCursor(2, 1);
  lcd.print(":");
  lcd.setCursor(3,1);


lcd.print("0");
  lcd.setCursor(4,1);
  lcd.print("0");
  lcd.setCursor(5, 1);
  lcd.print(":");
  lcd.setCursor(6,1);
  lcd.print("0");
  lcd.setCursor(7,1);
  lcd.print("0");

}

void loop() {
  secs = (counter/10) % 10;
  tens = (counter/100) % 6;
  minutes = (counter/600) %10;
  tenminutes = (counter/6000) %6;
  hours = (counter/36000) %10;
  tenhours = (counter/360000) %10;
  lcd.setCursor(7, 1);
  lcd.print(secs);
  lcd.setCursor(6,1);
  lcd.print(tens);
  lcd.setCursor(4, 1);
  lcd.print(minutes);
  lcd.setCursor(3, 1);
  lcd.print(tenminutes);
  lcd.setCursor(1, 1);
  lcd.print(hours);
  lcd.setCursor(0, 1);
  lcd.print(tenhours);

}

void buttonPressISR() {
  counter = 0;
}

void timerISR() {
  counter++;
}
#包括
#包括
int buttonPin=2;
液晶显示器(12,11,6,5,4,3);
整数秒,十分钟,十分钟,十分钟,小时,十小时;
可变长计数器=0;
无效设置(){
定时器1.初始化(100000);
定时器1.连接中断(定时器);
pinMode(按钮输入,输入\上拉);
附件中断(0,按钮按下,更改);
lcd.begin(16,2);
lcd.setCursor(0,1);
lcd.打印(“0”);
lcd.setCursor(1,1);
lcd.打印(“0”);
lcd.setCursor(2,1);
lcd.打印(“:”);
lcd.setCursor(3,1);
lcd.打印(“0”);
lcd.setCursor(4,1);
lcd.打印(“0”);
lcd.setCursor(5,1);
lcd.打印(“:”);
lcd.setCursor(6,1);
lcd.打印(“0”);
lcd.setCursor(7,1);
lcd.打印(“0”);
}
void循环(){
秒=(计数器/10)%10;
十位数=(计数器/100)%6;
分钟=(计数器/600)%10;
十分钟=(计数器/6000)%6;
小时数=(计数器/36000)%10;
十小时=(计数器/360000)%10;
lcd.setCursor(7,1);
液晶显示打印(秒);
lcd.setCursor(6,1);
液晶显示器。打印(十);
lcd.setCursor(4,1);
lcd.打印(分钟);
lcd.setCursor(3,1);
lcd.打印(十分钟);
lcd.setCursor(1,1);
lcd.打印(小时);
lcd.setCursor(0,1);
液晶显示器。打印(10小时);
}
void buttonPressISR(){
计数器=0;
}
void timerISR(){
计数器++;
}

您知道有一个Arduino Stack Exchange测试版网站,用于解答Arduino问题吗


我看不出代码中有任何明显的错误。你知道代码上的中断插脚0实际上是Arduino上的数字插脚2吗?

嗯,我以为我在Arduino堆栈交换上。一定是把问题的提交搞砸了。另外,我知道插脚2是中断0-我已将buttonPin分配给2,并且该插脚的中断被分配为0。OK可能通过在ButtonPresssr功能内将LED插脚设置为高来开始调试,然后,您至少可以查看中断或计时算法是否有问题。此外,如果您可以将波特率设置为与串行监视器兼容的波特率,我将通过serial.println发送“counter”以查看发生了什么。波特率?对不起,我对这一切都有点陌生。LED是个好主意,现在就实现了。实际上我刚刚试过,我没有按钮,只是从我的试验板到我的arduino之间有一个跳线,当我将针脚2连接到接地时,它就好像它被改变了一样。我试着把它连接到5v上,以改变它。