首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino LCD时钟不工作

Arduino LCD时钟不工作
EN

Stack Overflow用户
提问于 2012-09-01 01:02:15
回答 2查看 1.8K关注 0票数 0

我的代码应该是在LCD屏幕的第一行显示一个时钟,在第二行显示文本"Hello World“:

代码语言:javascript
复制
#include <LiquidCrystal.h>
int x=0;
int a=0;
int y=0;
int z=0;
int initialHours = 14;//set this to whatever
int initialMins = 37;
int initialSecs = 45 + 11;

int secspassed()
{
    x = initialHours*3600;
    x = x+(initialMins*60);
    x = x+initialSecs;
    x = x+(millis()/1000);
    return x;
}

int hours()
{
    y = secspassed();
    y = y/3600;
    y = y%24;
    return y;
}

int mins()
{
    z = secspassed();
    z = z/60;
    z = z%60;
    return z;
}

int secs()
{
    a = secspassed();
    a = a%60;
    return a;
}

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup(){
    lcd.print("load...");
    delay(1000);
    lcd.begin(16, 2);
    lcd.setCursor(0, 1);
    lcd.print("Hello world");
}

void loop(){
    digitalClockDisplay();
}

void printDigits(byte digits){
    if(digits < 10)
        lcd.print('0');
    lcd.print(digits);
}

char sep()
{
    x = millis()/1000;
    if(x%2==0)
    {
        lcd.print(":");
    }
    else {
        lcd.print(" ");
    }
}

void digitalClockDisplay(){
    lcd.setCursor(0,0);
    printDigits(
    hours());
    sep();
    printDigits(mins());
    sep();
    printDigits(secs());
}

而不是打印以下内容

代码语言:javascript
复制
12:35:15
Hello World

相反,它会打印以下内容:

代码语言:javascript
复制
253:255:243
Hello World

为什么?

我不想用时间库,顺便说一句。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-01 01:41:36

代码溢出了arduino的capacity of an int,这里的值是+/- 32767:

代码语言:javascript
复制
int secspassed()
{
  x = initialHours*3600;
  x = x+(initialMins*60);

在这一点上x应该是:

14 * 3600 * 60 = 3024000

这比int可以容纳的+32767值大得多,并且溢出被丢弃,留下表示不相关的数字的位。

还应该清理使用int调用打印例程并将其转换为字节。

票数 3
EN

Stack Overflow用户

发布于 2012-09-01 02:45:40

我刚刚弄明白为什么这是一个坏主意,使用rollovers之类的东西。以下是为感兴趣的人提供的更新代码:

代码语言:javascript
复制
#include <LiquidCrystal.h>

int second=0, minute=0, hour=0;
int x=0;

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup(){
    lcd.print("load...");
    delay(1000);
    lcd.begin(16, 2);
    lcd.setCursor(0, 1);
    lcd.print("Hello, world ");
}

void loop(){
    static unsigned long lastTick = 0;
    if (millis() - lastTick >= 1000) {
        lastTick = millis();
        second++;
    }

    // Move forward one minute every 60 seconds
    if (second >= 60) {
        minute++;
        second = 0; // Reset seconds to zero
    }

    // Move forward one hour every 60 minutes
    if (minute >=60) {
        hour++;
        minute = 0; // Reset minutes to zero
    }

    if (hour >=24) {
        hour=0;
        minute = 0; // Reset minutes to zero
    }
    digitalClockDisplay();
}

void printDigits(byte digits){
    if(digits < 10)
        lcd.print('0');
    lcd.print(digits);
}

char sep()
{
    x = millis()/500;
    if(x%2==0)
    {
        lcd.print(":");
    }
    else{
        lcd.print(" ");
    }
}

void digitalClockDisplay(){
    lcd.setCursor(0,0);
    printDigits(hour);
    sep();
    printDigits(minute);
    sep();
    printDigits(second);
}

玩得开心!

附言:有关更新后的代码,请访问my blog

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12219662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档