解碼原理,利用arduino的微秒函數,通過端口中斷(上升源,下降源),得到時間,就可以解碼波形
void subir_decode(void)
{
volatile static unsigned long timerf,timerf1,timerf2;
volatile static unsigned long wcdata_decode,bkdata;
volatile static u8 wcshift,bit_enable_rx ;
timerf2 = micros() ;
timerf = 0 ;
//digitalWrite(LED_BLUE, !digitalRead(LED_BLUE));
if(timerf2>timerf1)
{
timerf = timerf2-timerf1 ;
}
timerf1 = timerf2 ;
if((timerf>5000)&&(timerf<20000))
{
// digitalWrite(LED_BLUE, !digitalRead(LED_BLUE));
//Serial.write(timerf/100);
wcshift = 31 ;
// wcdata_decode = 0x00 ;
}
else
{
if(timerf<1800)
{
wcdata_decode = wcdata_decode&0xfffffffe ;
}
else
{
wcdata_decode = wcdata_decode|0x00000001 ;
}
if(wcshift>0)
{
wcshift-- ;
wcdata_decode = wcdata_decode<<1 ;
}
else
{
bfirok = 1 ;
wcirdecode = wcdata_decode ;
bkdata = wcdata_decode ;
wcshift = 255 ;
// Serial.write((wcdata_decode&0x00ff0000)>>16);
// Serial.write((wcdata_decode&0x0000ff00)>>8);
// Serial.write((wcdata_decode&0x000000ff));
}
}
}
|