我发现Arduino的例程比较有意思,你可以把它考出来,另起个命,或放到自己的文件夹下。
我就把按键中断那个考出来。到我自己的目录下,这样好改。
查了一下原理图:
查到KEY5,KEY6,对应着IO18和IO5,那还糊途什么改写如下:
#include <Arduino.h>
#include <FunctionalInterrupt.h>
#define BUTTON1 18
#define BUTTON2 5
class Button
{
public:
Button(uint8_t reqPin) : PIN(reqPin){
pinMode(PIN, INPUT_PULLUP);
attachInterrupt(PIN, std::bind(&Button::isr,this), FALLING);
};
~Button() {
detachInterrupt(PIN);
}
void IRAM_ATTR isr() {
numberKeyPresses += 1;
pressed = true;
}
void checkPressed() {
if (pressed) {
Serial.printf("Button on pin %u has been pressed %u times\n", PIN, numberKeyPresses);
pressed = false;
}
}
private:
const uint8_t PIN;
volatile uint32_t numberKeyPresses;
volatile bool pressed;
};
Button button1(BUTTON1);
Button button2(BUTTON2);
void setup() {
Serial.begin(115200);
}
void loop() {
button1.checkPressed();
button2.checkPressed();
}
运行结果:
深深感到Arduino是个不错的东东,缺点是不能JTAG调试,只能调它的万能的库。