Arduino Uno 上的两个 ISR

Posted

技术标签:

【中文标题】Arduino Uno 上的两个 ISR【英文标题】:Two ISR's on Arduino Uno 【发布时间】:2015-02-05 16:26:41 【问题描述】:

我正在为家庭作业编写一些代码,部分作业是让一个 16x2 的 LCD 显示器显示 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++;

【问题讨论】:

【参考方案1】:

您知道有一个 Arduino Stack Exchange 测试版网站可以解决 Arduino 问题吗?

我在代码中看不到任何明显的错误。您是否知道代码上的中断引脚 0 实际上是 Arduino 上的数字引脚 2?

【讨论】:

嗯,我以为我在 arduino 堆栈交换。一定搞砸了问题的提交。另外,我知道引脚 2 是中断 0 - 我将 buttonPin 分配给 2,并将其中断分配为 0。 OK 也许可以通过将 buttonPressISR 函数中的 LED 引脚设置为高来开始调试,然后您至少可以查看是您的中断或时序算法有问题。 此外,如果您可以将波特率设置为与串行监视器兼容的波特率,我将通过 Serial.println 发送“计数器”以查看发生了什么。 波特率?抱歉,我对这一切有点陌生。 LED 是个好主意,现在就实施。 其实我刚试过,我没有按钮,只是从我的面包板到我的 arduino 的跳线,当我将引脚 2 连接到地时,它的行为就好像它已经改变了一样。我试图将它连接到 5v 以改变它。

以上是关于Arduino Uno 上的两个 ISR的主要内容,如果未能解决你的问题,请参考以下文章

arduino uno r3 上的这么多针脚都有啥用?

使用单电机控制 Arduino (Uno) 库控制两个步进电机

Swift 3 arduino Uno HM-10 Ble - iPhone 上的通知

无法通过蓝牙将Arduino Uno连接到Blynk

arduino leonardo r3 和 arduino uno r3 有啥区别

如何给Arduino UNO下载Bootloader?