前はArduinoでやったけど
→ s.h.log: Arduinoで方位センサ RDCM-802 を試す
今日はRDCM-802というデジタルコンパス(方位センサー)をPileusに取り付けた。
なんか普通に計測できた。0-7で出力するので、45倍するとそのまま360度方位として使える。
最終的には値が変わったときだけ出力するようにしてみた。
#define_BV(BIT)(1<
#defineCOMPASS_D0_BV(4)//DigitalCompassD0PORT_0_4
#defineCOMPASS_D1_BV(2)//DigitalCompassD1PORT_0_2
#defineCOMPASS_D2_BV(0)//DigitalCompassD2PORT_0_0/*getAzimuthfromDigitalCompassonPORT_0*/
charget_azimuth(void){
chard0,d1,d2;
d0=PRT0DR&COMPASS_D0;
d1=PRT0DR&COMPASS_D1;
d2=PRT0DR&COMPASS_D2;
if(d0&&d1&&!d2)return0;//N
elseif(!d0&&d1&&!d2)return1;//NE
elseif(!d0&&d1&&d2)return2;//E
elseif(!d0&&!d1&&d2)return3;//SE
elseif(!d0&&!d1&&!d2)return4;//S
elseif(d0&&!d1&&!d2)return5;//SW
elseif(d0&&!d1&&d2)return6;//W
elseif(d0&&d1&&d2)return7;//NW
return8;//error
}voidmain(){
charazimuth,azimuth_p;
//UARTinit
UART_1_CmdReset();//uartinit
UART_1_IntCntl(UART_1_ENABLE_RX_INT);//enablereceiveinterrupt
UART_1_Start(UART_1_PARITY_NONE);for(;;){
//checkcompass
azimuth=get_azimuth();//digitalcompass
if(azimuth!=azimuth_p){
UART_1_PutChar(azimuth+’0′);
UART_1_CPutString(“¥r¥n”);
}
azimuth_p=azimuth;
}
}