本人最近在學習arduino,利用空閑時間制作一些小程式來自娛自樂,也和大家一起交流分享
本次arduino遙控器控制全彩燈珠主要是用到兩個名為Timer庫和IRremote庫,你可以在https://download.csdn.net/download/m0_37738838/10645108下載下傳到這兩個庫檔案及下面提到的源碼案例。
#include "Timer.h" //計時器頭檔案
Timer t; //計時器對象
int PIN_RECV = ; //紅外接收
int buzzer_pin=; //蜂鳴器的pin
boolean buzzer_state=true; //蜂鳴器狀态
boolean hours_state=false; //小時設定
boolean minutes_state=false; //分鐘設定
#include <IRremote.h> //紅外頭檔案
IRrecv irrecv(PIN_RECV); //pin設定為接收
decode_results results; //解碼結果
long hours=; //預設0小時
long minutes=; //預設十分鐘
long Ttime; //定時總時間
int a=; //count方法傳入個數
void setup()
{
Serial.begin();
irrecv.enableIRIn(); //開啟紅外
pinMode(buzzer_pin,OUTPUT); //設定蜂鳴器的pin為輸出模式
}
void loop()
{
t.update(); //必須在loop中調用,它會服務于計時器相關的事件
if (irrecv.decode(&results)) {
Serial.print(results.value,HEX);
switch(results.value)
{
//2
case :
setTime();//進入鬧鐘模式
break;
}
irrecv.resume();
}
}
void callbackfun(){
boolean state = true;
while(state){
for(int i=;i<;i++)//輸出一個頻率的聲音
{
digitalWrite(buzzer_pin,HIGH);//發聲音
delay();//延時1ms
digitalWrite(buzzer_pin,LOW);
delay();
}
for(int i=;i<;i++)//輸出另一個頻率的聲音,這裡的100與前面的80一樣,用來控制頻率,可以自己調節
{
digitalWrite(buzzer_pin,HIGH);
delay();
digitalWrite(buzzer_pin,LOW);
delay();
}
if (irrecv.decode(&results)) {
if(results.value==) {
state=false;
}
}
}
}
void setTime(){ //unsigned long 0-4,294,967,295
boolean settime_state = true; //定時狀态
while(settime_state){
if (irrecv.decode(&results)) {
switch(results.value){
//*
case :Hours();break;
//#
case :Minutes();break;
//OK
case :StarClock();settime_state = false;break;
}
irrecv.resume();
}
}
}
void Hours(){ //小時
Serial.println();
boolean hours_state = true;
while(hours_state){
if (irrecv.decode(&results)) {
switch(results.value){
//1
case :hours=;break;
//2
case :hours=;break;
//3
case :hours=;break;
//4
case :hours=;break;
//5
case :hours=;break;
//6
case :hours=;break;
//7
case :hours=;break;
//8
case :hours=;break;
//9
case :hours=;break;
//0
case :hours=;break;
//OK
case :hours_state = false;break;
}
irrecv.resume();
}
}
Serial.println();
}
void Minutes(){ //分鐘
boolean minutes_state = true;
while(minutes_state){
if (irrecv.decode(&results)) {
switch(results.value){
//1
case :count();break;
//2
case :count();break;
//3
case :count();break;
//4
case :count();break;
//5
case :count();break;
//6
case :count();break;
//7
case :count();break;
//8
case :count();break;
//9
case :count();break;
//0
case :count();break;
//OK
case :minutes_state = false;a=;break;
}
irrecv.resume();
}
}
}
void StarClock(){ //開始定時
Ttime = hours+minutes;
t.after(Ttime,callbackfun); //1000mm=1s 60000=1min;
Serial.println(Ttime);
Serial.println();
}
void count(int num){
Serial.println(num);
if(a==){minutes = * num;a++;}
else if(a==){int shi =minutes* ;int ge = *num; minutes = shi + ge;a++;}
Serial.println(minutes);
}
我的紅外接收引腳是D2,蜂鳴器信号引腳是D8。要準備好一個紅外接收子產品,一個紅外遙控器,一個蜂鳴器以及一張arduino闆。
使用定時鬧鐘時,先按下遙控器2,進入鬧鐘設定功能,按下*鍵則設定時鐘時間,将我們要設定的時間0~9遙控輸入,按下OK鍵表示确定,接下來設定分鐘時間,按下#鍵後将我們要設定的時間0~9遙控輸入,按下OK鍵表示确定,最後确認按下OK,這樣arduino開始執行我們的定時鬧鐘的程式啦
當然因為我們的遙控器版本不一樣,是以大家首先先将自己的遙控器編碼輸出來,修改一下紅外接收部分的代碼便可用啦,如果我們想在更好玩一點,可以在蜂鳴器上花點心思,通過音樂的節拍來設計蜂鳴器的聲響,這樣就更有意思了