#define ADD 0x00
int IR_S = 8; //接arduino 8號引腳
void setup()
{
pinMode(IR_S, OUTPUT);
Serial.begin(9600); // 9600 波特率
}
void loop()
{
uint8_t dat,temp;
if ( Serial.available()) {
temp = Serial.read();//?
IR_Send38KHZ(280,1);//發送9ms的起始碼
IR_Send38KHZ(140,0);//發送4.5ms的結果碼
IR_Sendcode(ADD);//用戶識別碼
dat=~ADD;
IR_Sendcode(dat);//用戶識別碼反嗎
IR_Sendcode(temp);//操作碼
dat=~temp;
IR_Sendcode(dat);//操作碼反碼
IR_Send38KHZ(21,1);//發送結束碼
}
delay(200);
}
void IR_Send38KHZ(int x,int y) //產生38KHZ紅外脈沖
{
for(int i=0;i<x;i++)//15=386US
{
if(y==1)
{
digitalWrite(IR_S,1);
delayMicroseconds(9);
digitalWrite(IR_S,0);
delayMicroseconds(9);
}
else
{
digitalWrite(IR_S,0);
delayMicroseconds(20);
}
}
}
void IR_Sendcode(uint8_t x) //
{
for(int i=0;i<8;i++)
{
if((x&0x01)==0x01)
{
IR_Send38KHZ(23,1);
IR_Send38KHZ(64,0);
}
else
{
IR_Send38KHZ(23,1);
IR_Send38KHZ(21,0);
}
x=x>>1;
}
} |