arduino - 我怎样才能摆脱困境?
问题描述
我想在我的 Arduino 项目中摆脱困境。目前我正在对数字手表进行编程,一切正常,但我想通过单击一个按钮来添加选项菜单,但是在单击它之后,即使我在代码中有任何内容,也不会弹出任何内容。看看它。不知道怎么写比较好。如果您有一些想法,请您可以重写代码的某些部分并解释您这样做的原因。提前感谢。
请不要介意 s = s + 1,我想要那样。
#include "LiquidCrystal.h"
#include <EEPROM.h>
LiquidCrystal lcd(12,11,5,4,3,2);
int h = 0;
int m = 0;
int s = 0;
int right = 8;
int left = 9;
int buttonStateLeft = 0;
String when;
uint8_t EEPROMaddress_sec = 1;
uint8_t EEPROMaddress_min = 2;
uint8_t EEPROMaddress_hour = 3;
bool clockShown = true;
bool menuShown = false;
void setup()
{
lcd.begin(16,2);
pinMode(right, INPUT);
pinMode(left, INPUT);
}
void loop()
{
if(menuShown)
{
lcd.setCursor(0,0);
lcd.print("jozo je kkt");
delay(200);
}
if(clockShown) {
lcd.setCursor(0,0);
buttonStateLeft = digitalRead(left);
if(buttonStateLeft == HIGH)
{
clockShown = false;
menuShown = true;
lcd.clear();
}
s = EEPROM.read(EEPROMaddress_sec);
m = EEPROM.read(EEPROMaddress_min);
h = EEPROM.read(EEPROMaddress_hour);
s = s + 1;
if(h > 12)
when = "PM";
if(h < 12)
when = "AM";
if(h == 12)
when = "PM";
lcd.print("Cas: ");
if(h<10)lcd.print("0");
lcd.print(h);
lcd.print(":");
if(m<10)lcd.print("0");
lcd.print(m);
lcd.print(":");
if(s<10)lcd.print("0");
lcd.print(s);
lcd.print(" ");
lcd.print(when);
if(s == 60)
{
s = 0;
m = m+1;
}
if(m == 60)
{
s = 0;
m = 0;
h = h+1;
}
if(h == 24)
{
m = 0;
s = 0;
h = 0;
}
EEPROM.write(EEPROMaddress_sec, s);
EEPROM.write(EEPROMaddress_min, m);
EEPROM.write(EEPROMaddress_hour, h);
delay(1000);
}
}
解决方案
为此,您必须使用中断,请注意,您必须将按钮连接到中断引脚(并非每个引脚都是中断引脚)您可以谷歌“'your_card_name'的中断引脚是什么”,代码将必须改变,你可以按照这些:
在设置功能中替换:
pinMode(left, INPUT);
经过 :
attachInterrupt(digitalPinToInterrupt(left), switchMode, RISING);
在 setup(){...} 之前添加此函数
int lastPressTime=millis();
void switchMode(){ // function called when the button is pressed
if((millis()-lastPressTime)>60){ // for debouncing
clockShown = false;
menuShown = true;
lcd.clear();
lastPressTime=millis();
}
}
并从您的代码中删除这部分:(循环()函数中的那个)
buttonStateLeft = digitalRead(left);
if(buttonStateLeft == HIGH)
{
clockShown = false;
menuShown = true;
lcd.clear();
}
推荐阅读
- javascript - 无法获取 AJAX 调用返回的数据
- filter - 按嵌套数据环回 REST API 过滤器
- android - 在 MIT App Inventor 中调用不同屏幕时应用程序崩溃
- mysql - 是否可以在 INSERT IGNORE INTO mysql 查询中记录日志忽略数据?
- javascript - 我在哪里将我的 mongodb Atlas 连接到我的反应应用程序?
- android - 如何在某些片段中消失“BottomNavigationView”?
- google-maps - 美国各州在 Google 自动填充中的位置偏差或限制
- spring-boot - webpack 开发服务器代理出现错误:HPE_INVALID_CHUNK_SIZE
- mysql - 关于 FTP 服务器和数据库服务器之间的连接
- java - 在android中更改静态字符串变量时更改textview