/******************************************************************/   
//    FILE        赤外線リモコン送信                    
//    DATE        :Tue, Jan 10, 2025                                     
//    DESCRIPTION : 赤外線リモコン送信 TLN105B                  
//                                                                       
//    CPU TYPE    : Arduino UNO                                          
//                                      					by Chiyabo                         
//    This file is generated by Renesas Project Generator.               
//                                                                       
/******************************************************************/   
                                                                                               
#include < IRremote.hpp > // include the library                                                   
                                                                                               
#define BAUDRATE 9600                                                                          
#define SEND_IrDa_PIN 4                                                                        
#define ARW_PIN1 A0                                                                            
#define ARW_PIN2 A1                                                                            
#define ARW_PIN4 A2                                                                            
#define ARW_PIN8 A3                                                                            
#define CRW_PIN1 5                                                                             
#define CRW_PIN2 6                                                                             
#define CRW_PIN4 7                                                                             
#define CRW_PIN8 8                                                                             
#define BUTTON_PIN 12                                                                          
                                                                                               
uint8_t OutAddress ;                                                                           
uint8_t OutCommand ;                                                                           
                                                                                               
uint8_t sRepeats = 0 ;    // Repeet Num                                                        
                                                                                               
// aAddress                                                           					       
const unsigned char AddressSel[ ] = { 0x40, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90,
                                      0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0x43
                                    } ;                               					       
// Command                                                            					       
const unsigned char CommandSel[ ] = { 0x10, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
                                      0x1B, 0x1F, 0x1A, 0x1E, 0x1C, 0x52
                                    } ;                               					       
void setup( ){                                                                                 
    Serial.begin( BAUDRATE ) ;                                                                 
    pinMode( ARW_PIN1, INPUT_PULLUP ) ;                                                          
    pinMode( ARW_PIN2, INPUT_PULLUP ) ;                                                        
    pinMode( ARW_PIN4, INPUT_PULLUP ) ;                                                        
    pinMode( ARW_PIN8, INPUT_PULLUP ) ;                                                        
    pinMode( CRW_PIN1, INPUT_PULLUP ) ;                                                          
    pinMode( CRW_PIN2, INPUT_PULLUP ) ;                                                        
    pinMode( CRW_PIN4, INPUT_PULLUP ) ;                                                        
    pinMode( CRW_PIN8, INPUT_PULLUP ) ;                                                        
    pinMode( BUTTON_PIN, INPUT_PULLUP ) ;                                                      
                                                                                               
    IrSender.begin( SEND_IrDa_PIN ) ;                                                          
}                                                                                              
                                                                                               
void loop( ){                                                                                  
    unsigned char AddressNo = 0 ;                                                              
    unsigned char CommandNo = 0 ;                                                              
                                                                                               
    if( digitalRead( ARW_PIN1 ) == LOW ){                                                      
        AddressNo = ( AddressNo + 1 ) ;                                                        
    }                                                                                          
    if( digitalRead( ARW_PIN2 ) == LOW ){                                                      
        AddressNo = ( AddressNo + 2 ) ;                                                        
    }                                                                                          
    if( digitalRead( ARW_PIN4 ) == LOW ){                                                      
        AddressNo = ( AddressNo + 4 ) ;                                                        
    }                                                                                          
    if( digitalRead( ARW_PIN8 ) == LOW ){                                                      
        AddressNo = ( AddressNo + 8 ) ;                                                        
    }                                                                                              
    OutAddress =  AddressSel[ AddressNo ] ;                                                    
    
    
    if( digitalRead( CRW_PIN1 ) == LOW ){                                                       
        CommandNo = ( CommandNo + 1 ) ;                                                        
    }                                                                                          
    if( digitalRead( CRW_PIN2 ) == LOW ){                                                       
        CommandNo = ( CommandNo + 2 ) ;                                                        
    }                                                                                          
    if( digitalRead( CRW_PIN4 ) == LOW ){                                                       
        CommandNo = ( CommandNo + 4 ) ;                                                        
    }                                                                                          
    if( digitalRead( CRW_PIN8 ) == LOW ){                                                       
        CommandNo = ( CommandNo + 8 ) ;                                                        
    }                                                                                              
    OutCommand =  CommandSel[ CommandNo ] ;                                                    
                                                                                                   
    // Receiver output for the first loop must be: Protocol=NEC Address=0x102 
    //Command=0x34 Raw-Data=0xCB340102 (32 bits)
    if( digitalRead( BUTTON_PIN ) == LOW ){                                                    
        delay(10) ;    //10msWait                                                                
        if( digitalRead( BUTTON_PIN ) == LOW ){                                                
            Serial.println( "Button_On" ) ;                                                        
            IrSender.sendNEC( OutAddress, OutCommand, sRepeats ) ;                               
            Serial.println( OutAddress, HEX ) ;                                                    
            Serial.println( OutCommand, HEX ) ;                                                  
            while( digitalRead( BUTTON_PIN ) == LOW ) ;   //HIGHになるまで待つ      
        }                                                                                      
    }                                                                                          
    // delay must be greater than 5 ms (RECORD_GAP_MICROS), 
    //otherwise the receiver sees it as one long signal
    delay( 100 ) ;                                                                               
}