#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
LiquidCrystal_I2 lcd(0x27, 20, 4);
#define PIN_RECEIVER 2 // Signal Pin of IR receiver
IRrecv receiver(PIN_RECEIVER);
int state=0,buzzer=8;
int a[8]={0};
int j=0, terminal=0;
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("aaaa");
pinMode(buzzer, OUTPUT);
receiver.enableIRIn(); // Start the receiver
Serial.begin(9600);
}
void loop()
{
// Checks received an IR signal
if (receiver.decode())
{
if (terminal) //重新开始
{
terminal = 0;
//清屏
for(int i=j; i>=0; i--)
{
lcd.setCursor(i,1);
lcd.print(" ");
}
j=0;
}
a[j] = receiver.decodedIRData.command;//解码值
Serial.println(a[j]);
lcd.setCursor(j,1);
if (a[j] == 82) //9--play
{
terminal=1; //终止操作
//清屏
for(int i=j; i>=0; i--)
{
lcd.setCursor(i,1);
lcd.print(" ");
}
//显示所有字符和发声
for(int i=0; i<j; i++)
{
lcd.setCursor(i,1);
voice(a[i]);
}
}
else
{
voice(a[j]); //显示字符和发声
}
if (!terminal)
{
j++;
if (j >= 8)
{
terminal=1; //终止操作
//清屏
for(int i=8; i>=0; i--)
{
lcd.setCursor(i,1);
lcd.print(" ");
}
//显示所有字符和发声
for(int i=0; i<8; i++)
{
lcd.setCursor(i,1);
voice(a[i]);
}
}
}
receiver.resume(); // Receive the next value
}
}
void mytone(int tonePin,int frequency, int duration)
{
pinMode(tonePin,OUTPUT);
int period = 1000000 / frequency;
int pulse = period / 2;
for (long i = 0; i < duration; i += 10)
{
digitalWrite(tonePin, HIGH);
delayMicroseconds(pulse);
digitalWrite(tonePin, LOW);
delayMicroseconds(pulse);
}
}
int voice(int toneVioce)
{
switch(toneVioce)
{
case 162: //power key
mytone(buzzer,596,200);
noTone(buzzer);
lcd.print("&");
break;
case 48:
mytone(buzzer,262,200);
noTone(buzzer);
lcd.print("1");
break;
case 24:
mytone(buzzer,294,200);
noTone(buzzer);
lcd.print("2");
break;
case 122:
mytone(buzzer,330,200);
noTone(buzzer);
lcd.print("3");
break;
case 16:
mytone(buzzer,349,200);
noTone(buzzer);
lcd.print("4");
break;
case 56:
mytone(buzzer,392,200);
noTone(buzzer);
lcd.print("5");
break;
case 90:
mytone(buzzer,440,200);
noTone(buzzer);
lcd.print("6");
break;
case 66:
mytone(buzzer,494,200);
noTone(buzzer);
lcd.print("7");
break;
default:
break;
}
}