#include #include #include #include //#include #define HCODE 0x4D //M #define ADHOC_IR_MAX 9 //#define MAXSINTERVAL 15 #define MINSINTERVAL 5 #define IRON LOW #define IROFF HIGH #define IRBUFFLEN 200 #define MINIRINTERVAL 220 #define A_X 0 #define A_Y 1 #define A_Z 2 #define N_ACC_SW 3 #include #include #include #include #if !defined( _MULTITASK_H_ ) #define dly_tsk(tim) delay(tim) #define loc_cpu() interrupts() #define unl_cpu() noInterrupts() #endif /*_MULTITASK_H_ */ boolean serialMonitor=false; void irRemocon_txNEC(const byte data[], unsigned int sz); void irRemocon_txAEHA(const byte data[], unsigned int sz); void disp_alarm_time(); void disp_logo(); void disp_ircode(); void disp_ircustomer(); void disp_date(); void disp_temperature(); void disp_anatemp(); void disp_timer(); void disp_contrast(); void disp_eye(); void disp_acc_xyz(); void disp_mpuacc_xyz(); void disp_pressure(); void disp_rgbcolor(); void disp_proximity(); void disp_lux(); void irCommand(); void lcd_setCGRAM( uint8_t charCode,byte *font); // 0 to 7 void lcd_setContrast( uint8_t con ); void lcd_setCursor( uint8_t locx, uint8_t locy ); void disp_setting_alarm_time(); void disp_setting_timer_time(); void disp_setting_time(); void disp_setting_date(); void disp_current_time(); void lcd_printStr( const char *str ); void IR_event_interrupt(); uint8_t ir_getData(); bool ir_available(); //void ir_receive_interrupt(); void ir_receive_start(); uint8_t ir_Data; int ir_byte; uint8_t g_ir_data = 0; bool g_ir_available = false; unsigned char IR_type = '?'; RPR0521RS rpr0521rs; // Proximity sensor BM1383GLV bm1383; // air pressure sensor KX022 kx022(KX022_DEVICE_ADDRESS_1E); // acceleration sensor BH1745NUC bh1745nuc(BH1745NUC_DEVICE_ADDRESS_39); // color RGB sensor #define OPE_TIME_DISP 0 #define OPE_TIME_SET 1 #define OPE_ALARM_SET 2 #define TIME_SET_CLOCK 0 #define TIME_SET_DATE 1 #define TIME_SET_ALARM 2 #define TIME_SET_TIMER 3 #define LCD_ADRESS 0x3E #define CG_HEART 1 #define CG_EYE 2 #define EYE_X 8 #define EYE_Y 1 #define SW_PIN 2 #define IR_PIN 3 #define LCD_RESETN_PIN 4 #define IR_CONT 5 // Ir LED ON/OFF //#define TONE_PIN 5 #define SCLPIN 7 #define SDAPIN 8 #define TEMPSNS_VDD_PIN 12 #define TEMPSNS_GND_PIN 13 #define LED_R 22 #define LED_G 23 #define LED_B 24 #define LED_ON 0 #define LED_OFF 1 #define N_LED_MODE 7 #define RGB_GREEN 2 #define RGB_RED 4 #define RGB_BLUE 1 #define RGB_BLACK 0 #define RGB_WHITE 7 //#define IR_INTERRUPT (IR_PIN-2) #define F3Hz 349 #define G3Hz 392 #define A3Hz 440 #define B3Hz 494 #define C4Hz 523 #define D4Hz 587 #define E4Hz 659 #define F4Hz 698 #define G4Hz 784 #define A4Hz 880 #define B4Hz 988 #define AKI_REMO_CUSTOMER (0x10EF) #define AKI_REMO_CUS1 (0x10) #define AKI_REMO_CUS2 (0xEF) #define AKI_REMO_POWER (0xD8) #define AKI_REMO_A (0xF8) #define AKI_REMO_B (0x78) #define AKI_REMO_C (0x58) #define AKI_REMO_UP (0xA0) #define AKI_REMO_DOWN (0x00) #define AKI_REMO_RIGHT (0x80) #define AKI_REMO_LEFT (0x10) #define AKI_REMO_CENTER (0x20) #define AKI_REMO_UR (0x21) #define AKI_REMO_UL (0xB1) #define AKI_REMO_DR (0x81) #define AKI_REMO_DL (0x11) // YAMAZAKI HAND REMO CODE #define H_0 (0x00) #define H_1 (0x80) #define H_2 (0x40) #define H_3 (0xC0) #define H_4 (0x20) #define H_5 (0xA0) #define H_6 (0x60) #define H_7 (0xE0) #define H_8 (0x10) #define H_9 (0x90) #define H_10 (0x50) #define H_11 (0xD0) #define H_12 (0x30) #define H_13 (0xB0) #define H_14 (0x70) #define H_15 (0xF0) #define H_16 (0x08) #define H_17 (0x88) #define H_18 (0x48) #define H_19 (0xC8) #define H_20 (0x28) #define H_21 (0xA8) #define H_22 (0x68) #define H_23 (0xE8) #define H_24 (0x18) #define H_25 (0x98) #define H_26 (0x58) #define H_27 (0xD8) #define H_28 (0x38) #define H_29 (0xB8) #define H_30 (0x78) #define H_31 (0xF8) // Ad hoc IR code #define IR_UP 1 #define IR_DOWN 7 #define IR_RIGHT 5 #define IR_LEFT 3 #define IR_CENTER 4 #define IR_CIRL 0 #define IR_CIRR 2 #define IR_BALF 6 #define IR_BALB 8 #define SUB_INFO_ALARM 0 #define SUB_INFO_DATE 1 #define SUB_INFO_TEMP 2 #define SUB_INFO_LOGO 3 #define SUB_INFO_TIMER 4 #define SUB_INFO_CONTRAST 5 #define SUB_INFO_EYE 6 #define SUB_INFO_ACCXYZ 7 #define SUB_INFO_PRESSURE 8 #define SUB_INFO_RGBCOLOR 9 #define SUB_INFO_PROXIMITY 10 #define SUB_INFO_LUX 11 #define SUB_INFO_ANATEMP 12 #define SUB_INFO_IRCODE 13 #define SUB_INFO_MPUACCXYZ 14 #define ALARM_OFF 0 #define ALARM_ON 1 #define ALARM_ACK 2 // Finger Pattern const int guu = B011111; const int choki = B011001; const int paa = B000000; const int guwashi = B010100; void irCommand(); const unsigned char HAND[] = {H_0,H_1,H_2,H_3,H_4,H_5,H_6,H_7,H_8,H_9,H_10,H_11,H_12,H_13,H_14,H_15, \ H_16,H_17,H_18,H_19,H_20,H_21,H_22,H_23,H_24,H_25,H_26,H_27,H_28,H_29,H_30,H_31}; // YAMAZAKI HAND CODE: 0x8F7F000~0x8F7F01F (bit reverse/ 8bit) const unsigned char HAND_GUU[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,0x0F,HAND[guu]}; const unsigned char HAND_CHOKI[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,0x0F,HAND[choki]}; const unsigned char HAND_PAA[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,0x0F,HAND[paa]}; const unsigned char HAND_IDLE[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,0x0F,HAND[17 ]}; unsigned int ADHOC_CUSTOMER[ADHOC_IR_MAX] = {0xFFFF,0xFFFF,0XFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF}; //1,2,3,4,5,6,7,8,9 unsigned int ADHOC_IR[ADHOC_IR_MAX] = {0xFFFF,0xFFFF,0XFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF}; // 1,2,3,4,5,6,7,8,9 const unsigned char TVOnOff[] = {0xaa,0x5a,0x8f,0x12,0x16,0xd1}; const unsigned char AKI_UP[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,AKI_REMO_UP,0xFF-AKI_REMO_UP}; const unsigned char AKI_DOWN[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,AKI_REMO_DOWN,0xFF-AKI_REMO_DOWN}; const unsigned char AKI_RIGHT[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,AKI_REMO_RIGHT,0xFF-AKI_REMO_RIGHT}; const unsigned char AKI_LEFT[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,AKI_REMO_LEFT,0xFF-AKI_REMO_LEFT}; const unsigned char AKI_CENTER[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,AKI_REMO_CENTER,0xFF-AKI_REMO_CENTER}; const unsigned char AKI_POWER[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,AKI_REMO_POWER,0xFF-AKI_REMO_POWER}; const unsigned char AKI_A[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,AKI_REMO_A,0xFF-AKI_REMO_A}; const unsigned char AKI_B[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,AKI_REMO_B,0xFF-AKI_REMO_B}; const unsigned char AKI_C[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,AKI_REMO_C,0xFF-AKI_REMO_C}; const unsigned char AKI_1[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,1,0xFF-1}; const unsigned char AKI_2[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,2,0xFF-2}; const unsigned char AKI_4[] = {AKI_REMO_CUS1,AKI_REMO_CUS2,4,0xFF-4}; int adhoc_ir_num=-1; int temperature; int timer_second; int carry; int irRepeatCode=false; int acc_sw_state=0; int acc_sw_mode=0; int led_mode=0; int led_counter=0; int led_state=0; int ope_mode = OPE_TIME_DISP; int sub_info_mode = SUB_INFO_LOGO; int alarm_state=ALARM_OFF; int remo_send_mode = 0; int ope_state = 0; char lcd_str[16+1]; int err; uint8_t gContrast = 37; //15; 0-63 uint8_t Min_gContrast = 20; uint8_t Max_gContrast = 50; boolean gContrastFlag = false; static void cyclic_handler(unsigned long u32ms); static const char dayOfWeek[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; int time_set_mode; int time_set_state=1; int timer_default_set_flag=0; int timer_default_min=0; int timer_min=0; int timer_sec=0; byte timer_alart=0; byte sns_accxyz; byte sns_pressure; byte sns_rgbcolor; byte sns_proximity; int i_acc[3]; int abs_i_acc[3]; RTC_TIMETYPE currentTime; RTC_TIMETYPE settingTime; RTC_TIMETYPE alarmTime; RTC_TIMETYPE timerTime; volatile unsigned long irMicroOn; volatile unsigned long irMicroOff; volatile unsigned int irDataOn[200]; volatile unsigned int irDataOff[200]; volatile int irOnIndex=0; volatile int irOffIndex=0; volatile boolean irStarted=false; volatile boolean irDecoding=false; volatile unsigned long lastIrTime=0; boolean irReady=false; byte irData[30]; unsigned long int ircode; unsigned int customer_code; char *itoh( char *dst, unsigned int value ) { sprintf( dst, "%02x", value ); return dst; } int accX, accY, accZ, temp, gyroX, gyroY, gyroZ; double gyroDataY, gyroDataZ, accDataX, accDataY; double aveAccX=0.0; double aveAccY=0.0; void readGyro() { //GY-521 MPU6050 Wire.beginTransmission(0x68); Wire.write(0x3B); Wire.endTransmission(); Wire.requestFrom(0x68, 14); accX=Wire.read()<<8|Wire.read(); //0x3B accY=Wire.read()<<8|Wire.read(); //0x3D accZ=Wire.read()<<8|Wire.read(); //0x3F temp=Wire.read()<<8|Wire.read(); //0x41 gyroX=Wire.read()<<8|Wire.read(); //0x43 gyroY=Wire.read()<<8|Wire.read(); //0x45 gyroZ=Wire.read()<<8|Wire.read(); //0x47 gyroDataY = (double) gyroY; gyroDataZ = -(double) gyroX; accDataX = -(double) accZ; aveAccX = aveAccX * 0.9 + accDataX * 0.1; accDataY = -(double) accY; aveAccY = aveAccY * 0.9 + accDataY * 0.1; } /*************************************************************************/ /* send IR code (NEC format) */ /*************************************************************************/ void irRemocon_txNEC(const byte data[], unsigned int sz) { //#define T_VALUE 562UL #define T_VALUE 555UL #define PPM_ON 170 #define PPM_OFF 255 noInterrupts(); loc_cpu(); analogWrite(IR_CONT,0); //frame ppm on analogWrite(IR_CONT,PPM_ON); delayMicroseconds(T_VALUE * 16); //16T //frame ppm off analogWrite(IR_CONT,PPM_OFF); delayMicroseconds(T_VALUE * 8); //8T digitalWrite(IR_CONT,0); for(int i = 0; i < sz; i++) { byte temp = data[i]; for(int j = 0; j < 8; j++) { if(temp & 0x01) { //frame ppm on analogWrite(IR_CONT,PPM_ON); delayMicroseconds(T_VALUE * 1); //1T //frame ppm off analogWrite(IR_CONT,PPM_OFF); delayMicroseconds(T_VALUE * 3); //3T pinMode(IR_CONT, OUTPUT); //digitalWrite(IR_CONT,0); } else { //frame ppm on analogWrite(IR_CONT,PPM_ON); delayMicroseconds(T_VALUE * 1); //1T //frame ppm off analogWrite(IR_CONT,PPM_OFF); delayMicroseconds(T_VALUE * 1); //1T pinMode(IR_CONT, OUTPUT); //digitalWrite(IR_CONT,0); } temp >>= 1; } } //stop bit //frame ppm on analogWrite(IR_CONT,PPM_ON); delayMicroseconds(T_VALUE * 1); //1T //frame ppm off analogWrite(IR_CONT,PPM_OFF); pinMode(IR_CONT, OUTPUT); //digitalWrite(IR_CONT,0); unl_cpu(); //digitalWrite(IR_CONT,0); interrupts(); } void IR_event_interrupt() { //set_rgb(4); //if (millis()-lastIrTime>100) { if (millis()-lastIrTime 108ms x 2 /* irStarted=false; irOnIndex=0; irOffIndex=0; irMicroOff=irMicroOn; lastIrTime=millis(); */ return; } //if (millis()-lastIrTime=IRBUFFLEN) irStarted=false; } else { irStarted=true; irOnIndex=0; irOffIndex=0; irMicroOff=irMicroOn; } } else { irMicroOff=micros(); irDataOn[irOnIndex]=irMicroOff-irMicroOn; irOnIndex++; if (irOnIndex>=IRBUFFLEN) irStarted=false; } } void decodeNECAEHA() { ir_byte=irOffIndex/8; int idx=1; if (irDataOff[0]<3375) { // if repeat code : 2.25ms(repeat)+4.5ms(normal)/2=3.375ms irRepeatCode=true; irReady=false; lastIrTime=millis(); irOnIndex=0; irOffIndex=0; irDecoding=false; return; } else irRepeatCode=false; for (int i=0; i>=1; if (irDataOff[idx]>1120) irData[i]|=0x80; // >=0.56ms <=1.69ms idx++; } } customer_code=irData[0]<<8|irData[1]; for (int i=2; i900) data|=0x80; data>>=1; } unsigned int addr=0; int idx=8; for (int i=0; i<16; i++) { addr>>=1; if (idx900) addr|=0x8000; idx++; } } customer_code=addr; ircode=(unsigned int)data; irReady=true; } void writeEEPROMadhoc() { noInterrupts(); EEPROM.write(2, HCODE); for (int i=0; i>8)&0xFF)); EEPROM.write(4+i*4, (byte)(ADHOC_CUSTOMER[i]&0xFF)); EEPROM.write(5+i*4, (byte)((ADHOC_IR[i]>>8)&0xFF)); EEPROM.write(6+i*4, (byte)(ADHOC_IR[i]&0xFF)); } interrupts(); } void regIR() { // Ad hoc IR code registration if (adhoc_ir_num= 2)&&(time_set_state <= 5)) { //ir_receive_start(); if (ir_available()) { switch (ir_getData()) { case AKI_REMO_POWER: // CANCEL TIME SET ope_mode = OPE_TIME_DISP; sub_info_mode=SUB_INFO_LOGO; time_set_state=0; break; case AKI_REMO_RIGHT: if (time_set_mode == TIME_SET_ALARM) { if (time_set_state < 3) time_set_state++; //disp_setting_alarm_time(); } else if (time_set_mode == TIME_SET_TIMER) { if (time_set_state < 3) time_set_state++; //disp_setting_timer_time(); } else if (time_set_mode == TIME_SET_DATE) { if (time_set_state < 5) time_set_state++; //disp_setting_date(); } else { // 'C' if (time_set_state < 4) time_set_state++; //disp_setting_time(); } disp_setting_pointer(); break; case AKI_REMO_LEFT: if (time_set_state > 2) time_set_state--; disp_setting_pointer(); break; case AKI_REMO_CENTER: lcd_setCursor( 0, 0); if (time_set_mode == TIME_SET_ALARM) { lcd_printStr( "ALARM OK" ); if (time_set_state==2) settingTime. min=0; alarmTime.hour=settingTime.hour; alarmTime.min=settingTime.min; err = rtc_set_alarm_time(alarmTime.hour, alarmTime.min); alarm_state=ALARM_ON; rtc_alarm_on(); sub_info_mode=SUB_INFO_ALARM; lcd_setCursor( 0, 1); disp_alarm_time(); } else if (time_set_mode == TIME_SET_DATE) { lcd_printStr( "DATE OK " ); err = rtc_get_time(¤tTime); settingTime.hour = currentTime.hour; settingTime.min = currentTime.min; settingTime.second = currentTime.second; err = rtc_set_time(&settingTime); sub_info_mode=SUB_INFO_DATE; } else if (time_set_mode == TIME_SET_CLOCK) { lcd_printStr( "CLOCK OK" ); if (time_set_state==2) { settingTime.min=0; settingTime.second=0; } else if (time_set_state==3) settingTime.second=0; err = rtc_set_time(&settingTime); sub_info_mode=SUB_INFO_LOGO; lcd_setCursor( 0, 1); disp_logo(); } else if (time_set_mode == TIME_SET_TIMER) { err = rtc_get_time(¤tTime); if (time_set_state==2) settingTime.second=0; timer_sec=settingTime.second; timer_min=settingTime.min; timerTime.second=(currentTime.second+settingTime.second)%60; carry=(currentTime.second+settingTime.second)/60; timerTime.min=(currentTime.min+settingTime.min+carry)%60; carry=(currentTime.min+settingTime.min+carry)/60; timerTime.hour=(currentTime.hour+carry)%24; sub_info_mode=SUB_INFO_TIMER; timer_alart = 1; lcd_printStr( "TIMER OK" ); delay(500); } //delay(1000); ope_mode = OPE_TIME_DISP; time_set_state=0; break; case AKI_REMO_UP: if (time_set_mode == TIME_SET_DATE) { if (time_set_state == 2) settingTime.year=(settingTime.year+1)%100; else if (time_set_state == 3) settingTime.mon=settingTime.mon%12+1; else if (time_set_state == 4) { if (settingTime.mon==2) { if ((settingTime.year%4)==0) settingTime.day=settingTime.day%28+1; else settingTime.day=settingTime.day%29+1; } else if ((settingTime.mon==4)|| (settingTime.mon==6)|| (settingTime.mon==9)|| (settingTime.mon==11)) { settingTime.day=settingTime.day%30+1; } else { settingTime.day=settingTime.day%31+1; } } else if (time_set_state == 5) settingTime.weekday=(settingTime.weekday+1)%7; lcd_setCursor( 0, 1); disp_setting_date(); } else if (time_set_mode == TIME_SET_ALARM) { if (time_set_state == 2) settingTime.hour=(settingTime.hour+1)%24; else if (time_set_state == 3) settingTime.min=(settingTime.min+1)%60; lcd_setCursor( 0, 0); disp_current_time(); lcd_setCursor( 0, 1); disp_setting_alarm_time(); } else if (time_set_mode == TIME_SET_TIMER) { if (time_set_state == 2) settingTime.min=(settingTime.min+1)%60; else if (time_set_state == 3) settingTime.second=(settingTime.second+1)%60; lcd_setCursor( 0, 0); disp_current_time(); lcd_setCursor( 0, 1); disp_setting_timer_time(); } else { // TIME_SET_CLOCK if (time_set_state == 2) settingTime.hour=(settingTime.hour+1)%24; else if (time_set_state == 3) settingTime.min=(settingTime.min+1)%60; else if (time_set_state == 4) settingTime.second=(settingTime.second+10)%60; lcd_setCursor( 0, 1); disp_setting_time(); } break; case AKI_REMO_DOWN: if (time_set_mode == TIME_SET_DATE) { if (time_set_state == 2) settingTime.year=(settingTime.year+100-1)%100; else if (time_set_state == 3) settingTime.mon=((settingTime.mon-1+12-1)%12)+1; else if (time_set_state == 4) { if (settingTime.mon==2) { if ((settingTime.year%4)==0) settingTime.day=(settingTime.day-1+28-1)%28+1; else settingTime.day=(settingTime.day-1+29-1)%29+1; } else if ((settingTime.mon==4)|| (settingTime.mon==6)|| (settingTime.mon==9)|| (settingTime.mon==11)) { settingTime.day=(settingTime.day-1+30-1)%30+1; } else { settingTime.day=(settingTime.day-1+31-1)%31+1; } } else if (time_set_state == 5) settingTime.weekday=(settingTime.weekday+7-1)%7; lcd_setCursor( 0, 1); disp_setting_date(); } else if (time_set_mode == TIME_SET_ALARM) { if (time_set_state == 2) settingTime.hour=(settingTime.hour+24-1)%24; else if (time_set_state == 3) settingTime.min=(settingTime.min+60-1)%60; lcd_setCursor( 0, 0); disp_current_time(); lcd_setCursor( 0, 1); disp_setting_alarm_time(); } else if (time_set_mode == TIME_SET_TIMER) { if (time_set_state == 2) settingTime.min=(settingTime.min+60-1)%60; else if (time_set_state == 3) settingTime.second=(settingTime.second+60-1)%60; lcd_setCursor( 0, 0); disp_current_time(); lcd_setCursor( 0, 1); disp_setting_timer_time(); } else { // TIME_SET_CLOCK if (time_set_state == 2) settingTime.hour=(settingTime.hour+24-1)%24; else if (time_set_state == 3) settingTime.min=(settingTime.min+60-1)%60; else if (time_set_state == 4) settingTime.second=(settingTime.second+60-10)%60; lcd_setCursor( 0, 1); disp_setting_time(); } break; default: break; } ir_receive_start(); } ir_receive_start(); //time_set_state++; } break; case OPE_TIME_DISP: if (ir_available()) { //ir_receive_start(); switch (ir_getData()) { case AKI_REMO_UR: if (gContrastMin_gContrast) gContrast--; lcd_setContrast(gContrast); sub_info_mode=SUB_INFO_CONTRAST; //ir_receive_start(); break; case AKI_REMO_POWER: // POWER BUTTON ope_mode = OPE_TIME_SET; //time_set_state=0; rtc_get_time(&settingTime); settingTime.second=(settingTime.second/10)*10; lcd_setCursor( 0, 0); lcd_printStr( "TIME SET" ); lcd_setCursor( 0, 1); lcd_printStr( "Al Dt Ck" ); time_set_state=1; disp_update(); //ir_receive_start(); break; case AKI_REMO_A: sub_info_mode=SUB_INFO_ALARM; lcd_setCursor( 0, 1); disp_alarm_time(); if (alarm_state==ALARM_ACK) { alarm_state=ALARM_ON; rtc_alarm_on(); } else if (alarm_state==ALARM_OFF) { alarm_state=ALARM_ON; rtc_alarm_on(); } else if (alarm_state==ALARM_ON) { alarm_state=ALARM_OFF; rtc_alarm_off(); } //ir_receive_start(); break; case AKI_REMO_B: if (sub_info_mode==SUB_INFO_DATE) { sub_info_mode=SUB_INFO_LOGO; lcd_setCursor( 0, 1); disp_logo(); } else if (sub_info_mode==SUB_INFO_LOGO) { sub_info_mode=SUB_INFO_DATE; lcd_setCursor( 0, 1); disp_date(); } else { //sub_info_mode=SUB_INFO_DATE; } //ir_receive_start(); break; case AKI_REMO_C: // if (sub_info_mode==SUB_INFO_TEMP) sub_info_mode = SUB_INFO_ANATEMP; if ((sub_info_mode!=SUB_INFO_ACCXYZ)&&(sns_accxyz==0)) sub_info_mode = SUB_INFO_ACCXYZ; else if ((sub_info_mode!=SUB_INFO_PRESSURE)&&(sns_pressure==0)) sub_info_mode = SUB_INFO_PRESSURE; else if ((sub_info_mode!=SUB_INFO_RGBCOLOR)&&(sns_rgbcolor==0)) sub_info_mode = SUB_INFO_RGBCOLOR; else if (sns_proximity==0){ if (sub_info_mode==SUB_INFO_ANATEMP) sub_info_mode = SUB_INFO_PROXIMITY; else if (sub_info_mode==SUB_INFO_PROXIMITY) sub_info_mode = SUB_INFO_LUX; else sub_info_mode = SUB_INFO_ANATEMP; } else if (sub_info_mode==SUB_INFO_ANATEMP) { sub_info_mode = SUB_INFO_LOGO; } else if (sub_info_mode==SUB_INFO_LOGO) { sub_info_mode = SUB_INFO_IRCODE; } else sub_info_mode = SUB_INFO_ANATEMP; //ir_receive_start(); break; case AKI_REMO_UL: sub_info_mode=SUB_INFO_TIMER; //ir_receive_start(); break; case AKI_REMO_DL: led_mode=(led_mode+1)%N_LED_MODE; //detachCyclicHandler(0); //attachCyclicHandler(0,rtcConstantPeriodInterruptHandler,100); //interrupts(); //rtc_constant_period_interrupt_on(); //ir_receive_start(); break; default: break; } ir_receive_start(); } break; default: break; } } } void printIrData(String s) { IR_type = s[0]; if (!serialMonitor) return; /* for (int i=0; i2600) { //AEHA 3.2msec leader On if (irOffIndex >=41) { decodeNECAEHA(); printIrData("AEHA"); } } else if (irDataOn[0]>1800) { //SONY if (irOnIndex >=12) { decodeSONY(); printIrData("SONY"); } } else { irReady=false; lastIrTime=millis(); irOnIndex=0; irOffIndex=0; irDecoding=false; return; } if (irReady) { irReady=false; lastIrTime=millis(); //if (adhoc_ir_num>=0 && adhoc_ir_num> 4) & 0x03) ); // contast High/icon/power lcd_cmd( 0x38 ); } void ir_receive_start(){ //attachInterrupt(IR_INTERRUPT, ir_receive_interrupt, FALLING); } /************ IR utility function ***************/ /* void ir_receive_interrupt(){ unsigned long last_time; detachInterrupt(IR_INTERRUPT); last_time = micros(); // confirm if reader code is correct uint8_t err = 0; while(!digitalRead(IR_PIN)){ // until change from low to high if((micros() - last_time) > 10000){ // interval low should be 9ms or less err = true; ir_receive_start(); break; } } while(digitalRead(IR_PIN)){ // until change from high to low if((micros() - last_time) > 15000){ // interval of reader code should be 13.5ms or less err = true; ir_receive_start(); break; } } if(((micros() - last_time) < 13000) || (err == true)){ // Unknown code ir_receive_start(); //attachInterrupt(IR_INTERRUPT, ir_receive_interrupt, FALLING); g_ir_available = false; return; // not available remote controller } // get data uint8_t receive_count = 0; uint8_t tmp_ir_data[4] = {0}; g_ir_data = 0; last_time = micros(); while((32 > receive_count) && ((micros() - last_time) < 80000)){ // interval of a frame data should be 76.5ms or less last_time = micros(); while(!digitalRead(IR_PIN) && ((micros() - last_time) < 1000)){ // interval of low state is about 0.56ms. } while(digitalRead(IR_PIN) && ((micros() - last_time) < 2500)){ // interval of a bit is between 1.125ms and 2.25ms } if((micros() - last_time) > 1500){ bitSet(tmp_ir_data[receive_count / 8], receive_count % 8); } receive_count++; } if(tmp_ir_data[2] == (uint8_t)~tmp_ir_data[3]){ g_ir_data = tmp_ir_data[2]; // set actual data g_ir_available = true; } } */ /* uint8_t ir_getData(){ g_ir_available = false; return g_ir_data; } */ uint8_t ir_getData(){ g_ir_data=ircode>>8; return g_ir_data; } /* bool ir_available(){ return g_ir_available; } */ bool ir_available(){ return true; } //---------------------------------------------------------------------- void disp_logo() { sprintf(lcd_str,"GR-SHOCK"); lcd_printStr( lcd_str ); } void disp_acc_eye() { if (remo_send_mode == 0) { if (i_acc[A_Y] >= 2) { if (i_acc[A_X] >= 2) lcd_setCGRAM(CG_EYE, eye_up_right); else if (i_acc[A_X] <= -2) lcd_setCGRAM(CG_EYE, eye_up_left); else lcd_setCGRAM(CG_EYE, eye_up); } else if (i_acc[A_Y] <= -2) { if (i_acc[A_X] >= 2) lcd_setCGRAM(CG_EYE, eye_down_right); else if (i_acc[A_X] <= -2) lcd_setCGRAM(CG_EYE, eye_down_left); else lcd_setCGRAM(CG_EYE, eye_down); } else { if (i_acc[A_X] >= 2) lcd_setCGRAM(CG_EYE, eye_right); else if (i_acc[A_X] <= -2) lcd_setCGRAM(CG_EYE, eye_left); else lcd_setCGRAM(CG_EYE, eye_center); } lcd_str[2]=CG_EYE; lcd_str[6]=CG_EYE; } else { if ((i_acc[A_X] <= -5)) { if (acc_sw_mode == 0) { set_rgb(RGB_GREEN); for (int i=1; i<=3; i++) { irRemocon_txNEC( HAND_GUU, sizeof(HAND_GUU) ); } delay(1000); set_rgb(RGB_BLACK); } else if (acc_sw_mode == 1) { set_rgb(RGB_RED); for (int i=1; i<=3; i++) { irRemocon_txNEC( HAND_CHOKI, sizeof(HAND_CHOKI) ); } delay(1000); set_rgb(RGB_BLACK); } else if (acc_sw_mode == 2) { set_rgb(RGB_BLUE); for (int i=1; i<=3; i++) { irRemocon_txNEC( HAND_PAA, sizeof(HAND_PAA) ); } delay(1000); set_rgb(RGB_BLACK); } else { lcd_str[2]=' '; lcd_str[3]='?'; lcd_str[4]='-'; lcd_str[5]='?'; lcd_str[6]=' '; } } if ((i_acc[A_Y] >= 3)&&(i_acc[A_Y] <= 5)&&(abs_i_acc[A_X] <= 1)) { if (acc_sw_state == 0) { acc_sw_mode = (acc_sw_mode+1)%N_ACC_SW; acc_sw_state = 1; } } else if ((i_acc[A_Y] >= -7)&&(i_acc[A_Y] <= -5)&&(abs_i_acc[A_X] <= 1)) { //set_rgb(RGB_WHITE); for (int i=1; i<=3; i++) { irRemocon_txNEC( HAND_IDLE, sizeof(HAND_IDLE) ); } delay(1000); set_rgb(RGB_BLACK); } else if (abs_i_acc[A_Y] <= 1) { if (acc_sw_state == 1) { acc_sw_state = 0; } } if (acc_sw_mode ==0) { lcd_str[2]=' '; lcd_str[3]=0xB8; // guu lcd_str[4]=0xDE; lcd_str[5]=0xB0; lcd_str[6]=' '; } else if (acc_sw_mode == 1) { lcd_str[2]=' '; lcd_str[3]=0xC1; // choki lcd_str[4]=0xAE; lcd_str[5]=0xB7; lcd_str[6]=' '; } else if (acc_sw_mode) { lcd_str[2]=' '; lcd_str[3]=0xCA; // paa lcd_str[4]=0xDF; lcd_str[5]=0xB0; lcd_str[6]=' '; } } } void disp_eye() { byte eye; sprintf(lcd_str," ( )_( )"); if (sub_info_mode == SUB_INFO_ACCXYZ) { disp_acc_eye(); } else { switch (currentTime.second%8) { case 0: lcd_setCGRAM(CG_EYE, eye_up); break; case 1: lcd_setCGRAM(CG_EYE, eye_up_right); break; case 2: lcd_setCGRAM(CG_EYE, eye_right); break; case 3: lcd_setCGRAM(CG_EYE, eye_down_right); break; case 4: lcd_setCGRAM(CG_EYE, eye_down); break; case 5: lcd_setCGRAM(CG_EYE, eye_down_left); break; case 6: lcd_setCGRAM(CG_EYE, eye_left); break; case 7: lcd_setCGRAM(CG_EYE, eye_up_left); break; } lcd_str[2]=CG_EYE; lcd_str[6]=CG_EYE; } lcd_setCursor( EYE_X, EYE_Y ); lcd_printStr( lcd_str ); } void disp_temperature() { temperature = getTemperature(0); sprintf(lcd_str,"TEMP %02dC",temperature); lcd_printStr( lcd_str ); } void disp_anatemp() { // LM61BIZ analog temperature sensor int mV; int tmp, tmp1, tmp2; digitalWrite(TEMPSNS_VDD_PIN,1); mV = ((long int)analogRead(A4)*1450)/1023; // 1.45V=1023 digitalWrite(TEMPSNS_VDD_PIN,0); tmp = (mV-600)-30; tmp1=tmp/10; tmp2=tmp%10; sprintf(lcd_str,"T %02d.%dC ",tmp1,tmp2); lcd_printStr( lcd_str ); } void disp_pressure() { byte rc; float press; rc = bm1383.get_val(&press); if (rc == 0) sprintf(lcd_str,"P%f",press); else sprintf(lcd_str,"no PRESS"); lcd_printStr( lcd_str ); } void disp_ircode() { char disp_format[32]; if (IR_type=='N') { sprintf(lcd_str,"-%04x ",ircode); lcd_printStr( lcd_str );} else if (IR_type=='A') { if (ir_byte==3) { sprintf(lcd_str,"-%01x ",ircode); } else if (ir_byte==4) { sprintf(lcd_str,"-%02x ",ircode); } else if (ir_byte==5) { sprintf(lcd_str,"-%03x ",ircode); } else if (ir_byte==6) { sprintf(lcd_str,"%04x ",ircode); } else sprintf(lcd_str," %2d byte",ir_byte); lcd_printStr( lcd_str ); } else if (IR_type=='S') { sprintf(lcd_str,"-%02x ",ircode); lcd_printStr( lcd_str ); } else { lcd_printStr( " IRcode"); } } void disp_ircustomer() { if (IR_type=='N') { sprintf(lcd_str,"NEC %04x",customer_code); lcd_printStr( lcd_str ); } else if (IR_type=='A') { if (ir_byte<=6) sprintf(lcd_str,"AEHA%04x",customer_code); if (ir_byte==7) sprintf(lcd_str,"AE%04x%02x",customer_code,irData[2]); if (ir_byte==8) sprintf(lcd_str,"%04x%02x%02x",customer_code,irData[2],irData[3]); if (ir_byte>=9) sprintf(lcd_str,"AEHA%04x",customer_code); lcd_printStr( lcd_str ); } else if (IR_type=='S') { sprintf(lcd_str,"SONY %02x",customer_code); lcd_printStr( lcd_str ); } else { lcd_printStr( "IRcustom"); } } void disp_proximity() { byte rc; unsigned short ps_val; float als_val; rc = rpr0521rs.get_psalsval(&ps_val, &als_val); if (rc == 0) sprintf(lcd_str,"PRX %4d",ps_val); else sprintf(lcd_str,"no PROXI"); lcd_printStr( lcd_str ); } void disp_lux() { byte rc; unsigned short ps_val; float als_val; rc = rpr0521rs.get_psalsval(&ps_val, &als_val); if (rc == 0) sprintf(lcd_str,"%4.0f LUX",als_val); else sprintf(lcd_str,"no LUX "); lcd_printStr( lcd_str ); } void disp_rgbcolor() { byte rc; int max; unsigned int r, g, b; unsigned short rgbc[4]; rc = bh1745nuc.get_val(rgbc); r=rgbc[0]; g=rgbc[1]; b=rgbc[2]; max=(r>g)?r:g; max=(b>max)?b:max; if (max==0) max=1; r=(r*9)/max; g=(g*9)/max; b=(b*9)/max; if (rc == 0) sprintf(lcd_str,"RGB %d%d%d ",r,g,b); else sprintf(lcd_str,"no RGB "); lcd_printStr( lcd_str ); } void disp_acc_xyz() { byte rc; float acc[3]; rc = kx022.get_val(acc); for (int i=0; i<=2; i++) i_acc[i] = acc[i] * 9; // X,Y,Z if (rc == 0) { sprintf(lcd_str,"AC%2d%2d%2d",i_acc[A_X],i_acc[A_Y],i_acc[A_Z]); } else sprintf(lcd_str,"noXYZacc"); lcd_printStr( lcd_str ); if (rc == 0) { abs_i_acc[A_X]=(i_acc[A_X]<0)? -i_acc[A_X]:i_acc[A_X]; abs_i_acc[A_Y]=(i_acc[A_Y]<0)? -i_acc[A_Y]:i_acc[A_Y]; abs_i_acc[A_Z]=(i_acc[A_Z]<0)? -i_acc[A_Z]:i_acc[A_Z]; if ((abs_i_acc[A_X]<=1)&&(abs_i_acc[A_Y]<=1)) ; // put on the desk else { // active } } } void disp_mpuacc_xyz() { byte rc; float acc[3]; rc = kx022.get_val(acc); for (int i=0; i<=2; i++) i_acc[i] = acc[i] * 9; // X,Y,Z if (rc == 0) { sprintf(lcd_str,"AC%2d%2d%2d",i_acc[A_X],i_acc[A_Y],i_acc[A_Z]); } else sprintf(lcd_str,"noXYZacc"); lcd_printStr( lcd_str ); if (rc == 0) { abs_i_acc[A_X]=(i_acc[A_X]<0)? -i_acc[A_X]:i_acc[A_X]; abs_i_acc[A_Y]=(i_acc[A_Y]<0)? -i_acc[A_Y]:i_acc[A_Y]; abs_i_acc[A_Z]=(i_acc[A_Z]<0)? -i_acc[A_Z]:i_acc[A_Z]; if ((abs_i_acc[A_X]<=1)&&(abs_i_acc[A_Y]<=1)) ; // put on the desk else { // active } } } void disp_contrast() { sprintf(lcd_str,"CONT %2d",gContrast); lcd_printStr( lcd_str ); } void disp_timer() { uint32_t timer_Time_second; uint32_t current_Time_second; uint32_t disp_second; int disp_min; int disp_sec; int disp_sign; timer_Time_second=(uint32_t)(timerTime.hour*60+timerTime.min)*60+timerTime.second; current_Time_second=(uint32_t)(currentTime.hour*60+currentTime.min)*60+currentTime.second; if (timer_Time_second=(uint32_t)12*60*60) { disp_sign=1; disp_second=(uint32_t)24*60*60-disp_second; } else disp_sign= -1; disp_second=disp_second%3600; if (disp_second==0) disp_sign=1; disp_min=disp_second/60; disp_sec=disp_second%60; if (disp_sign==1) sprintf(lcd_str,"TM %02d:%02d",disp_min,disp_sec); else sprintf(lcd_str,"TM-%02d:%02d",disp_min,disp_sec); lcd_printStr( lcd_str ); if (disp_sign==1) { if ((disp_min==0)&&(disp_sec==0)) { if (timer_alart==1) { tone_melody(); timer_alart=0; } } } } void disp_current_time() { sprintf(lcd_str,"%2d:%02d:%02d", currentTime.hour, currentTime.min, currentTime.second); lcd_printStr( lcd_str ); } void tone_melody() { /* tone(TONE_PIN,C4Hz,100); delay(200); noTone(TONE_PIN); tone(TONE_PIN,G3Hz,100); delay(200); noTone(TONE_PIN); tone(TONE_PIN,G4Hz,100); delay(200); noTone(TONE_PIN); */ } void disp_alarm_time() { if (alarm_state==ALARM_ON) sprintf(lcd_str,"%2d:%02d AL", alarmTime.hour, alarmTime.min); if (alarm_state==ALARM_OFF) sprintf(lcd_str,"NO ALARM ", alarmTime.hour, alarmTime.min); if (alarm_state==ALARM_ACK) { if (currentTime.second%2==0) sprintf(lcd_str,"%2d:%02d AL", alarmTime.hour, alarmTime.min); else sprintf(lcd_str," ", alarmTime.hour, alarmTime.min); tone_melody(); } lcd_printStr( lcd_str ); ir_receive_start(); } void disp_setting_IrOnOff() { lcd_setCursor(8,1); sprintf(lcd_str,"%2d%2d-%d%d%d", irOnIndex,irOffIndex,irReady,irStarted,irDecoding); lcd_printStr( lcd_str ); //delay(500); } void disp_setting_state() { sprintf(lcd_str,"%4d%4d", time_set_mode,time_set_state); lcd_printStr( lcd_str ); } void disp_setting_alarm_time() { if (time_set_state==3) { sprintf(lcd_str,"%2d.%02d AL", settingTime.hour, settingTime.min); //lcd_setCursor( 0, 0); } else { //if (time_set_state==2) { sprintf(lcd_str,"%2d. AL", settingTime.hour); //lcd_setCursor( 0, 0); } lcd_printStr( lcd_str ); } void disp_setting_timer_time() { if (time_set_state==2) { sprintf(lcd_str,"TM-%02d. ", settingTime.min); //lcd_setCursor( 0, 0); } else { //if (time_set_state==3) { sprintf(lcd_str,"TM-%02d.%02d", settingTime.min, settingTime.second); //lcd_setCursor( 0, 0); } lcd_printStr( lcd_str ); } void disp_setting_time() { //noInterrupts(); //rtc_get_time(&settingTime); //interrupts(); if (time_set_state==2) { sprintf(lcd_str,"%2d. ", settingTime.hour); } else if (time_set_state==3) { sprintf(lcd_str,"%2d.%02d ", settingTime.hour, settingTime.min); } else if (time_set_state==4) { sprintf(lcd_str,"%2d.%02d.%02d", settingTime.hour, settingTime.min, settingTime.second); } lcd_printStr( lcd_str ); } void disp_setting_date() { //noInterrupts(); //rtc_get_time(&settingTime); //interrupts(); sprintf(lcd_str,"%2d%02d%02d%s", settingTime.year, settingTime.mon,settingTime.day,dayOfWeek[settingTime.weekday]); lcd_printStr( lcd_str ); } void disp_date() { //noInterrupts(); rtc_get_time(¤tTime); //interrupts(); if (currentTime.mon <= 9) sprintf(lcd_str, "%2d/%02d%s",currentTime.mon,currentTime.day,dayOfWeek[currentTime.weekday]); else sprintf(lcd_str, " %2d/%02d%s",currentTime.mon,currentTime.day,dayOfWeek[currentTime.weekday]); lcd_printStr( lcd_str ); } void SW_pressed() { alarm_state=ALARM_ACK; } void InterruptHandler1ms(unsigned long u32ms) { /*noInterrupts(); rtc_get_time(¤tTime); interrupts();*/ /* if (led_mode==0) set_rgb(RGB_BLACK); else if (led_mode==1) set_rgb(RGB_RED); else if (led_mode==2) set_rgb(RGB_GREEN); else if (led_mode==3) set_rgb(RGB_BLUE); else if (led_mode==4) { set_rgb(RGB_WHITE); } else if (led_mode==5) { set_rgb(4>>(currentTime.second%3)); } else if (led_mode==6) { led_counter=(led_counter+1)%100; if (led_counter==0) { set_rgb(led_state+1); led_state=(led_state+1)%6; } } */ } void alarm_handler() { alarm_state=ALARM_ACK; sub_info_mode=SUB_INFO_ALARM; //interrupts(); ir_receive_start(); } void disp_update() { //noInterrupts(); rtc_get_time(¤tTime); //interrupts(); if (ope_mode==OPE_TIME_DISP) { sprintf(lcd_str,"%2d:%02d:%02d", currentTime.hour, currentTime.min, currentTime.second); lcd_setCursor(0,0); disp_current_time(); lcd_setCursor(8,0); disp_date(); } if ((ope_mode==OPE_TIME_SET)&&((time_set_mode==TIME_SET_CLOCK)||(time_set_mode==TIME_SET_ALARM))) { lcd_setCursor( 8, 0); disp_date(); } if (ope_mode==OPE_TIME_DISP) { lcd_setCursor(0,1); if (sub_info_mode==SUB_INFO_ALARM) disp_alarm_time(); else if (sub_info_mode==SUB_INFO_LOGO) disp_logo(); else if (sub_info_mode==SUB_INFO_IRCODE) disp_ircustomer(); else if (sub_info_mode==SUB_INFO_DATE) disp_date(); else if (sub_info_mode==SUB_INFO_TEMP) disp_temperature(); else if (sub_info_mode==SUB_INFO_ANATEMP) disp_anatemp(); else if (sub_info_mode==SUB_INFO_TIMER) disp_timer(); else if (sub_info_mode==SUB_INFO_CONTRAST) disp_contrast(); else if (sub_info_mode==SUB_INFO_EYE) disp_eye(); else if (sub_info_mode==SUB_INFO_ACCXYZ) disp_acc_xyz(); else if (sub_info_mode==SUB_INFO_ACCXYZ) disp_mpuacc_xyz(); else if (sub_info_mode==SUB_INFO_PRESSURE) disp_pressure(); else if (sub_info_mode==SUB_INFO_RGBCOLOR) disp_rgbcolor(); else if (sub_info_mode==SUB_INFO_PROXIMITY) disp_proximity(); else if (sub_info_mode==SUB_INFO_LUX) disp_lux(); lcd_setCursor( 8, 1); if (sub_info_mode==SUB_INFO_IRCODE) disp_ircode(); else disp_eye(); } } void setup() { pinMode(IR_PIN, INPUT_PULLUP); pinMode(SW_PIN, INPUT_PULLUP); attachInterrupt(IR_PIN-2, IR_event_interrupt, CHANGE); attachInterrupt((SW_PIN-2), sw_push, FALLING); analogReference(INTERNAL); // 1.45V=1023 pinMode(TEMPSNS_VDD_PIN, OUTPUT); // for temperature sensor : VDD pinMode(TEMPSNS_GND_PIN, OUTPUT); // for temperature sensor : GND digitalWrite(TEMPSNS_VDD_PIN, 0); digitalWrite(TEMPSNS_GND_PIN, 0); pinMode(LED_R, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_B, OUTPUT); //pinMode(TONE_PIN, OUTPUT); pinMode(IR_CONT, OUTPUT); //analogWriteFrequency((uint32_t)38 * 1000); //set IR carrier = 38KHz set_rgb(RGB_GREEN); delay(1000); set_rgb(RGB_BLACK); attachIntervalTimerHandler(InterruptHandler1ms); Serial.begin(9600); if (serialMonitor) Serial.println("START"); Wire.begin(); // LCD INIT lcd_cmd( 0b00111000 ); // function set lcd_cmd( 0b00111001 ); // function set lcd_cmd( 0b00000100 ); // EntryModeSet lcd_cmd( 0b00010100 ); // interval osc lcd_cmd( 0b01110000 | (gContrast & 0xF) ); // gContrast Low lcd_cmd( 0b01011100 | ((gContrast >> 4) & 0x3) ); // contast High/icon/power lcd_cmd( 0b01101100 ); // follower control delay( 200 ); lcd_cmd( 0b00111000 ); // function set lcd_cmd( 0b00001100 ); // Display On lcd_cmd( 0b00000001 ); // Clear Display delay( 2 ); lcd_setCGRAM(CG_HEART, heart); lcd_setCGRAM(CG_EYE, eye_center); lcd_setCursor( 0, 0 ); lcd_printStr( " MAENOH!" ); lcd_setCursor( 0, 1 ); disp_logo(); //tone_melody(); delay(2000); err = rtc_init(); currentTime = {17, 10, 22, RTC_WEEK_SUNDAY, 23, 12, 00}; err = rtc_set_time(¤tTime); alarmTime.hour=currentTime.hour; alarmTime.min=currentTime.min+1; rtc_attach_alarm_handler(alarm_handler); err = rtc_set_alarm_time(alarmTime.hour, alarmTime.min); if (alarm_state==ALARM_OFF) rtc_alarm_off(); else rtc_alarm_on(); //setPowerManagementMode(PM_NORMAL_MODE); disp_update(); /* Wire.begin(); Wire.beginTransmission(0x68); // MPU-6050 Gyro sensor Wire.write(0x6B); // Power management register Wire.write(0); // wake up MPU-6050 Wire.endTransmission(); */ if ((sns_accxyz=kx022.init())==0) sub_info_mode = SUB_INFO_ACCXYZ; // else sub_info_mode = SUB_INFO_MPUACCXYZ; if ((sns_pressure=bm1383.init())==0) sub_info_mode = SUB_INFO_PRESSURE; if ((sns_rgbcolor=bh1745nuc.init())==0) sub_info_mode = SUB_INFO_RGBCOLOR; if ((sns_proximity = rpr0521rs.init())==0) sub_info_mode = SUB_INFO_PROXIMITY; /* rtc_attach_constant_period_interrupt_handler(rtcConstantPeriodInterruptHandler); rtc_set_constant_period_interrupt_time(RTC_CONSTANT_PERIOD_TIME_1SECOND); rtc_constant_period_interrupt_on(); */ //setPowerManagementMode(PM_STOP_MODE); //delay(0xFFFFFFFF); // hold STOP mode until receiving IR signal. //setOperationClockMode(CLK_LOW_SPEED_MODE); //setOperationClockMode(CLK_HIGH_SPEED_MODE); ir_receive_start(); // irRemocon_txAEHA( TVOnOff, sizeof(TVOnOff) ); delay( 1000UL ); } //---------------------------------------------------------------------- void loop() { //ir_receive_start(); int color, col_r, col_g, col_b; //setPowerManagementMode(PM_STOP_MODE); //delay(0xFFFFFFFF); // hold STOP mode until receiving IR signal. //if (serialMonitor) Serial.println(ir_getData(), HEX); //Serial.flush(); getIR(); //disp_setting_IrOnOff(); disp_update(); }