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

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

3天内不再提示

制作一个基于Arduino控制的定时器

科技观察员 来源:八色木 作者:八色木 2022-04-12 16:04 次阅读

制作一个由Arduino控制的定时器,并学习Arduino和LCD1602液晶显示器以及键盘模块的连接。

在这篇文章中,我们将学习如何创建一个由用户控制的定时器。这个项目将帮助你管理时间,实现及时提醒。你可以方便地设定一个时间限制,然后离开,直到你听到定时器发出“哔哔”声后及时安排下一项工作。在这个项目中我们将使用一个Arduino液晶键盘模块,你将从连接小蜂鸣器开始,直到让设备启动起来,并通过按钮接口和LCD接口实现输入和输出功能。

pYYBAGJVMl-AWDXDAAL481dF0xM081.png

定时器主要功能概述

在启动电源之后,定时器将显示一个“Arduino-Timer”的信息,并持续3秒。

计时器将提示设置时间。你可以通过按下左右键来将光标移动到要修改的位置,如分钟和小时。

通过上下箭头键调整分钟和小时的设置。

一旦设置了所需的时间,按下“SELECT”按钮,计时器就会启动。

如果想重新设置时间,请再次按下“SELECT”按钮。

到达设定的时间后,蜂鸣器就会发出哔哔声。

需要关闭蜂鸣器声音,在听到哔哔声后按下键盘上的“RST”键。

定时器所需的组件

poYBAGJVMmSAWTFYAAYiYBAQkK4517.png

Arduino

LCD1602键盘模块

蜂鸣器

定时器的线路图

poYBAGJVMmqADZxHAAGgiZZ6vTs070.png

首先,将液晶键盘模块直接插到在Arduino上。然后将蜂鸣器的正极连接到Arduino上的12号引脚上,并将蜂鸣的负极连接到GND上。

制作Arduino定时器的代码

adc_key_in = analogRead(0); // 从液晶键盘上读取按钮的值
// 检查按下的是哪个按钮
if (adc_key_in > 1000) return btnNONE; // 把它作为速度的第一个选项因为它是最有可能的结果
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; // 当所有读取都失败时,返回btnNONE
}

void setup()
{
Serial.begin(115200);
pinMode(buzzer_pin, OUTPUT);

lcd.begin(16, 2); // 启动与LCD键盘的通信
lcd.setCursor(0,0);
lcd.print("Arduino-");
lcd.setCursor(0, 1);
lcd.print(" Timer");
delay(3000);
}

void loop(){
// 根据按下的按钮检查哪个条件是正确的
if(startTimer == true){
start_timer();
}
else if (setTimer == true){
set_timer();
}
}

// 这个函数将计算时间
void start_timer(){
// 检查时间是否正常
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(); // 读取按钮值

switch (lcd_key) // 根据哪个按钮被按下来执行一个操作
{
// 如果按下select按钮,则返回设置时间
case btnSELECT:
{
startTimer = false;
setTimer = true;
delay(300);
lcd.clear();
break;
}
case btnNONE:
{
break;
}
}
}

// 这个函数将设置时间
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(); // 读取按钮值

switch (lcd_key) // 根据哪个按钮被按下来执行一个操作
{
// 如果按下RIGHT按钮,移动光标到分钟位置
case btnRIGHT:
{
cursor_pos = set_mins;
break;
}
// 如果按下left按钮,移动光标到小时位置
case btnLEFT:
{
cursor_pos = set_hrs;
break;
}
// 如果up被按下, 分钟或小时加1
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;
}
// 如果Down被按下, 分钟或小时减1
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;
}
// 如果按下SELECT按钮,启动定时器
case btnSELECT:
{
startTimer = true;
setTimer = false;
mins = mins - 1;
delay(300);
break;
}
case btnNONE:
{
break;
}
}
}

void counter() {
unsigned long currentMillis = millis(); // 获取当前时间

// 检查“interval”时间是否已超过(1000毫秒)
if ((unsigned long)(currentMillis - previousMillis) >= interval) {

lcd.clear();
if(get_time == true){
secs--;
get_time = false;
}
previousMillis = millis();
}
}

至此一款基于Arduino的定时器就制作完成了,余下的工作你可以根据喜好对它进行美化或者开发更有趣的应用。

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

    关注

    187

    文章

    6455

    浏览量

    186445
收藏 人收藏

    评论

    相关推荐

    简易定时器电路及制作

    简易定时器电路及制作
    发表于 04-14 11:38 737次下载
    简易<b class='flag-5'>定时器</b>电路及<b class='flag-5'>制作</b>

    高精度定时器电路及制作

    高精度定时器电路及制作
    发表于 04-14 11:39 14次下载
    高精度<b class='flag-5'>定时器</b>电路及<b class='flag-5'>制作</b>

    可调定时器电路及制作

    可调定时器电路及制作
    发表于 04-14 11:44 10次下载
    可调<b class='flag-5'>定时器</b>电路及<b class='flag-5'>制作</b>

    多功能定时器电路制作

    为了根据人们预先设定的时间控制电路工作及对些电器进行电力调节,制作了这款实用多功能定时器
    的头像 发表于 07-20 15:32 2.1w次阅读
    多功能<b class='flag-5'>定时器</b>电路<b class='flag-5'>制作</b>

    Arduino开发板定时器定时中断的详细资料免费下载

    arduino定时器包含定时器/计数0,定时器/计数1,
    发表于 11-19 08:00 29次下载

    基于Arduino定时器控制器的继电器

    电子发烧友网站提供《基于Arduino定时器控制器的继电器.zip》资料免费下载
    发表于 07-11 15:20 3次下载
    基于<b class='flag-5'>Arduino</b><b class='flag-5'>定时器</b><b class='flag-5'>控制器</b>的继电器

    使用555定时器制作些乐器

    电子发烧友网站提供《使用555定时器制作些乐器.zip》资料免费下载
    发表于 11-16 09:56 1次下载
    使用555<b class='flag-5'>定时器</b>来<b class='flag-5'>制作</b><b class='flag-5'>一</b>些乐器

    基于Arduino Pro Mini 328的洗衣机定时器

    这是我的洗衣机的更换部件,它的洗涤定时器坏了。原来的定时器机械定时器/方向开关,它可以通过以下方式
    发表于 12-07 14:14 2次下载

    Arduino的内部定时器

    电子发烧友网站提供《Arduino的内部定时器.zip》资料免费下载
    发表于 02-09 11:03 0次下载
    <b class='flag-5'>Arduino</b>的内部<b class='flag-5'>定时器</b>

    如何制作简单的2步Arduino可编程定时器电路

    在本文中,我们将学习如何制作简单的 2 步 Arduino 可编程定时器电路,该电路可用于通过独立可调的 ON 和 OFF 时序来切换
    的头像 发表于 03-19 10:06 4376次阅读
    如何<b class='flag-5'>制作</b><b class='flag-5'>一</b><b class='flag-5'>个</b>简单的2步<b class='flag-5'>Arduino</b>可编程<b class='flag-5'>定时器</b>电路

    如何制作简单的2步Arduino可编程定时器电路

    在本文中,我们将学习如何制作简单的2 步 Arduino 可编程定时器电路,该电路可用于通过独立可调的 ON 和 OFF 时序来切换电气
    的头像 发表于 05-24 17:04 2133次阅读
    如何<b class='flag-5'>制作</b><b class='flag-5'>一</b><b class='flag-5'>个</b>简单的2步<b class='flag-5'>Arduino</b>可编程<b class='flag-5'>定时器</b>电路

    分享厨房定时器电路

    厨房计时是我们在厨房中使用的小工具,以帮助我们烹饪食物。我们使用的大多数厨房定时器都是机械定时器,容易磨损。然而,上述数字厨房定时器电路比机械定时
    发表于 06-18 11:05 1271次阅读
    分享<b class='flag-5'>一</b><b class='flag-5'>个</b>厨房<b class='flag-5'>定时器</b>电路

    Arduino洗手定时器

    电子发烧友网站提供《Arduino洗手定时器.zip》资料免费下载
    发表于 06-29 10:48 0次下载
    <b class='flag-5'>Arduino</b>洗手<b class='flag-5'>定时器</b>

    stm32定时器能同时控制灯以不同频率闪烁吗?

    STM32的定时器功能强大,**STM32的定时器可以同时控制灯以不同频率闪烁** 。
    的头像 发表于 12-13 10:43 1826次阅读

    如何实现软件定时器

    在Linux,uC/OS,FreeRTOS等操作系统中,都带有软件定时器,原理大同小异。典型的实现方法是:通过硬件定时器产生固定的时钟节拍,每次硬件
    的头像 发表于 04-29 11:00 545次阅读