[ch3657][ch3657]Hello ;D
" Sa Wat Dee "
This is my project
Arduino Ps2 KeyBoard TV Remote




#include <IRremote.h>
#include <ps2.h>
unsigned char code;
int RECV_PIN = 7; // [ch3586][ch3634] data [ch3586][ch3629][ch3591][ch3605][ch3633][ch3623][ch3619][ch3633][ch3610][ch3619][ch3637][ch3650][ch3617][ch3607] [ch3605][ch3656][ch3629][ch3585][ch3633][ch3610] digitital pin 7
int RECV_POWER = 2; // [ch3586][ch3634][ch3652][ch3615][ch3610][ch3623][ch3585] [ch3586][ch3629][ch3591][ch3605][ch3633][ch3623][ch3619][ch3633][ch3610][ch3619][ch3637][ch3650][ch3617][ch3607] [ch3605][ch3656][ch3629][ch3585][ch3633][ch3610] digital pin 2
int IR_GND = 1; // [ch3586][ch3634][ch3652][ch3615][ch3621][ch3610][ch3586][ch3629][ch3591][ch3627][ch3621][ch3629][ch3604] ir digital pin 1
int LED_1 = 11;
int LED_2 = 12;
int LED_3 = 13;
IRrecv irrecv(RECV_PIN);
IRsend irsend;
decode_results results;
PS2 kbd(5, 4); // Ps2 keyborad data [ch3605][ch3656][ch3629][ch3585][ch3633][ch3610] digital pin 4
// clock [ch3605][ch3656][ch3629][ch3585][ch3633][ch3610] digital pin 5
void kbd_init()
{
char ack;
kbd.write(0xff); // send reset code
ack = kbd.read(); // byte, kbd does self test
ack = kbd.read(); // another ack when self test is done
}
void setup()
{
kbd_init();
irrecv.enableIRIn(); // Start the receiver
pinMode(RECV_POWER,OUTPUT);
digitalWrite(RECV_POWER,LOW);
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1,HIGH);
pinMode(LED_2,OUTPUT);
digitalWrite(LED_2,HIGH);
pinMode(LED_3,OUTPUT);
digitalWrite(LED_3,HIGH);
pinMode(IR_GND,OUTPUT);
digitalWrite(IR_GND,LOW);
keyBoardCode();
}
// Storage for the recorded code
int codeType = -1; // The type of code
unsigned long codeValue; // The code value if not raw
unsigned int rawCodes[RAWBUF]; // The durations if raw
int codeLen; // The length of the code
int toggle = 0; // The RC5/6 toggle state
//[ch3619][ch3633][ch3610]
unsigned long myValue[80];
int myLen[80];
//[ch3626][ch3656][ch3591]
unsigned long sendIrValue;
int sendIrLen;
unsigned char keyboard[80];
// Stores the code for later playback
// Most of this code is just logging
void storeCode(decode_results *results) {
codeType = results->decode_type;
int count = results->rawlen;
if (codeType == UNKNOWN)
{
codeLen = results->rawlen - 1;
for (int i = 1; i <= codeLen; i++) {
if (i % 2) {
rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;
delay(1);}
else {
rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;
delay(1);}}
}else {
if (codeType == NEC) {
if (results->value == REPEAT) {
delay(1);
return;}}
else if (codeType == SONY){delay(1);}
else if (codeType == RC5) {delay(1);}
else if (codeType == RC6) {delay(1);}
else {delay(1);}
codeValue = results->value;
codeLen = results->bits;
}
}
void sendCode(int repeat) {
// code [ch3627][ch3621][ch3633][ch3585][ch3616][ch3634][ch3588][ch3626][ch3656][ch3591]
if (codeType == NEC)
{
if (repeat) {irsend.sendNEC(REPEAT, sendIrLen);}
else { irsend.sendNEC(sendIrValue, sendIrLen);}
}
else if (codeType == SONY){irsend.sendSony(sendIrValue, sendIrLen);}
else if (codeType == RC5 || codeType == RC6)
{
if (!repeat) { toggle = 1 - toggle;}
sendIrValue = sendIrValue & ~(1 << (sendIrLen - 1));
sendIrValue = sendIrValue | (toggle << (sendIrLen - 1));
if (codeType == RC5) { irsend.sendRC5(sendIrValue, sendIrLen);}
else { irsend.sendRC6(sendIrValue, sendIrLen);}
}
else if (codeType == UNKNOWN ) {irsend.sendRaw(rawCodes, sendIrLen, 38);}
}
int lastButtonState;
int buttonState = HIGH;
int recvButton = 1;
int recvState;
int irButton ;
int irState ;
int test;
void loop() {
code = kbd.read();
//keyBoard F1 setup IR
if(code == 0x05){recvButton = 1-recvButton;
irrecv.enableIRIn(); // Re-enable receiver
if(recvButton==0)recvState = 1-recvState;}
///////// [ch3648][ch3611][ch3636][ch3604][ch3611][ch3636][ch3604][ch3585][ch3634][ch3619][ch3607][ch3635][ch3591][ch3634][ch3609] ir recv
if(recvState == 1){
digitalWrite(RECV_POWER,HIGH) ;
digitalWrite(LED_1,LOW);
digitalWrite(IR_GND,HIGH);
GotoSetKeyBoard();}//[ch3605][ch3633][ch3657][ch3591][ch3588][ch3656][ch3634][ch3611][ch3640][ch3656][ch3617]
if(recvState == 0){
digitalWrite(RECV_POWER,LOW) ;
digitalWrite(LED_1,HIGH);
digitalWrite(IR_GND,LOW);
GotoSendIr();} // [ch3626][ch3656][ch3591] code remote
}
//////////////[ch3648][ch3585][ch3655][ch3610] Code Remote [ch3605][ch3634][ch3617][ch3611][ch3640][ch3656][ch3617]////////////////////
void GotoSetKeyBoard()
{
for(int i = 0; i < 80;i++){
if(code == keyboard[i] ){
myValue[i] = codeValue;
myLen[i] = codeLen;
}}
// [ch3629][ch3656][ch3634][ch3609][ch3588][ch3656][ch3634] Remote
if (irrecv.decode(&results)) {
digitalWrite(LED_1, LOW);
storeCode(&results);
delay(1);
irrecv.resume(); // resume receiver
digitalWrite(LED_1, HIGH);}
}
////////////////////// [ch3626][ch3656][ch3591] code remote ////////////////////////////
void GotoSendIr()
{
/// [ch3585][ch3604][ch3611][ch3640][ch3656][ch3617][ch3626][ch3656][ch3591] Remote
for(int i = 0; i < 80;i++){
if(code == keyboard[i] ){
irButton = 1-irButton;
if(irButton == 0)irState = 1;
sendIrValue = myValue[i];
sendIrLen = myLen[i];
}}
/// [ch3626][ch3656][ch3591][ch3588][ch3656][ch3634] Remote
if (irState == 1 ) {
digitalWrite(LED_1, LOW);
sendCode(LOW);
digitalWrite(LED_1, HIGH);
delay(100); // Wait a bit between retransmissions
irState = 0;}
}
////////////////// keyBoardCode//////////////////
void keyBoardCode()
{
keyboard[0] = 0x075; // up
keyboard[1] = 0x072; // down
keyboard[2] = 0x06B; // left
keyboard[3] = 0x074; // right
keyboard[4] = 0x070; // lns
keyboard[5] = 0x071; // Del
keyboard[6] = 0x06C; // HOME
keyboard[7] = 0x069; // End
keyboard[8] = 0x07D; // P up
keyboard[9] = 0x07A; // P down
keyboard[10] = 0x16; // 1
keyboard[11] = 0x1E; // 2
keyboard[12] = 0x26; // 3
keyboard[13] = 0x25; // 4
keyboard[14] = 0x2E; // 5
keyboard[15] = 0x36; // 6
keyboard[16] = 0x3D; // 7
keyboard[17] = 0x3E; // 8
keyboard[18] = 0x46; // 9
keyboard[19] = 0x45; // 0
keyboard[20] = 0x4E; // -
keyboard[21] = 0x55; // +
keyboard[22] = 0x66; // back
keyboard[23] = 0x0E; // ~
}