首页 > 解决方案 > Arduino LCD 定时器显示

问题描述

我一直在尝试用 Arduino 制作一个计时器,它会在 2 小时后停止并让蜂鸣器响起。我已经成功地让计时器计数秒数增加,但现在我尝试让它显示小时和分钟并让蜂鸣器响起,感谢所有帮助,这是项目的代码和图片

#include <LiquidCrystal.h> 
LiquidCrystal lcd(1,2,4,5,6,7); // setup the lcd 
#define button 3
         // setup integers //
int timerMode=0;
int buzzer=8;
int wait=400;
int longWait=5000;
int startTime;
int hours=(millis() - startTime) / 360000;




void setup() {
lcd.begin(16,2); // start lcd //
lcd.clear();  // clear old text //
pinMode(button, INPUT_PULLUP); // make button an input //
pinMode(buzzer, OUTPUT); // make buzzer an output //
lcd.print("Ergo timer"); // print begin text //

 
}

void loop() {
lcd.setCursor(0,1);
if (digitalRead(button) == LOW){ // if button is pressed//
  startTime=millis();
  timerMode++;
  delay(wait);
}

if (timerMode==1){ // if timermode is 1 after a button press //
  lcd.setCursor(0,0);
  lcd.print("Over 2 uur pause"); // print top text //
  lcd.setCursor(0,5);
  lcd.print( (millis() - startTime) / 1000); // print time in seconds //
  lcd.setCursor(0,4);
  lcd.print(":"); // print a column between //
  lcd.setCursor(0,3);
  lcd.print( (millis() - startTime) / 60000); // print time in minutes //
  lcd.setCursor(0,2);
  lcd.print(":");
  lcd. setCursor(0,1);
  lcd.print( (millis() - startTime) / 360000); // print time in hours //
 

 }

  if (hours == 2){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("---Nu pause---");
    tone(buzzer,200,1000);
    
   }

if (timerMode > 1){
  delay(longWait);
  timerMode=0;
  lcd.clear();
  lcd.print("---Ergo timer---");
 }

标签: c++timerarduinolcd

解决方案


int hours=(millis() - startTime) / 360000;是胡说八道。C++ 代码从上到下执行。每当某些变量发生变化时,程序不会神奇地重新访问以前执行的行。

这意味着这条线不会创建一些神奇的公式,hours只要有变化就会更新。它只是创建一行代码,在启动时执行一次,当startTime未初始化时,millis()如果定时器外围硬件尚未设置,可能会产生废话。

您需要将此代码移动到主循环中。int由于这是一个嵌入式系统,您还应该放弃所有幼稚的“原始数据类型”,例如stdint.h


推荐阅读