前はArduinoでやったけど

s.h.log: Arduinoで方位センサ RDCM-802 を試す

今日はRDCM-802というデジタルコンパス(方位センサー)をPileusに取り付けた。

これ

方位センサー

でもはんだづける場所が無かったので

Digital Compass on PileusDigital Compass on Pileus

こうやって



んで電源は3端子レギュレータから直接取った。

Digital Compass on Pileus

なんか普通に計測できた。0-7で出力するので、45倍するとそのまま360度方位として使える。

Digital Compass on Pileus

最終的には値が変わったときだけ出力するようにしてみた。

#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;

}

}