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

描述

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

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

Arduino

  定时器主要功能概述

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

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

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

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

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

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

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

  定时器所需的组件

Arduino

  Arduino

  LCD1602键盘模块

  蜂鸣器

  定时器的线路图

Arduino

  首先,将液晶键盘模块直接插到在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的定时器就制作完成了,余下的工作你可以根据喜好对它进行美化或者开发更有趣的应用。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分