制作一个由Arduino控制的定时器,并学习Arduino和LCD1602液晶显示器以及键盘模块的连接。
在这篇文章中,我们将学习如何创建一个由用户控制的定时器。这个项目将帮助你管理时间,实现及时提醒。你可以方便地设定一个时间限制,然后离开,直到你听到定时器发出“哔哔”声后及时安排下一项工作。在这个项目中我们将使用一个Arduino液晶键盘模块,你将从连接小蜂鸣器开始,直到让设备启动起来,并通过按钮接口和LCD接口实现输入和输出功能。
定时器主要功能概述
在启动电源之后,定时器将显示一个“Arduino-Timer”的信息,并持续3秒。
计时器将提示设置时间。你可以通过按下左右键来将光标移动到要修改的位置,如分钟和小时。
通过上下箭头键调整分钟和小时的设置。
一旦设置了所需的时间,按下“SELECT”按钮,计时器就会启动。
如果想重新设置时间,请再次按下“SELECT”按钮。
到达设定的时间后,蜂鸣器就会发出哔哔声。
需要关闭蜂鸣器声音,在听到哔哔声后按下键盘上的“RST”键。
定时器所需的组件
Arduino
LCD1602键盘模块
蜂鸣器
定时器的线路图
首先,将液晶键盘模块直接插到在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的定时器就制作完成了,余下的工作你可以根据喜好对它进行美化或者开发更有趣的应用。
全部0条评论
快来发表一下你的评论吧 !