Arduino 我怎样才能摆脱这种循环?
我想退出我的Arduino项目。目前我正在编程一个数字手表,一切正常,但我想通过点击一个按钮来添加选项菜单,但点击后,即使代码中有什么东西也不会弹出。看一看。我不知道如何写得更好。如果您有一些想法,请您重写代码的某些部分,并解释为什么这样做。非常感谢 请不要介意s=s+1,我想要那样的Arduino 我怎样才能摆脱这种循环?,arduino,Arduino,我想退出我的Arduino项目。目前我正在编程一个数字手表,一切正常,但我想通过点击一个按钮来添加选项菜单,但点击后,即使代码中有什么东西也不会弹出。看一看。我不知道如何写得更好。如果您有一些想法,请您重写代码的某些部分,并解释为什么这样做。非常感谢 请不要介意s=s+1,我想要那样的 #include "LiquidCrystal.h" #include <EEPROM.h> LiquidCrystal lcd(12,11,5,4,3,2); int h = 0; int m
#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);
}
}
#包括“liquidcystal.h”
#包括
液晶显示器(12,11,5,4,3,2);
int h=0;
int m=0;
int s=0;
int右=8;
int左=9;
int buttonStateLeft=0;
串时;
uint8\u t EEPROMaddress\u sec=1;
uint8\u t EEPROMaddress\u min=2;
uint8\u t EEPROMaddress\u hour=3;
bool clockshow=true;
bool-menuShown=false;
无效设置()
{
lcd.begin(16,2);
pinMode(右,输入);
pinMode(左,输入);
}
void循环()
{
如果(menuShown)
{
lcd.setCursor(0,0);
lcd.打印(“jozo je kkt”);
延迟(200);
}
如果(如图所示){
lcd.setCursor(0,0);
buttonStateLeft=数字读取(左);
如果(按钮卫星左==高)
{
时钟显示=假;
menuShown=真;
lcd.clear();
}
s=EEPROM.read(EEPROMaddress_sec);
m=EEPROM读取(EEPROMaddress_min);
h=EEPROM读取(EEPROMaddress\u小时);
s=s+1;
如果(h>12)
when=“PM”;
if(h<12)
当=“AM”;
如果(h==12)
when=“PM”;
lcd.打印(“Cas:”);
如果(h要做到这一点,您必须使用中断,请注意,您必须将按钮连接到中断插脚(并非每个插脚都是中断插脚)。您可以通过谷歌搜索“您的卡名”的中断插脚是什么”,代码必须更改,您可以按照以下步骤操作:
在设置功能中,替换:
pinMode(left, INPUT);
作者:
在setup()之前添加此函数{…}
并从代码中删除此部分:(loop()函数中的一部分)
当你按下按钮时,你说你看不到任何变化。你按下哪个按钮?在你的代码中,你只检查左按钮(因此你必须按下左按钮)。试着按住按钮一秒钟以上,因为你的arduino在循环结束时会休眠1000毫秒。因此,当你在arduino休眠时按下按钮,arduino不会注意到它。我知道,这对我有效,但当我按住按钮时,我的LCD就会滞后,无法工作。我看不到那里显示的文本(在Menushow中)。这就是问题所在。我希望您能帮助我找到解决方案。您可以添加return;
以跳出循环()
attachInterrupt(digitalPinToInterrupt(left), switchMode, RISING);
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();
}