廚房定時(shí)器用戶界面流程
打開電源后,設(shè)備將顯示“Arduino Kitchen Timer”消息3秒鐘。
然后計(jì)時(shí)器將提示您設(shè)置時(shí)間。您可以通過(guò)按左右鍵將光標(biāo)移動(dòng)到分鐘和小時(shí)。
您可以使用向上和向下箭頭鍵調(diào)整分鐘和小時(shí)設(shè)置。
設(shè)置了所需的時(shí)間后,按下選擇按鈕,計(jì)時(shí)器將啟動(dòng)。
如果您想再次設(shè)置時(shí)間,請(qǐng)?jiān)俅伟聪逻x擇按鈕。
一旦時(shí)間結(jié)束,蜂鳴器將發(fā)出蜂鳴聲。
要停止蜂鳴器,請(qǐng)按鍵盤護(hù)罩上的重置按鈕。
廚房定時(shí)器所需的組件
Arduino
LCD鍵盤護(hù)盾
蜂鳴器
廚房定時(shí)器的電路圖
首先,對(duì)齊并放置L CD Keypad直接屏蔽Arduino。然后將蜂鳴器的正極連接到Arduino上的引腳12,將蜂鳴器的負(fù)極連接到地面。
Arduino廚房定時(shí)器項(xiàng)目代碼
將以下代碼復(fù)制并上傳到Arduino IDE中。代碼的每個(gè)部分都有一個(gè)附帶的解釋,以幫助您了解它的功能。
#include
// select the pins used for the LCD keypad
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// define some variables
int lcd_key = 0;
int adc_key_in = 0;
int hrs = 0;
int mins = 0;
int set_mins = 0;
int set_hrs = 1;
int secs = 60;
int cursor_pos = 1;
int buzzer_pin = 12;
bool startTimer = false;
bool setTimer = true;
bool get_time = false;
unsigned long interval=1000; // the time we need to wait
unsigned long previousMillis=0; // millis() returns an unsigned long.
// Defining button used by the lcd keypad
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // reading the button value from the lcd keypad
// checking which button is pressed
if (adc_key_in 》 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
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; // when all others fail, return this.。.
}
void setup()
{
Serial.begin(115200);
pinMode(buzzer_pin, OUTPUT);
lcd.begin(16, 2); // start communication with LCD keypad shield
lcd.setCursor(0,0);
lcd.print(“Arduino Kitchen”);
lcd.setCursor(0, 1);
lcd.print(“ Timer”);
delay(3000);
}
void loop(){
// Checking which condition is true based on the button pressed
if(startTimer == true){
start_timer();
}
else if (setTimer == true){
set_timer();
}
}
// This function will count the time and will beep the buzzer when the time will be up.
void start_timer(){
// Checking whether time is up or not
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(); // read the buttons
switch (lcd_key) // depending on which button was pushed, we perform an action
{
// if select button is pressed, move back to set time
case btnSELECT:
{
startTimer = false;
setTimer = true;
delay(300);
lcd.clear();
break;
}
case btnNONE:
{
break;
}
}
}
// This function will set the time
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(); // read the buttons
switch (lcd_key) // depending on which button was pushed, we perform an action
{
// if right button is pressed, then move the cursor to minutes
case btnRIGHT:
{
cursor_pos = set_mins;
break;
}
// if left button is pressed, then move the cursor to hours
case btnLEFT:
{
cursor_pos = set_hrs;
break;
}
// if up button is pressed, add 1 to the minutes or hours
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;
}
// if down button is pressed, minus 1 from the minutes or hours
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;
}
// if select button is pressed, start the timer
case btnSELECT:
{
startTimer = true;
setTimer = false;
mins = mins - 1;
delay(300);
break;
}
case btnNONE:
{
break;
}
}
}
void counter() {
unsigned long currentMillis = millis(); // grab current time
// check if “interval” time has passed (1000 milliseconds)
if ((unsigned long)(currentMillis - previousMillis) 》= interval) {
lcd.clear();
if(get_time == true){
secs--;
get_time = false;
}
previousMillis = millis();
}
}
創(chuàng)建廚房計(jì)時(shí)器只是一個(gè)開始!
您已經(jīng)創(chuàng)建了自己的廚房計(jì)時(shí)器!該項(xiàng)目的最佳部分是能夠調(diào)整該模塊以構(gòu)建其他項(xiàng)目,這些項(xiàng)目需要LCD和按鈕或蜂鳴器之間的簡(jiǎn)單接口。您還可以為模塊設(shè)計(jì)自定義3D打印的外殼,并使其成為您自己的。
-
計(jì)時(shí)器
+關(guān)注
關(guān)注
1文章
426瀏覽量
32912 -
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
188113
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
EE-109:ADSP2106x:使用2106x SPORT作為計(jì)時(shí)器
![EE-109:ADSP2106x:使用2106x SPORT作為<b class='flag-5'>計(jì)時(shí)器</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單個(gè) MSP430? 計(jì)時(shí)器模塊的多時(shí)基應(yīng)用說(shuō)明
![單個(gè) MSP430? <b class='flag-5'>計(jì)時(shí)器</b>模塊的多時(shí)基應(yīng)用說(shuō)明](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
MSPM0-高級(jí)控制計(jì)時(shí)器有助于實(shí)現(xiàn)更好的控制和更好的數(shù)字輸出
![MSPM0-高級(jí)<b class='flag-5'>控制</b><b class='flag-5'>計(jì)時(shí)器</b>有助于實(shí)現(xiàn)更好的<b class='flag-5'>控制</b>和更好的數(shù)字輸出](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
用于電源門控的TPL5110毫微功耗系統(tǒng)計(jì)時(shí)器數(shù)據(jù)表
![用于電源門控的TPL5110毫微功耗系統(tǒng)<b class='flag-5'>計(jì)時(shí)器</b>數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
用于電源門控應(yīng)用的TPL5111毫微功耗系統(tǒng)計(jì)時(shí)器數(shù)據(jù)表
![用于電源門控應(yīng)用的TPL5111毫微功耗系統(tǒng)<b class='flag-5'>計(jì)時(shí)器</b>數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
TLC555-Q1 LinCMOS?計(jì)時(shí)器數(shù)據(jù)表
![TLC555-Q1 LinCMOS?<b class='flag-5'>計(jì)時(shí)器</b>數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
TLC555 LinCMOS?技術(shù)計(jì)時(shí)器數(shù)據(jù)表
![TLC555 LinCMOS?技術(shù)<b class='flag-5'>計(jì)時(shí)器</b>數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
LMC555 CMOS計(jì)時(shí)器數(shù)據(jù)表
![LMC555 CMOS<b class='flag-5'>計(jì)時(shí)器</b>數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
spi_flash期間的計(jì)時(shí)器中斷導(dǎo)致崩潰怎么解決?
在esp8266中構(gòu)建了一個(gè)HTTP服務(wù)器,功處理HTTP請(qǐng)求后,軟件計(jì)時(shí)器停止了,為什么?
TLE986x如何定期重新啟動(dòng)計(jì)時(shí)器?
雙路精密計(jì)時(shí)器選購(gòu)指南:準(zhǔn)確選擇,高效工作
SNx5DPHY440SS CSI-2/DSI DPHY 重計(jì)時(shí)器數(shù)據(jù)表
![SNx5DPHY440SS CSI-2/DSI DPHY 重<b class='flag-5'>計(jì)時(shí)器</b>數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
帶看門狗計(jì)時(shí)器的TPS382x電壓監(jiān)視器數(shù)據(jù)表
![帶看門狗<b class='flag-5'>計(jì)時(shí)器</b>的TPS382x電壓監(jiān)視<b class='flag-5'>器</b>數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
具有使能功能的 TPS3431 標(biāo)準(zhǔn)可編程監(jiān)視器計(jì)時(shí)器數(shù)據(jù)表
![具有使能功能的 TPS3431 標(biāo)準(zhǔn)可編程監(jiān)視<b class='flag-5'>器</b><b class='flag-5'>計(jì)時(shí)器</b>數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論