

K12Diy.com
硬件
型号 | Int.0 | Int.1 | Int.2 | Int.3 | Int.4 | Int.5 | 备注 |
UNO | 2 | 3 | |||||
Mega2560 | 2 | 3 | 21 | 20 | 19 | 18 | |
Leonardo | 3 | 2 | 0 | 1 | |||
Due | 所以IO都可 | ||||||
中断函数不能带任何参数,且没有返回类型
例如:
void hello()
{
Serial.println("hello");
}
在大多数arduino上有以下四种触发方式:
LOW | 低电平触发 |
CHANGE | 电平变化,高电平变低电平、低电平变高电平 |
RISING | 上升沿触发 |
FALLING | 下降沿触发 |
HIGH | 高电平触发(该中断模式仅适用于Arduino Due) |
配置函数如下:
attachInterrupt(interrupt, function, mode);
interrupt为你中断通道编号,function为中断函数,mode为中断触发模式
需要注意的是在Arduino Due中,中断设置有点不同:
attachInterrupt(pin, function, mode);
due 的每个IO均可以进行外部中断,所以这里第一个参数为pin,即你使用的引脚编号。
int pin = 13;
volatile int state = LOW;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);//当int.0电平改变时,触发中断函数blink
}
void loop()
{
digitalWrite(pin, state);
}
void blink()//中断函数
{
state = !state;
}
const byte interruptPin = 25;
volatile int interruptCounter = 0;
int numberOfInterrupts = 0;
portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;
void handleInterrupt() {
portENTER_CRITICAL_ISR(&mux);
interruptCounter++;
portEXIT_CRITICAL_ISR(&mux);
}
void setup() {
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), handleInterrupt, FALLING);
}
void loop() {
if(interruptCounter>0){
portENTER_CRITICAL(&mux);
interruptCounter--;
portEXIT_CRITICAL(&mux);
numberOfInterrupts++;
Serial.print("An interrupt has occurred. Total: ");
Serial.println(numberOfInterrupts);
}
delay(1000);
}
新完成了一个AD7176数据采集项目:
这个板卡的质量很好,高速采集下仍然很稳定
// --------A: ADc和接口模式配置 -------------
// A.1: ADC模式寄存器
setupAdcModeReg(); // 0x01
delay(1);
// GPIO配置寄存器
setupGPIOReg(); // 0x06
//-------- B: ADC设置 ---------------------
// B.1: 设置配置寄存器
setupConfigReg(); // 0x20
// B.2: 滤波器配置寄存器
setupFilterReg(); // 0x28
// B.3: 失调寄存器
setupOffsetReg(); // 0x30
// B.4: 增益寄存器
setupGainReg(); // 0x38
// ------C: 通道映射设置 -----------------
// C.1: 通道映射
setupChMap(); // 0x10
// A.2: 接口模式寄存器
setupIfModeReg(); // 0x02
理解了上面这个配置流程,开发起来也就很容易了。
Rossum 是一位有名的 maker,他在最近的一篇博文中向大家介绍了他的最新作品 ESP_8_BIT。这是一个有趣的小工具,只用一颗 ESP32 芯片,即可让用户在电视上享受 Atari 8-bit、NES (Nintendo Entertainment System,红白机) 和 SMS (Sega Master System) 游戏机带来的怀旧游戏体验。
ESP_8_BIT 基于 Arduino IDE 框架,可在 ESP32 上正常运行。它支持 NTSC/PAL 彩色合成视频输出,其 4x 彩色载波信号是由音频 PLL/DAC 在 14.318180 MHz 或 17.734476 MHz 下产生的。ESP_8_BIT 支持经典蓝牙,以及各种 IR 键盘和操纵杆,它包括一个在 VHCI API 上实现的 HCI/L2CAP/HID 栈,支持蓝牙 EDR 外设、WiiMotes 等。ESP_8_BIT 的视频和音频技术十分出色,蓝牙性能也很突出,正因如此,其代码质量也非常高,看起来非常清晰直观。
点此在 YouTube 上观看 ESP_8_BIT 的运行情况。ESP_8_BIT 示意图如下所示:
这个项目基于 Atari800 模拟器实现了对 Atari 的支持,乐鑫的 ESP32 在其中也扮演了核心角色。Rossum 对此幽默地表示:“我实在太喜欢 Atari 8-bit 了!四十年了,每当我看到经典的蓝色背景和摇摆的字体时都会十分兴奋。它奇妙的工业设计和磁盘驱动器是一个传奇,很开心看到它以这种新的形式回归!”
ESP_8_BIT 基于 smsplus、playing .sms (Sega Master System) 和 .gg (Game Gear) ROM,实现了对 Sega Master System (SMS) 的支持。正如 Rossum 所言:“这个项目所用的模拟器,就是当时 SpriteTM 第一次向我们展示功能强大的 ESP32 时用的那一个!” 他所提到的 Sprite TM,也是乐鑫的软件工程师、技术营销经理 Jeroen Domburg。Rossum 评价 Jeroen 是“丰富了 ESP32 生态,使其更加有趣和更有价值的一位重要人物。”
点此访问 Rossum 的个人博客,查看更多关于该项目的详细内容