富芮坤fr8016ha跳绳参考代码
时间: 2023-05-14 16:03:19 浏览: 357
富芮坤fr8016ha是一款自带计数的跳绳,跳绳的计数、暂停、复位等功能都可以通过按键进行控制。以下是基于Arduino平台的参考代码:
#include <LiquidCrystal_I2C.h> //LCD库
#define BUTTON_COUNT 4 //按键数量
#define BUTTON_PIN 2 //按键引脚
#define LED_PIN 13 //LED引脚
#define LED_ON_DURATION 100 //LED亮时长(ms)
#define LCD_WIDTH 16 //LCD宽度(字符)
#define LCD_HEIGHT 2 //LCD高度(行数)
LiquidCrystal_I2C lcd(0x27, LCD_WIDTH, LCD_HEIGHT); //创建LCD对象
int buttonPins[BUTTON_COUNT] = {2, 3, 4, 5}; //按键引脚列表
int buttonStates[BUTTON_COUNT] = {HIGH, HIGH, HIGH, HIGH}; //按键状态列表
int lastButtonStates[BUTTON_COUNT] = {HIGH, HIGH, HIGH, HIGH}; //上次按键状态列表
int buttonClicked[BUTTON_COUNT] = {0, 0, 0, 0}; //按键单击状态列表
int ledState = LOW; //LED当前状态
unsigned long ledOnTime = 0; //LED亮起时间
int jumpCount = 0; //跳绳计数
bool jumpPaused = false; //跳绳暂停状态
void setup() {
pinMode(LED_PIN, OUTPUT); //设置LED引脚为输出
lcd.init(); //初始化LCD
lcd.backlight(); //打开背光
lcd.setCursor(0, 0); //设置光标位置
lcd.print("Jump Count: 0"); //显示初始计数
}
void loop() {
//读取按键状态
for (int i = 0; i < BUTTON_COUNT; i++) {
lastButtonStates[i] = buttonStates[i];
buttonStates[i] = digitalRead(buttonPins[i]);
if (buttonStates[i] == LOW && lastButtonStates[i] == HIGH) {
buttonClicked[i] = 1;
} else {
buttonClicked[i] = 0;
}
}
//按键单击处理
if (buttonClicked[0]) { //计数
jumpCount++;
if (jumpPaused) {
jumpPaused = false;
}
displayJumpCount();
flashLed();
}
if (buttonClicked[1]) { //暂停/恢复
jumpPaused = !jumpPaused;
displayJumpCount();
flashLed();
}
if (buttonClicked[2]) { //复位
jumpCount = 0;
jumpPaused = false;
displayJumpCount();
flashLed();
}
if (buttonClicked[3]) { //测试
testButton();
}
//LED计时控制
if (ledState == HIGH && millis() - ledOnTime >= LED_ON_DURATION) {
ledState = LOW;
digitalWrite(LED_PIN, ledState);
}
//跳绳暂停判断
if (jumpPaused) {
while (digitalRead(buttonPins[1]) == LOW) { //等待恢复按键
delay(50);
}
}
delay(50);
}
void displayJumpCount() {
lcd.setCursor(0, 0); //设置光标位置
lcd.print("Jump Count: "); //显示计数标题
lcd.print(jumpCount); //显示实际计数值
lcd.setCursor(0, 1); //设置光标位置
if (jumpPaused) {
lcd.print("Jump Paused");
} else {
lcd.print(" "); //清空暂停提示文本
}
}
void flashLed() {
ledState = HIGH;
digitalWrite(LED_PIN, ledState);
ledOnTime = millis();
}
void testButton() {
for (int i = 0; i < BUTTON_COUNT; i++) {
lcd.setCursor(0, i);
lcd.print("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
while (digitalRead(buttonPins[i]) != LOW) {
delay(50);
}
lcd.setCursor(0, i);
lcd.print(buttonPins[i]);
delay(1000);
}
}
代码中定义了4个按键分别对应计数、暂停/恢复、复位、测试操作。其中测试操作是为了调试按键,非正式的功能。
跳绳计数直接在计数按键响应中进行,每次计数时显示计数值并闪烁LED。跳绳暂停和恢复则在暂停/恢复按键响应中进行,切换暂停状态并显示相应的文本。跳绳复位则在复位按键响应中进行,将计数清零并恢复计数。另外需要注意的是,跳绳暂停时如果用户一直按住暂停/恢复按键则应该在恢复前等待用户松开按键。