谢谢楼主,学习了,因现有的苹果遥控器闲置,所以模仿了楼主的代码,用它遥控小表,兼职遥控个电视啥的。
主要硬件:arduino uno,一样的液晶屏和时间模块,红外收发头,蜂鸣器,sht10温湿度传感器。
- #define menu 0x77E1406A
- #define up 0x77E1D06A
- #define down 0x77E1B06A
- #define left 0x77E1106A
- #define right 0x77E1E06A
- #define center 0x77E1BA6A
- #define play 0x77E17A6A
- #include <IRremote.h>
- int RECV_PIN = 5;
- IRrecv irrecv(RECV_PIN);
- decode_results results;
- IRsend irsend;
- int Model;
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- #include <SHT1x.h>
- #include <DS1302.h>
- uint8_t CE_PIN = 12;
- uint8_t IO_PIN = 11;
- uint8_t SCLK_PIN = 10;
- DS1302 rtc(CE_PIN,IO_PIN,SCLK_PIN);
- char yearmonthday[20];
- char hourminutesecond[10];
- char day[10];
- byte one[8]={
- B11111,B11111,B00000,B11111,B11111,B00000,B11111,B11111};
- byte two[8]={
- B11111,B11111,B00000,B00000,B00000,B00000,B00000,B00000};
- byte three[8]={
- B00000,B00000,B00000,B00000,B00000,B00000,B11111,B11111};
- byte four[8]={
- B11111,B11111,B00000,B00000,B00000,B00000,B11111,B11111};
- byte five[8]={
- B11111,B11111,B00000,B00000,B00000,B00000,B00000,B11111};
- byte six[8]={
- B11111,B00000,B00000,B00000,B00000,B00000,B11111,B11111};
- byte seven[8]={
- B00000,B00000,B00000,B11111,B11111,B00000,B00000,B00000};
- byte zero[8]={
- B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000};
- // Specify data and clock connections and instantiate SHT1x object
- #define dataPin 8
- #define clockPin 9
- int BeepPin = 7; // 指定有源蜂鸣器输出端口
- int buttonPin = 6;
- SHT1x sht1x(dataPin, clockPin);
- LiquidCrystal_I2C lcd(0x27,16,2); //set the LCD address to 0x27 for a 16 chars and 2 line display
- int ledPin = 13;
- int menu_status = 0;
- int center_status= 0;
- void setup()
- {
- lcd.init();
- delay(2000);
- lcd.init();
- lcd.backlight();
- lcd.clear();
- lcd.createChar(1,one); //displayModel2
- lcd.createChar(2,two);
- lcd.createChar(3,three);
- lcd.createChar(4,four);
- lcd.createChar(5,five);
- lcd.createChar(6,six);
- lcd.createChar(7,seven);
- lcd.createChar(8,zero);
-
- Serial.begin(9600);
-
- pinMode(buttonPin, INPUT);
- pinMode(BeepPin, OUTPUT);
- beep_long(); //蛐蛐开叫,证明系统运行。
- delay(1000);
- beep_short();
-
- irrecv.enableIRIn(); // Start the receiver
- }
- void loop()
- {
- receiver();
- if(Model==1)
- {
- displayModel1();
- }
- else
- {
- displayModel2();
- }
- //*******************************************
- // delay(1000);
- }
- void timeandtempDisplay()
- {
- Time t=rtc.time();
- memset(day,0, sizeof(day));
- switch (t.day)
- {
- case 1:
- strcpy(day, "Sun");
- break;
- case 2:
- strcpy(day, "Mon");
- break;
- case 3:
- strcpy(day, "Tue");
- break;
- case 4:
- strcpy(day, "Wed");
- break;
- case 5:
- strcpy(day, "Thr");
- break;
- case 6:
- strcpy(day, "Fri");
- break;
- case 7:
- strcpy(day, "Sat");
- break;
- }
- snprintf(yearmonthday, sizeof(yearmonthday), "%04d/%02d/%02d",t.yr,t.mon,t.date);
- snprintf(hourminutesecond,sizeof(hourminutesecond),"%02d:%02d:%02d",t.hr, t.min, t.sec);
- lcd.setCursor(0,0);
- lcd.print(yearmonthday);
- lcd.setCursor(13,0);
- lcd.print(day);
- lcd.setCursor(0,1);
- tempDisplay();
- lcd.setCursor(8,1);
- lcd.print(hourminutesecond);
- }
- void tempDisplay()
- {
- float temp = sht1x.readTemperatureC();
- int temperature=temp;
- lcd.print(temperature);
- lcd.write(0xDF);
- // lcd.print("c");
- //**********************
- float hum = sht1x.readHumidity();
- int humidity=hum;
- lcd.print(humidity);
- }
- void beep_long(){ //蛐蛐叫声,表示错误。
- for(int j=0;j<3;j++){
- for(int i=0;i<5;i++){
- digitalWrite(BeepPin, HIGH);
- delay(20);
- digitalWrite(BeepPin, LOW);
- delay(20);
- }
- delay(800);
- }
- }
- void beep_short(){ //蛐蛐叫声,表示成功。
- for(int j=0;j<2;j++){
- for(int i=0;i<2;i++){
- digitalWrite(BeepPin, HIGH);
- delay(20);
- digitalWrite(BeepPin, LOW);
- delay(20);
- }
- delay(500);
- }
- }
- void receiver(){
- if (irrecv.decode(&results))
- {
- Serial.println(results.value, HEX);
- switch (results.value)
- {
- //*****************************0media
- case menu:
- if(menu_status==0)
- {
- Model=1;
- lcd.clear();
- menu_status=1;
- //****************
- for (int i = 0; i < 3; i++) {
- irsend.sendSony(0xa50, 12);
- delay(50);
- }
-
- delay(500);
- }
- else if(menu_status==1)
- {
- Model=2;
- lcd.clear();
- menu_status=0;
- //****************
- for (int i = 0; i < 3; i++) {
- irsend.sendSony(0xa50, 12);
- delay(50);}
- }
-
- irrecv.enableIRIn();
- break;
- //*****************************play
- case play:
- delay(200);
-
- for (int i = 0; i < 3; i++) {
- irsend.sendSony(0xa90, 12);
- delay(50);
- }
-
- delay(500);
- irrecv.enableIRIn();
- break;
- //*****************************center
- case center:
- if(center_status==0)
- {
- lcd.noBacklight();
- center_status=1;
- }
- else if(center_status==1)
- {
- lcd.backlight();
- center_status=0;
- }
- irrecv.enableIRIn();
- break;
- //*****************************left
- case left:
- delay(100);
- irsend.sendNEC(0x801FE817, 32);
-
- delay(500);
- irrecv.enableIRIn();
- break;
- //*****************************right
- case right:
- delay(100);
- irsend.sendNEC(0x801F58A7, 32);
-
- delay(500);
- irrecv.enableIRIn();
- break;
- //*****************************
- case up:
- delay(50);
-
- for (int i = 0; i < 3; i++) {
- irsend.sendSony(0x490, 12); // Sony TV power code
- delay(50);
- }
-
- delay(500);
- irrecv.enableIRIn();
- break;
- //*****************************3down
- case down:
- delay(50);
-
- for (int i = 0; i < 3; i++) {
- irsend.sendSony(0xc90, 12); // Sony TV power code
- delay(50);
- }
-
- delay(500);
- irrecv.enableIRIn();
- break;
- //*********************************
- }
- irrecv.resume(); // Receive the next value
- }
- }
- void displayModel1()
- {
- timeandtempDisplay();
- }
- void displayModel2()
- {
- minuteDisplay();
- hourDisplay();
- }
-
- void hourDisplay()
- {
- Time t=rtc.time();
- int hour=t.hr;
- if(hour<12&hour>0)
- {
- int houra=hour/10;
- int hourb=hour%10;
- if(hour>0&hour<10)
- {
- numberDisplay(10,-1,0);
- numberDisplay(hour,3,0);
- }
- else
- {
- numberDisplay(houra,-1,0);
- numberDisplay(hourb,3,0);
- }
- amDisplay();
- }
- else if(hour>12&hour<24)
- {
- hour=hour-12;
- int houra=hour/10;
- int hourb=hour%10;
- if(hour>0&hour<10)
- {
- numberDisplay(10,-1,0);
- numberDisplay(hour,3,0);
- }
- else
- {
- numberDisplay(houra,-1,0);
- numberDisplay(hourb,3,0);
- }
- pmDisplay();
- }
- else if(hour<1)
- {
- numberDisplay(1,-1,0);
- numberDisplay(2,3,0);
- amDisplay();
- }
- else if (hour==12)
- {
- numberDisplay(0,3,0);
- pmDisplay();
- }
- }
-
- void minuteDisplay()
- {
- Time t=rtc.time();
- int minute=t.min;
- int minutea=minute/10;
- int minuteb=minute%10;
- if(minute>=10)
- {
- numberDisplay(minutea,9,0);
- numberDisplay(minuteb,13,0);
- }
- else
- {
- numberDisplay(0,9,0);
- numberDisplay(minuteb,13,0);
- }
- }
-
- void numberDisplay(int i,int cols,int rows)
- {
- switch(i)
- {
- case 0:
- zeroDisplay(cols,rows);
- break;
- case 1:
- oneDisplay(cols,rows);
- break;
- case 2:
- twoDisplay(cols,rows);
- break;
- case 3:
- threeDisplay(cols,rows);
- break;
- case 4:
- fourDisplay(cols,rows);
- break;
- case 5:
- fiveDisplay(cols,rows);
- break;
- case 6:
- sixDisplay(cols,rows);
- break;
- case 7:
- sevenDisplay(cols,rows);
- break;
- case 8:
- eightDisplay(cols,rows);
- break;
- case 9:
- nineDisplay(cols,rows);
- break;
- case 10:
- nullDisplay(cols,rows);
- break;
- }
- }
-
- void zeroDisplay(int col, int row)
- {
- lcd.setCursor(col,row);
- lcd.write(1);
- lcd.setCursor(col+1,row);
- lcd.write(2);
- lcd.setCursor(col+2,row);
- lcd.write(1);
- lcd.setCursor(col,row+1);
- lcd.write(1);
- lcd.setCursor(col+1,row+1);
- lcd.write(3);
- lcd.setCursor(col+2,row+1);
- lcd.write(1);
- }
-
- void oneDisplay(int col, int row)
- {
- lcd.setCursor(col,row);
- lcd.write(8);
- lcd.setCursor(col+1,row);
- lcd.write(1);
- lcd.setCursor(col+2,row);
- lcd.write(8);
- lcd.setCursor(col,row+1);
- lcd.write(8);
- lcd.setCursor(col+1,row+1);
- lcd.write(1);
- lcd.setCursor(col+2,row+1);
- lcd.write(8);
- }
-
-
- void twoDisplay(int col, int row)
- {
- lcd.setCursor(col,row);
- lcd.write(2);
- lcd.setCursor(col+1,row);
- lcd.write(2);
- lcd.setCursor(col+2,row);
- lcd.write(1);
- lcd.setCursor(col,row+1);
- lcd.write(1);
- lcd.setCursor(col+1,row+1);
- lcd.write(4);
- lcd.setCursor(col+2,row+1);
- lcd.write(4);
- }
-
- void threeDisplay(int col, int row)
- {
- lcd.setCursor(col,row);
- lcd.write(4);
- lcd.setCursor(col+1,row);
- lcd.write(4);
- lcd.setCursor(col+2,row);
- lcd.write(1);
- lcd.setCursor(col,row+1);
- lcd.write(3);
- lcd.setCursor(col+1,row+1);
- lcd.write(3);
- lcd.setCursor(col+2,row+1);
- lcd.write(1);
- }
-
- void fourDisplay(int col, int row)
- {
- lcd.setCursor(col,row);
- lcd.write(1);
- lcd.setCursor(col+1,row);
- lcd.write(8);
- lcd.setCursor(col+2,row);
- lcd.write(1);
- lcd.setCursor(col,row+1);
- lcd.write(2);
- lcd.setCursor(col+1,row+1);
- lcd.write(2);
- lcd.setCursor(col+2,row+1);
- lcd.write(1);
- }
-
- void fiveDisplay(int col, int row)
- {
- lcd.setCursor(col,row);
- lcd.write(1);
- lcd.setCursor(col+1,row);
- lcd.write(4);
- lcd.setCursor(col+2,row);
- lcd.write(4);
- lcd.setCursor(col,row+1);
- lcd.write(3);
- lcd.setCursor(col+1,row+1);
- lcd.write(3);
- lcd.setCursor(col+2,row+1);
- lcd.write(1);
- }
-
- void sixDisplay(int col, int row)
- {
- lcd.setCursor(col,row);
- lcd.write(1);
- lcd.setCursor(col+1,row);
- lcd.write(2);
- lcd.setCursor(col+2,row);
- lcd.write(2);
- lcd.setCursor(col,row+1);
- lcd.write(1);
- lcd.setCursor(col+1,row+1);
- lcd.write(4);
- lcd.setCursor(col+2,row+1);
- lcd.write(1);
- }
-
- void sevenDisplay(int col, int row)
- {
- lcd.setCursor(col,row);
- lcd.write(2);
- lcd.setCursor(col+1,row);
- lcd.write(2);
- lcd.setCursor(col+2,row);
- lcd.write(1);
- lcd.setCursor(col,row+1);
- lcd.write(8);
- lcd.setCursor(col+1,row+1);
- lcd.write(8);
- lcd.setCursor(col+2,row+1);
- lcd.write(1);
- }
-
- void eightDisplay(int col, int row)
- {
- lcd.setCursor(col,row);
- lcd.write(1);
- lcd.setCursor(col+1,row);
- lcd.write(5);
- lcd.setCursor(col+2,row);
- lcd.write(1);
- lcd.setCursor(col,row+1);
- lcd.write(1);
- lcd.setCursor(col+1,row+1);
- lcd.write(6);
- lcd.setCursor(col+2,row+1);
- lcd.write(1);
- }
-
- void nineDisplay(int col, int row)
- {
- lcd.setCursor(col,row);
- lcd.write(1);
- lcd.setCursor(col+1,row);
- lcd.write(4);
- lcd.setCursor(col+2,row);
- lcd.write(1);
- lcd.setCursor(col,row+1);
- lcd.write(3);
- lcd.setCursor(col+1,row+1);
- lcd.write(3);
- lcd.setCursor(col+2,row+1);
- lcd.write(1);
- }
-
- void nullDisplay(int col,int row)
- {
- lcd.setCursor(col,row);
- lcd.write(8);
- lcd.setCursor(col+1,row);
- lcd.write(8);
- lcd.setCursor(col+2,row);
- lcd.write(8);
- lcd.setCursor(col,row+1);
- lcd.write(8);
- lcd.setCursor(col+1,row+1);
- lcd.write(8);
- lcd.setCursor(col+2,row+1);
- lcd.write(8);
- }
-
-
- void amDisplay()
- {
- lcd.setCursor(7,0);
- lcd.print('a');
- lcd.setCursor(7,1);
- lcd.print('m');
- delay(500);
- lcd.setCursor(7,0);
- lcd.write(8);
- lcd.setCursor(7,1);
- lcd.write(8);
- delay(500);
- }
-
- void pmDisplay()
- {
- lcd.setCursor(7,0);
- lcd.print('p');
- lcd.setCursor(7,1);
- lcd.print('m');
- delay(500);
- lcd.setCursor(7,0);
- lcd.write(8);
- lcd.setCursor(7,1);
- lcd.write(8);
- delay(500);
- }
复制代码 |