0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

制作一個(gè)基于Arduino控制的定時(shí)器

科技觀察員 ? 來源:八色木 ? 作者:八色木 ? 2022-04-12 16:04 ? 次閱讀

制作一個(gè)由Arduino控制的定時(shí)器,并學(xué)習(xí)Arduino和LCD1602液晶顯示器以及鍵盤模塊的連接。

在這篇文章中,我們將學(xué)習(xí)如何創(chuàng)建一個(gè)由用戶控制的定時(shí)器。這個(gè)項(xiàng)目將幫助你管理時(shí)間,實(shí)現(xiàn)及時(shí)提醒。你可以方便地設(shè)定一個(gè)時(shí)間限制,然后離開,直到你聽到定時(shí)器發(fā)出“嗶嗶”聲后及時(shí)安排下一項(xiàng)工作。在這個(gè)項(xiàng)目中我們將使用一個(gè)Arduino液晶鍵盤模塊,你將從連接小蜂鳴器開始,直到讓設(shè)備啟動(dòng)起來,并通過按鈕接口和LCD接口實(shí)現(xiàn)輸入和輸出功能。

pYYBAGJVMl-AWDXDAAL481dF0xM081.png

定時(shí)器主要功能概述

在啟動(dòng)電源之后,定時(shí)器將顯示一個(gè)“Arduino-Timer”的信息,并持續(xù)3秒。

計(jì)時(shí)器將提示設(shè)置時(shí)間。你可以通過按下左右鍵來將光標(biāo)移動(dòng)到要修改的位置,如分鐘和小時(shí)。

通過上下箭頭鍵調(diào)整分鐘和小時(shí)的設(shè)置。

一旦設(shè)置了所需的時(shí)間,按下“SELECT”按鈕,計(jì)時(shí)器就會(huì)啟動(dòng)。

如果想重新設(shè)置時(shí)間,請(qǐng)?jiān)俅伟聪隆癝ELECT”按鈕。

到達(dá)設(shè)定的時(shí)間后,蜂鳴器就會(huì)發(fā)出嗶嗶聲。

需要關(guān)閉蜂鳴器聲音,在聽到嗶嗶聲后按下鍵盤上的“RST”鍵。

定時(shí)器所需的組件

poYBAGJVMmSAWTFYAAYiYBAQkK4517.png

Arduino

LCD1602鍵盤模塊

蜂鳴器

定時(shí)器的線路圖

poYBAGJVMmqADZxHAAGgiZZ6vTs070.png

首先,將液晶鍵盤模塊直接插到在Arduino上。然后將蜂鳴器的正極連接到Arduino上的12號(hào)引腳上,并將蜂鳴的負(fù)極連接到GND上。

制作Arduino定時(shí)器的代碼

adc_key_in = analogRead(0); // 從液晶鍵盤上讀取按鈕的值
// 檢查按下的是哪個(gè)按鈕
if (adc_key_in > 1000) return btnNONE; // 把它作為速度的第一個(gè)選項(xiàng)因?yàn)樗亲钣锌赡艿慕Y(jié)果
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; // 當(dāng)所有讀取都失敗時(shí),返回btnNONE
}

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

lcd.begin(16, 2); // 啟動(dòng)與LCD鍵盤的通信
lcd.setCursor(0,0);
lcd.print("Arduino-");
lcd.setCursor(0, 1);
lcd.print(" Timer");
delay(3000);
}

void loop(){
// 根據(jù)按下的按鈕檢查哪個(gè)條件是正確的
if(startTimer == true){
start_timer();
}
else if (setTimer == true){
set_timer();
}
}

// 這個(gè)函數(shù)將計(jì)算時(shí)間
void start_timer(){
// 檢查時(shí)間是否正常
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) // 根據(jù)哪個(gè)按鈕被按下來執(zhí)行一個(gè)操作
{
// 如果按下select按鈕,則返回設(shè)置時(shí)間
case btnSELECT:
{
startTimer = false;
setTimer = true;
delay(300);
lcd.clear();
break;
}
case btnNONE:
{
break;
}
}
}

// 這個(gè)函數(shù)將設(shè)置時(shí)間
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) // 根據(jù)哪個(gè)按鈕被按下來執(zhí)行一個(gè)操作
{
// 如果按下RIGHT按鈕,移動(dòng)光標(biāo)到分鐘位置
case btnRIGHT:
{
cursor_pos = set_mins;
break;
}
// 如果按下left按鈕,移動(dòng)光標(biāo)到小時(shí)位置
case btnLEFT:
{
cursor_pos = set_hrs;
break;
}
// 如果up被按下, 分鐘或小時(shí)加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被按下, 分鐘或小時(shí)減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按鈕,啟動(dòng)定時(shí)器
case btnSELECT:
{
startTimer = true;
setTimer = false;
mins = mins - 1;
delay(300);
break;
}
case btnNONE:
{
break;
}
}
}

void counter() {
unsigned long currentMillis = millis(); // 獲取當(dāng)前時(shí)間

// 檢查“interval”時(shí)間是否已超過(1000毫秒)
if ((unsigned long)(currentMillis - previousMillis) >= interval) {

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

至此一款基于Arduino的定時(shí)器就制作完成了,余下的工作你可以根據(jù)喜好對(duì)它進(jìn)行美化或者開發(fā)更有趣的應(yīng)用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6455

    瀏覽量

    186346
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    簡(jiǎn)易定時(shí)器電路及制作

    簡(jiǎn)易定時(shí)器電路及制作
    發(fā)表于 04-14 11:38 ?737次下載
    簡(jiǎn)易<b class='flag-5'>定時(shí)器</b>電路及<b class='flag-5'>制作</b>

    高精度定時(shí)器電路及制作

    高精度定時(shí)器電路及制作
    發(fā)表于 04-14 11:39 ?14次下載
    高精度<b class='flag-5'>定時(shí)器</b>電路及<b class='flag-5'>制作</b>

    可調(diào)定時(shí)器電路及制作

    可調(diào)定時(shí)器電路及制作
    發(fā)表于 04-14 11:44 ?10次下載
    可調(diào)<b class='flag-5'>定時(shí)器</b>電路及<b class='flag-5'>制作</b>

    多功能定時(shí)器電路制作

    為了根據(jù)人們預(yù)先設(shè)定的時(shí)間控制電路工作及對(duì)些電器進(jìn)行電力調(diào)節(jié),制作了這款實(shí)用多功能定時(shí)器。
    的頭像 發(fā)表于 07-20 15:32 ?2.1w次閱讀
    多功能<b class='flag-5'>定時(shí)器</b>電路<b class='flag-5'>制作</b>

    Arduino開發(fā)板定時(shí)器定時(shí)中斷的詳細(xì)資料免費(fèi)下載

    arduino定時(shí)器包含定時(shí)器/計(jì)數(shù)0,定時(shí)器/計(jì)數(shù)1,
    發(fā)表于 11-19 08:00 ?29次下載

    基于Arduino定時(shí)器控制器的繼電器

    電子發(fā)燒友網(wǎng)站提供《基于Arduino定時(shí)器控制器的繼電器.zip》資料免費(fèi)下載
    發(fā)表于 07-11 15:20 ?3次下載
    基于<b class='flag-5'>Arduino</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>控制器</b>的繼電器

    使用555定時(shí)器制作些樂器

    電子發(fā)燒友網(wǎng)站提供《使用555定時(shí)器制作些樂器.zip》資料免費(fèi)下載
    發(fā)表于 11-16 09:56 ?1次下載
    使用555<b class='flag-5'>定時(shí)器</b>來<b class='flag-5'>制作</b><b class='flag-5'>一</b>些樂器

    基于Arduino Pro Mini 328的洗衣機(jī)定時(shí)器

    這是我的洗衣機(jī)的更換部件,它的洗滌定時(shí)器壞了。原來的定時(shí)器個(gè)機(jī)械定時(shí)器/方向開關(guān),它可以通過以下方式
    發(fā)表于 12-07 14:14 ?2次下載

    Arduino的內(nèi)部定時(shí)器

    電子發(fā)燒友網(wǎng)站提供《Arduino的內(nèi)部定時(shí)器.zip》資料免費(fèi)下載
    發(fā)表于 02-09 11:03 ?0次下載
    <b class='flag-5'>Arduino</b>的內(nèi)部<b class='flag-5'>定時(shí)器</b>

    如何制作個(gè)簡(jiǎn)單的2步Arduino可編程定時(shí)器電路

    在本文中,我們將學(xué)習(xí)如何制作個(gè)簡(jiǎn)單的 2 步 Arduino 可編程定時(shí)器電路,該電路可用于通過獨(dú)立可調(diào)的 ON 和 OFF 時(shí)序來切換
    的頭像 發(fā)表于 03-19 10:06 ?4338次閱讀
    如何<b class='flag-5'>制作</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>簡(jiǎn)單的2步<b class='flag-5'>Arduino</b>可編程<b class='flag-5'>定時(shí)器</b>電路

    如何制作個(gè)簡(jiǎn)單的2步Arduino可編程定時(shí)器電路

    在本文中,我們將學(xué)習(xí)如何制作個(gè)簡(jiǎn)單的2 步 Arduino 可編程定時(shí)器電路,該電路可用于通過獨(dú)立可調(diào)的 ON 和 OFF 時(shí)序來切換電氣
    的頭像 發(fā)表于 05-24 17:04 ?2084次閱讀
    如何<b class='flag-5'>制作</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>簡(jiǎn)單的2步<b class='flag-5'>Arduino</b>可編程<b class='flag-5'>定時(shí)器</b>電路

    分享個(gè)廚房定時(shí)器電路

    廚房計(jì)時(shí)是我們?cè)趶N房中使用的小工具,以幫助我們烹飪食物。我們使用的大多數(shù)廚房定時(shí)器都是機(jī)械定時(shí)器,容易磨損。然而,上述數(shù)字廚房定時(shí)器電路比機(jī)械定時(shí)
    發(fā)表于 06-18 11:05 ?1210次閱讀
    分享<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>廚房<b class='flag-5'>定時(shí)器</b>電路

    Arduino洗手定時(shí)器

    電子發(fā)燒友網(wǎng)站提供《Arduino洗手定時(shí)器.zip》資料免費(fèi)下載
    發(fā)表于 06-29 10:48 ?0次下載
    <b class='flag-5'>Arduino</b>洗手<b class='flag-5'>定時(shí)器</b>

    stm32個(gè)定時(shí)器能同時(shí)控制個(gè)燈以不同頻率閃爍嗎?

    STM32的定時(shí)器功能強(qiáng)大,**STM32的定時(shí)器可以同時(shí)控制個(gè)燈以不同頻率閃爍** 。
    的頭像 發(fā)表于 12-13 10:43 ?1701次閱讀

    如何實(shí)現(xiàn)個(gè)軟件定時(shí)器?

    在Linux,uC/OS,F(xiàn)reeRTOS等操作系統(tǒng)中,都帶有軟件定時(shí)器,原理大同小異。典型的實(shí)現(xiàn)方法是:通過個(gè)硬件定時(shí)器產(chǎn)生固定的時(shí)鐘節(jié)拍,每次硬件
    的頭像 發(fā)表于 04-29 11:00 ?525次閱讀