arduino 紅外遙控器控制LED燈

/*
日期:2016.9.1
功能:紅外遙控器控制LED燈 開,關,閃爍,呼吸
元件:
    跳線公公頭 * 5
    led 220歐電阻
    紅外接收管,紅外遙控
接線:
    紅外燈面向本身從左到右分別接 IO3 ,GND ,5V
    LED 負極接GND 正極串聯電阻接 IO5
紅外遙控器鍵盤1-9編碼:
FF30CF    1
FF18E7    2
FF7A85    3
FF10EF    4
FF38C7    5
FF5AA5    6
FF42BD    7
FF4AB5    8
FF52AD    9
參考:http://www.arduino.cn/thread-3259-1-1.html
*/

#include <IRremote.h>

int ledPin = 5;
int recvPin = 3;//定義紅外接收器的引腳爲3
IRrecv irrecv(recvPin);
decode_results results;

long KEY_CODE_ONE = 0xFF30CF;
long KEY_CODE_TWO = 0xFF18E7;
long KEY_CODE_THREE = 0xFF7A85;
long KEY_CODE_FOUR = 0xFF10EF;
long KEY_CODE_LONG_PRESS = 0xFFFFFFFF;
long longPressKey = -1; //長按下的那個鍵

void setup() {
  pinMode(ledPin, OUTPUT);
  irrecv.enableIRIn(); // 初始化紅外接收器
  Serial.begin(9600);
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);//以16進制換行輸出接收代碼
    Serial.println();//爲了便於觀看輸出結果增長一個空行
    irrecv.resume(); // 接收下一個值
  }

  //按下1鍵的事件
  if (results.value == KEY_CODE_ONE ) {
    ledOn(ledPin);
    longPressKey = KEY_CODE_ONE;
  }
  //長按1鍵的事件
  if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_ONE) {
    ledOn(ledPin);
  }

  //按下2鍵的事件
  if (results.value == KEY_CODE_TWO ) {
    ledOff(ledPin);
    longPressKey = KEY_CODE_TWO;
  }
  //長按 2鍵的事件
  if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_TWO) {
    ledOff(ledPin);
  }
  //按下 3 鍵的事件
  if (results.value == KEY_CODE_THREE ) {
    flash(ledPin, 100, 100);
    longPressKey = KEY_CODE_THREE;
  }
  //長按 3 鍵的事件
  if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_THREE) {
    flash(ledPin, 100, 100);
  }
  //按下 4 鍵的事件
  if (results.value == KEY_CODE_FOUR ) {
    fadeOn(1000, 5);
    fadeOff(1000, 5);
    longPressKey = KEY_CODE_FOUR;
  }
  //長按 4 鍵的事件
  if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_FOUR) {
    fadeOn(1000, 5);
    fadeOff(1000, 5);
  }
}

// led亮燈
void ledOn(int ledPin) {
  digitalWrite(ledPin, HIGH);
}
// led熄燈
void ledOff(int ledPin) {
  digitalWrite(ledPin, LOW);
}
//led閃爍
void flash(int ledPin, long highDuration, long lowDuration) {
  digitalWrite(ledPin, HIGH);
  delay(highDuration);
  digitalWrite(ledPin, LOW);
  delay(lowDuration);
}
//呼吸燈On
void fadeOn(unsigned int time, int increament) {
  for (byte value = 0 ; value < 255; value += increament) {
    Serial.println(value);
    analogWrite(ledPin, value);
    delay(time / (255 / 5));
  }
}
//呼吸燈Off
void fadeOff(unsigned int time, int decreament) {
  for (byte value = 255; value > 0; value -= decreament) {
    Serial.println(value);
    analogWrite(ledPin, value);
    delay(time / (255 / 5));
  }
}
相關文章
相關標籤/搜索