Grove-LED 按钮
Grove - LED 按钮由 Grove - 黄色按钮、Grove - 蓝色 LED 按钮和 Grove - 红色 LED 按钮组成。该按钮稳定可靠,使用寿命长达 100,000 次。
通过内置的 LED,你可以将其应用于许多有趣的项目,使用 LED 显示按钮的状态非常实用。我们使用高质量的 N-Channel MOSFET 来控制 LED,以确保高开关速度和低功耗。总之,你想要一些非常棒的按钮吗?这里就是你的选择……
版本
产品版本 | 变更内容 | 发布日期 |
---|---|---|
Grove-LED 按钮 | 初始版本 | 2018年6月 |
版本
产品版本 | 变更内容 | 发布日期 |
---|---|---|
Grove-LED 按钮 | 初始版本 | 2018年6月 |
版本
产品版本 | 变更内容 | 发布日期 |
---|---|---|
Grove-LED 按钮 | 初始版本 | 2018年6月 |
特性
- 长使用寿命
- 易于使用
- Grove 数字接口
规格
项目 | 参数值 |
---|---|
工作电压 | 3.3V/5V |
无负载操作寿命 | 100,000 次 |
LED 额定电流 | 50mA |
按压电阻^1^ | <100mΩ |
释放电阻^2^ | >100MΩ |
尺寸 | 长: 40mm 宽: 20mm 高: 13mm |
重量 | 4.3g |
包装尺寸 | 长: 140mm 宽: 90mm 高: 10mm |
毛重 | 11g |
1,2- 如果你想测量电阻,请将按键帽从板上取下。否则,你将测得的是板的等效电阻值,而不是按键帽的真实电阻值。
硬件概述
引脚图
原理图
SIG1 是 LED 控制信号,默认值为低电平,因此 N-Channel MOSFET 处于关闭状态,LED 也关闭。当 SIG1 变为高电平时,N-Channel MOSFET 打开,LED 点亮。
SIG2 连接到按钮引脚。由于有上拉电阻,SIG2 的默认值为高电平。当按下按钮时,电压被拉低,SIG2 变为低电平。
支持的平台
Arduino | 树莓派 | |||
---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
入门指南
在本部分中,我们以 Grove - 红色 LED 按钮为例。以下内容同样适用于黄色和蓝色版本。
使用 Arduino
硬件
所需材料
Seeeduino V4.2 | Base Shield | Grove- 红色 LED 按钮 |
---|---|---|
![]() | ![]() | ![]() |
立即购买 | 立即购买 | 立即购买 |
-
步骤 1. 将 Grove- 红色 LED 按钮连接到 Grove-Base Shield 的 D3 端口。
-
步骤 2. 将 Grove - Base Shield 插入 Seeeduino。
-
步骤 3. 使用 USB 数据线将 Seeeduino 连接到电脑。
如果没有 Grove Base Shield,我们也可以直接将此模块连接到 Seeeduino,如下所示。
Seeeduino | Grove- 红色 LED 按钮 |
---|---|
5V | 红色 |
GND | 黑色 |
SIG2 | 白色 |
SIG1 | 黄色 |
软件
如果这是您第一次使用 Arduino,我们强烈建议您在开始之前查看 Arduino 入门指南。
- 步骤 1. 打开 Arduino IDE 并创建一个新文件,然后将以下代码复制到新文件中。
#include "Arduino.h"
//1: toggle mode, 2: follow mode
#define LED_MODE 1
const int ledPin = 3; // LED 引脚编号,D3
const int buttonPin = 4; // 按钮引脚编号,D4
const boolean breathMode = true; // LED 是否以呼吸模式点亮
// 变量将会改变:
int ledState = LOW; // 输出引脚的当前状态
int ledFadeValue = 0;
int ledFadeStep = 5;
int ledFadeInterval = 20; // 毫秒
int buttonState; // 输入引脚的当前读取状态
int lastButtonState = HIGH; // 输入引脚的上一次读取状态
unsigned long lastDebounceTime = 0; // 上一次切换输出引脚的时间
unsigned long debounceDelay = 50; // 去抖时间;如果输出闪烁,请增加此值
unsigned long lastLedFadeTime = 0;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
}
void loop() {
int reading = digitalRead(buttonPin);
// 如果开关状态发生变化(由于噪声或按压):
if (reading != lastButtonState) {
// 重置去抖计时器
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
// 当前读取状态已经持续超过去抖延迟时间,因此将其视为实际状态:
// 如果按钮状态发生变化:
if (reading != buttonState) {
buttonState = reading;
#if LED_MODE == 1
if (buttonState == LOW) { // 按钮被按下
ledState = !ledState;
ledFadeValue = 0;
lastLedFadeTime = millis();
}
#else
if (buttonState == LOW) { // 按钮被按下
ledState = HIGH;
ledFadeValue = 0;
lastLedFadeTime = millis();
} else { // 按钮被释放
ledState = LOW;
}
#endif
}
}
// 设置 LED:
if (breathMode && ledState != LOW) {
if (millis() - lastLedFadeTime > ledFadeInterval) {
lastLedFadeTime = millis();
analogWrite(ledPin, ledFadeValue);
ledFadeValue += ledFadeStep;
if (ledFadeValue > 255){
ledFadeValue = 255 - ledFadeStep;
ledFadeStep = -ledFadeStep;
} else if (ledFadeValue < 0) {
ledFadeValue = 0;
ledFadeStep = -ledFadeStep;
}
}
} else {
digitalWrite(ledPin, ledState);
}
lastButtonState = reading;
}
在本演示中,我们选择了模式 1,即切换模式。您可以将第 4 行的 #define LED_MODE 1 更改为 #define LED_MODE 2 来使用跟随模式。
-
步骤 2. 上传示例代码。如果您不知道如何上传代码,请查看 如何上传代码。
-
步骤 3. 现在,尝试按下按钮,您会看到 LED 灯以渐亮/渐暗的效果点亮。
效果如下:
使用 Raspberry Pi
硬件
- 步骤 1. 本项目中使用的物品:
Raspberry Pi | Grove Base Hat for RasPi | Grove - Red LED Button |
---|---|---|
![]() | ![]() | ![]() |
立即购买 | 立即购买 | 立即购买 |
- 步骤 2. 将 Grove Base Hat 插入 Raspberry Pi。
- 步骤 3. 将红色 LED 按钮连接到 Base Hat 的 D5 端口。
- 步骤 4. 通过 USB 数据线将 Raspberry Pi 连接到电脑。
对于步骤 3,您可以将 LED 按钮连接到 任何 GPIO 端口,但请确保更改命令以匹配相应的端口号。
软件
如果您使用的是 Raspberry Pi 且 Raspberry Pi OS >= Bullseye,您必须仅使用 Python3 执行以下命令。
- 步骤 1. 按照 设置软件 配置开发环境。
- 步骤 2. 通过克隆 grove.py 库下载源文件。
sudo pip3 install Seeed-grove.py
cd ~
git clone https://github.com/Seeed-Studio/grove.py
- 步骤 3. 执行以下命令运行代码。
cd grove.py/grove
sudo python3 grove_ryb_led_button.py 5
以下是 grove_ryb_led_button.py 的代码。
import time
from grove.button import Button
from grove.factory import Factory
class GroveLedButton(object):
def __init__(self, pin):
# 高电平 = 灯亮
self.__led = Factory.getOneLed("GPIO-HIGH", pin)
# 低电平 = 按下
self.__btn = Factory.getButton("GPIO-LOW", pin + 1)
self.__on_event = None
self.__btn.on_event(self, GroveLedButton.__handle_event)
@property
def on_event(self):
return self.__on_event
@on_event.setter
def on_event(self, callback):
if not callable(callback):
return
self.__on_event = callback
def __handle_event(self, evt):
# print("event index:{} event:{} pressed:{}".format(evt['index'], evt['code'], evt['presesed']))
if callable(self.__on_event):
self.__on_event(evt['index'], evt['code'], evt['time'])
return
self.__led.brightness = self.__led.MAX_BRIGHT
event = evt['code']
if event & Button.EV_SINGLE_CLICK:
self.__led.light(True)
print("turn on LED")
elif event & Button.EV_DOUBLE_CLICK:
self.__led.blink()
print("blink LED")
elif event & Button.EV_LONG_PRESS:
self.__led.light(False)
print("turn off LED")
Grove = GroveLedButton
def main():
from grove.helper import SlotHelper
sh = SlotHelper(SlotHelper.GPIO)
pin = sh.argv2pin()
ledbtn = GroveLedButton(pin)
# 删除下面的 ''' 对以开始实验
'''
# 自定义事件处理
def cust_on_event(index, event, tm):
print("event with code {}, time {}".format(event, tm))
ledbtn.on_event = cust_on_event
'''
while True:
time.sleep(1)
if __name__ == '__main__':
main()
如果一切正常,您将能够看到按下按钮时 LED 点亮,长按时 LED 熄灭。如果双击 LED 按钮,LED 将闪烁。
pi@raspberrypi:~/grove.py/grove $ python3 grove_ryb_led_button.py 5
Hat Name = 'Grove Base Hat RPi'
turn on LED
turn on LED
blink LED
turn on LED
turn off LED
^CTraceback (most recent call last):
File "grove_ryb_led_button.py", line 101, in <module>
main()
File "grove_ryb_led_button.py", line 97, in main
time.sleep(1)
KeyboardInterrupt
您可以通过按下 ++ctrl+c++ 退出此程序。
原理图在线查看器
资源
- [Zip] Grove-LED 按钮 Eagle 文件
技术支持与产品讨论
感谢您选择我们的产品!我们致力于为您提供多种支持,以确保您使用我们的产品时获得最佳体验。我们提供多个沟通渠道,以满足不同的偏好和需求。