Arduino 我怎样才能摆脱这种循环?

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

我想退出我的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);
  }
}
#包括“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();
  }