Arduino Modulino 按钮教程

什么是 Arduino Modulino 按钮模块?

Arduino Modulino 按钮模块是 Arduino 最新即插即用套件的重要组成部分。它提供了一个传统的用户界面,包括三个按钮和三个软件控制的 LED,如图 1 所示。

Modulino 生态系统以其从硬件和软件角度一致的用户体验而闻名。这是通过在每个 Modulino 上安装的 32 位 STMicroelectronics ARM 微控制器实现的。该微控制器将部分责任从 Arduino UNO R4 WiFi 转移到 Modulino。这使得 Arduino 程序员能够在 Qwiic 网络上实现标准化的通信协议。

1 :Arduino Modulino 板的图像,展示了三个按钮和三个独立控制的 LED。微小的32位STM ARM微控制器在左下角可见。该 Modulino 固定在即插即用套件的底座上。

技术提示 :Qwiic 是用于轻松连接微控制器相关原型开发板的几种竞争格式之一。您可能还会遇到(有条件交叉兼容的)Stemma QT 甚至 MikroElektronika Click 模块。所有这些都旨在为开发人员提供无需面包板的连接,这对于小间距表面贴装设备尤其有益。

Arduino Modulino 按钮的软件描述

与所有 Arduino Modulino 板一样,按钮在 C++ 面向对象编程环境中作为对象实现。下面显示了一个简单的代码列表。请注意,一个按钮对象被构造。提供了三种方法,包括:

  • update( ); 该方法是一个 getter,用于启动从 Modulino 到 WiFi 的数据传输。它返回一个布尔值,指示按钮状态是否发生了变化。按钮数据(状态)保存在按钮对象内部。并且必须使用 isPressed( ) 方法访问。

  • isPressed( ); 该方法允许程序员从按钮对象内部访问单个按钮数据。按钮 A 位于索引 0。

  • setLeds( ); 该方法是一个 setter,用于将值推送到按钮模块的红色 LED。它需要三个参数,分别对应A、B和C LED。

#include <Modulino.h>
ModulinoButtons buttons;                  // Constructor

void setup( ) {
  Modulino.begin( );
  buttons.begin( );
}

void loop( ) {

  if (buttons.update( )) {                 // Get data from the Modulino and then check for a change
    bool btn_A = buttons.isPressed(0);    // Pull data from object
    bool btn_B = buttons.isPressed(1);
    bool btn_C = buttons.isPressed(2);

    buttons.setLeds(btn_A, btn_B, btn_C); // Send data to the LEDs
  }
}

技术提示 :update()方法是一种减少Qwiic网络流量的巧妙方式。由于它返回一个表示按钮活动的布尔值,程序员知道何时采取行动。例如,在前面的代码列表中,LED只会在按钮改变时更新。随着更多模块添加到I2C网络中,这个简单的事实变得越来越重要。请记住,时间是一种宝贵的资源。你可能会耗尽带宽,而带宽是响应式实时系统的关键资源。

如何消除 Modulino 按钮的抖动

对于微控制器程序员来说,触点抖动是一个具有挑战性的物理现实,因为开关和继电器的触点会像球一样弹跳,然后才稳定下来。在电气上,这种抖动表现为一系列快速过渡(尖峰)。快速的数字电路会将抖动信号解释为多次开关过渡。例如,一个用于计算按钮按下次数的例程可能会记录每次按下的数十次过渡。

Modulino蜂鸣器的程序员已经为我们处理了抖动问题。你可以使用示波器监控一个I/O引脚来验证这一说法,该引脚在每次检测到按钮变化时都会切换。在此应用中,示波器显示了一个没有抖动的干净信号。从用户按下按钮(在按钮本身测量)到引脚切换之间有0.5到1毫秒的延迟。

#include <Modulino.h>
ModulinoButtons buttons;  // Constructor

void setup( ) {
  Modulino.begin();
  buttons.begin();
  pinMode(2, OUTPUT);
}

void loop( ) {
  static bool X;
  if (buttons.update( )) {  // Get data from the Modulino and then check for a change
    X = !X;
    digitalWrite(2, X);
  }
}

技术提示 :每个Modulino按钮的LED都需要限流串联电阻

每个开关都需要上拉电阻。这些上拉电阻可以是外部的,也可以是微控制器内部的,例如使用上拉电阻外设时。外部电阻提供了更大的灵活性,但增加了零件数量。请参考Arduino原理图以进一步研究。

通信协议

许多Arduino Modulino产品都包含一个STM ARM处理器,如图1所示。由于完全控制了Arduino库和Modulino的ARM微控制器,Arduino程序员已经制定了一个统一的通信协议。我留给你来逆向工程这个帧。该技术与Modulino蜂鸣器教程中使用的技术类似。

最后的思考

这篇简短的文章在设计响应式用户界面时只是触及了表面。我们已经探讨了按钮模块的机制,但尚未深入研究诸如何时以及如何绕过阻塞代码等细节。例如,当delay()函数处于活动状态或微控制器忙于执行重要任务时,响应按钮按下并非易事。

相关信息

请点击以下链接获取相关和有用的信息: