0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何创建一个Arduino控制的厨房计时器

454398 来源:工程师吴畏 2019-08-05 10:39 次阅读

厨房定时器用户界面流程

打开电源后,设备将显示“Arduino Kitchen Timer”消息3秒钟。

然后计时器将提示您设置时间。您可以通过按左右键将光标移动到分钟和小时。

您可以使用向上和向下箭头键调整分钟和小时设置。

设置了所需的时间后,按下选择按钮,计时器将启动。

如果您想再次设置时间,请再次按下选择按钮。

一旦时间结束,蜂鸣器将发出蜂鸣声。

要停止蜂鸣器,请按键盘护罩上的重置按钮。

厨房定时器所需的组件

Arduino

LCD键盘护盾

蜂鸣器

厨房定时器的电路图

首先,对齐并放置L CD Keypad直接屏蔽Arduino。然后将蜂鸣器的正极连接到Arduino上的引脚12,将蜂鸣器的负极连接到地面。

Arduino厨房定时器项目代码

将以下代码复制并上传到Arduino IDE中。代码的每个部分都有一个附带的解释,以帮助您了解它的功能。

#include

// select the pins used for the LCD keypad

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

// define some variables

int lcd_key = 0;

int adc_key_in = 0;

int hrs = 0;

int mins = 0;

int set_mins = 0;

int set_hrs = 1;

int secs = 60;

int cursor_pos = 1;

int buzzer_pin = 12;

bool startTimer = false;

bool setTimer = true;

bool get_time = false;

unsigned long interval=1000; // the time we need to wait

unsigned long previousMillis=0; // millis() returns an unsigned long.

// Defining button used by the lcd keypad

#define btnRIGHT 0

#define btnUP 1

#define btnDOWN 2

#define btnLEFT 3

#define btnSELECT 4

#define btnNONE 5

// read the buttons

int read_LCD_buttons()

{

adc_key_in = analogRead(0); // reading the button value from the lcd keypad

// checking which button is pressed

if (adc_key_in 》 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result

if (adc_key_in 《 50) return btnRIGHT;

if (adc_key_in 《 250) return btnUP;

if (adc_key_in 《 450) return btnDOWN;

if (adc_key_in 《 650) return btnLEFT;

if (adc_key_in 《 850) return btnSELECT;

return btnNONE; // when all others fail, return this.。.

}

void setup()

{

Serial.begin(115200);

pinMode(buzzer_pin, OUTPUT);

lcd.begin(16, 2); // start communication with LCD keypad shield

lcd.setCursor(0,0);

lcd.print(“Arduino Kitchen”);

lcd.setCursor(0, 1);

lcd.print(“ Timer”);

delay(3000);

}

void loop(){

// Checking which condition is true based on the button pressed

if(startTimer == true){

start_timer();

}

else if (setTimer == true){

set_timer();

}

}

// This function will count the time and will beep the buzzer when the time will be up.

void start_timer(){

// Checking whether time is up or not

if(hrs == 0 && mins == 0 && secs == 0){

lcd.setCursor(0, 0);

lcd.print(“ Time is UP”);

lcd.setCursor(0, 1);

lcd.print(“ Beep Beep”);

digitalWrite(buzzer_pin, HIGH);

delay(500);

digitalWrite(buzzer_pin, LOW);

delay(500);

}

else if(secs 《 0){

secs = 59;

mins = mins - 1;

}

else if(mins 《 0){

mins = 59;

hrs = hrs - 1;

}

else

{

get_time = true;

counter();

lcd.setCursor(0, 0);

lcd.print(“Timer is ON”);

lcd.setCursor(0, 1);

lcd.print(hrs);

lcd.print(“:”);

lcd.setCursor(4, 1);

lcd.print(mins);

lcd.print(“:”);

lcd.setCursor(8, 1);

lcd.print(secs);

}

lcd_key = read_LCD_buttons(); // read the buttons

switch (lcd_key) // depending on which button was pushed, we perform an action

{

// if select button is pressed, move back to set time

case btnSELECT:

{

startTimer = false;

setTimer = true;

delay(300);

lcd.clear();

break;

}

case btnNONE:

{

break;

}

}

}

// This function will set the time

void set_timer(){

counter();

lcd.setCursor(0, 0);

lcd.print(“Set Time”);

lcd.setCursor(0, 1);

lcd.print(“Hrs:”);

lcd.print(hrs);

lcd.setCursor(8, 1);

lcd.print(“Mins:”);

lcd.print(mins);

lcd.setCursor(0,1);

lcd_key = read_LCD_buttons(); // read the buttons

switch (lcd_key) // depending on which button was pushed, we perform an action

{

// if right button is pressed, then move the cursor to minutes

case btnRIGHT:

{

cursor_pos = set_mins;

break;

}

// if left button is pressed, then move the cursor to hours

case btnLEFT:

{

cursor_pos = set_hrs;

break;

}

// if up button is pressed, add 1 to the minutes or hours

case btnUP:

{

delay(300);

if(cursor_pos == set_mins){

mins++;

if(mins 》 59){

mins = 0;

}

}

else if(cursor_pos == set_hrs){

hrs++;

if(hrs 》 24){

hrs = 0;

}

}

break;

}

// if down button is pressed, minus 1 from the minutes or hours

case btnDOWN:

{

delay(300);

if(cursor_pos == set_mins){

mins--;

if(mins 《 0){

mins = 60;

}

}

else if(cursor_pos == set_hrs){

hrs--;

if(hrs 《 0){

hrs = 24;

}

}

break;

}

// if select button is pressed, start the timer

case btnSELECT:

{

startTimer = true;

setTimer = false;

mins = mins - 1;

delay(300);

break;

}

case btnNONE:

{

break;

}

}

}

void counter() {

unsigned long currentMillis = millis(); // grab current time

// check if “interval” time has passed (1000 milliseconds)

if ((unsigned long)(currentMillis - previousMillis) 》= interval) {

lcd.clear();

if(get_time == true){

secs--;

get_time = false;

}

previousMillis = millis();

}

}

创建厨房计时器只是一个开始!

您已经创建了自己的厨房计时器!该项目的最佳部分是能够调整该模块以构建其他项目,这些项目需要LCD和按钮或蜂鸣器之间的简单接口。您还可以为模块设计自定义3D打印的外壳,并使其成为您自己的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计时器
    +关注

    关注

    1

    文章

    417

    浏览量

    32624
  • Arduino
    +关注

    关注

    187

    文章

    6461

    浏览量

    186570
收藏 人收藏

    评论

    相关推荐

    单个 MSP430™ 计时器模块的多时基应用说明

    电子发烧友网站提供《单个 MSP430™ 计时器模块的多时基应用说明.pdf》资料免费下载
    发表于 09-13 11:09 0次下载
    单个 MSP430™ <b class='flag-5'>计时器</b>模块的多时基应用说明

    MSPM0-高级控制计时器有助于实现更好的控制和更好的数字输出

    电子发烧友网站提供《MSPM0-高级控制计时器有助于实现更好的控制和更好的数字输出.pdf》资料免费下载
    发表于 08-28 11:30 0次下载
    MSPM0-高级<b class='flag-5'>控制</b><b class='flag-5'>计时器</b>有助于实现更好的<b class='flag-5'>控制</b>和更好的数字输出

    用于电源门控的TPL5110毫微功耗系统计时器数据表

    电子发烧友网站提供《用于电源门控的TPL5110毫微功耗系统计时器数据表.pdf》资料免费下载
    发表于 08-23 11:26 0次下载
    用于电源门控的TPL5110毫微功耗系统<b class='flag-5'>计时器</b>数据表

    用于电源门控应用的TPL5111毫微功耗系统计时器数据表

    电子发烧友网站提供《用于电源门控应用的TPL5111毫微功耗系统计时器数据表.pdf》资料免费下载
    发表于 08-23 11:25 0次下载
    用于电源门控应用的TPL5111毫微功耗系统<b class='flag-5'>计时器</b>数据表

    TLC555-Q1 LinCMOS™计时器数据表

    电子发烧友网站提供《TLC555-Q1 LinCMOS™计时器数据表.pdf》资料免费下载
    发表于 08-23 11:19 0次下载
    TLC555-Q1 LinCMOS™<b class='flag-5'>计时器</b>数据表

    TLC555 LinCMOS™技术计时器数据表

    电子发烧友网站提供《TLC555 LinCMOS™技术计时器数据表.pdf》资料免费下载
    发表于 08-20 11:15 0次下载
    TLC555 LinCMOS™技术<b class='flag-5'>计时器</b>数据表

    LMC555 CMOS计时器数据表

    电子发烧友网站提供《LMC555 CMOS计时器数据表.pdf》资料免费下载
    发表于 08-20 09:16 0次下载
    LMC555 CMOS<b class='flag-5'>计时器</b>数据表

    spi_flash期间的计时器中断导致崩溃怎么解决?

    这是我遇到的 SDK 中的小错误 (esp_iot_sdk_v0.9.5_b1): 我在 Timer1 上使用计时器中断: ets_frc_timer1_intr_attach
    发表于 07-12 11:54

    在esp8266中构建了HTTP服务,功处理HTTP请求后,软件计时器停止了,为什么?

    定时回调中创建的任务中的连接工作,都失败了。我在HTTP处理后设置了新的软件计时器,也失败了...... 在处理HTTP请求的任务中,
    发表于 07-10 06:15

    TLE986x如何定期重新启动计时器

    我在模式 0-13 位定时模式下运行 T3。 达到溢出时,计时器停止。 请问如何定期重新启动计时器
    发表于 07-03 07:13

    双路精密计时器选购指南:准确选择,高效工作

    在快节奏的现代生活中,准确的时间管理对于个人和团队的成功至关重要。双路精密计时器作为种高效的计时工具,受到了越来越多人的青睐。那么,如何选购款适合自己的双路精密
    的头像 发表于 06-26 16:06 315次阅读

    SNx5DPHY440SS CSI-2/DSI DPHY 重计时器数据表

    电子发烧友网站提供《SNx5DPHY440SS CSI-2/DSI DPHY 重计时器数据表.pdf》资料免费下载
    发表于 06-25 11:07 0次下载
    SNx5DPHY440SS CSI-2/DSI DPHY 重<b class='flag-5'>计时器</b>数据表

    带看门狗计时器的TPS382x电压监视数据表

    电子发烧友网站提供《带看门狗计时器的TPS382x电压监视数据表.pdf》资料免费下载
    发表于 03-25 09:52 0次下载
    带看门狗<b class='flag-5'>计时器</b>的TPS382x电压监视<b class='flag-5'>器</b>数据表

    具有使能功能的 TPS3431 标准可编程监视计时器数据表

    电子发烧友网站提供《具有使能功能的 TPS3431 标准可编程监视计时器数据表.pdf》资料免费下载
    发表于 03-13 14:31 0次下载
    具有使能功能的 TPS3431 标准可编程监视<b class='flag-5'>器</b><b class='flag-5'>计时器</b>数据表

    ModusToolbox™生成时如何调用systick计时器ISR?

    我无法理解当项目由 ModusToolbox™生成时如何调用 systick 计时器 ISR。 通常,当您设置系统计时器并启用其中断时,系统会直接从中断向量调用 Systick_Handler。 我
    发表于 01-18 09:16