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
    +关注

    关注

    184

    文章

    6428

    浏览量

    184848
收藏 人收藏

    评论

    相关推荐

    语音控制模块怎么和定时器相连,最后通过arduino板子控制步进电机驱动。

    首先,要通过语音模块控制定时器定时定时器时间到了之后给arduino信号,
    发表于 06-13 13:40

    智能定时器DIY制作

    定时器,能够精确控制曝光时间,保证曝光效果的良好。当然了定时器还能兼容其他的需要定时的设备
    发表于 11-21 23:21

    DIY制作智能定时器

    一个倒计时的定时器,能够精确控制曝光时间,保证曝光效果的良好。当然了定时器还能兼容其他的需
    发表于 11-21 23:25

    如何去制作基于Stm32CubeMx的定时器

    为什么叫基本定时器呢?如何去制作基于Stm32CubeMx的定时器呢?
    发表于 11-23 06:08

    使用arduino pro micro制作游戏控制器

    pro micro制作游戏控制器所以这里的建议是:请不要用
    发表于 09-01 06:38

    简易定时器电路及制作

    简易定时器电路及制作
    发表于 04-14 11:38 736次下载
    简易<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>

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

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

    使用Arduino和X9C104控制555定时器

    电子发烧友网站提供《使用Arduino和X9C104控制555定时器.zip》资料免费下载
    发表于 02-09 10:25 0次下载
    使用<b class='flag-5'>Arduino</b>和X9C104<b class='flag-5'>控制</b>555<b class='flag-5'>定时器</b>

    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 3714次阅读
    如何<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 1433次阅读
    如何<b class='flag-5'>制作</b>一个简单的2步<b class='flag-5'>Arduino</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>

    定时器原理能控制马达吗为什么

    定时器原理可以用于控制马达。马达是一种将电能转换为机械能的设备,通常由电动机和传动装置组成。定时器是一种电子设备,用来生成和计时精确而稳定的时间信号。通过将定时器与马达
    的头像 发表于 01-23 15:21 266次阅读