制作一個(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)輸入和輸出功能。
定時(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í)器所需的組件
Arduino
LCD1602鍵盤模塊
蜂鳴器
定時(shí)器的線路圖
首先,將液晶鍵盤模塊直接插到在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)用。
-
Arduino
+關(guān)注
關(guān)注
187文章
6455瀏覽量
186346
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論