![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
右側のほうのセンサLPC1114FN28
Dependencies: IRM2121 Ping interruptin_mod mbed
右側(仮)のセンサデータ処理等を行うプログラム
まだまだ改良の余地ありり.
main.cpp
- Committer:
- ryuna
- Date:
- 2014-12-06
- Revision:
- 0:182437c14483
File content as of revision 0:182437c14483:
/* メインと通信するLPC1114のプログラム() 現在は両方がmainと通信します. */ #include "mbed.h" #define SYSAHBCLKDIV_Val 0x00000001 // Reset: 0x001 #define CLOCK_SETUP 1 // デフォルト=1 #define SYSPLLCTRL_Val 0x00000023 // デフォルト=23 Reset: 0x000 #define SYSPLLCLKSEL_Val 0x00000001 // デフォルト=0 Reset: 0x000 #define MAINCLKSEL_Val 0x00000003 // デフォルト=3 Reset: 0x000 #include "IRM2121.h" #include "Ping.h" #define PING_COUNT 5 //5回に1回にPing処理 #define LINE_LINE 0.45 //すごく雑 IRM2121 Ir[6] = {dp17,dp18,dp24,dp25,dp26,dp28}; Ping Ping1(dp1,dp2); Ping Ping2(dp4,dp6); AnalogIn Line[4] ={dp9,dp10,dp11,dp13}; DigitalOut Led(LED1); I2CSlave Mbed(dp5,dp27);//sda,scl Serial pc(USBTX,USBRX); uint8_t IrMovig_ave(uint8_t num, int data){ static unsigned int sum[6]; static unsigned temp[6][5]; sum[num] -= temp[num][4]; sum[num] += data; temp[num][4] = temp[num][3]; temp[num][3] = temp[num][2]; temp[num][2] = temp[num][1]; temp[num][1] = temp[num][0]; temp[num][0] = data; return sum[data]/5; } void ResetSet(uint8_t *PingCk){ Led = 1;//周回の初め PingCk ++; } int main() { //default Mbed.frequency(); Mbed.address(0x0A); /*Data*/ uint8_t IrMemory[6] = {0};//IRのデータ保管 uint8_t PingMemory[2] = {0}; unsigned int LineMemory[4] = {0}; /*Flag*/ uint8_t LineFlag;//配置 - - - - Line[3] Line[2] Line[1] Line[0] /*Count*/ uint8_t PingCk = 0; /* I2Cdata*/ char SendData[9]={0}; while(1) { ResetSet(&PingCk); Ir[0].Set(); Ir[1].Set(); Ir[2].Set(); Ir[3].Set(); Ir[4].Set(); Ir[5].Set(); wait_ms(30);//wait値は最適値を探す必要がある. IrMemory[0] = IrMovig_ave(0,Ir[0].Read()); IrMemory[1] = IrMovig_ave(1,Ir[1].Read()); IrMemory[2] = IrMovig_ave(2,Ir[2].Read()); IrMemory[3] = IrMovig_ave(3,Ir[3].Read()); IrMemory[4] = IrMovig_ave(4,Ir[4].Read()); IrMemory[5] = IrMovig_ave(5,Ir[5].Read()); /*大きい二つだけでいい気がする.*/ if(PingCk >= PING_COUNT){ Ping1.Send(); Ping2.Send(); wait_ms(30); PingMemory[0] = Ping1.Read_cm(); PingMemory[1] = Ping2.Read_cm(); PingCk = 0; } LineMemory[0] = Line[0]; LineMemory[1] = Line[1]; LineMemory[2] = Line[2]; LineMemory[3] = Line[3]; LineFlag = ((int)(LineMemory[3]+LINE_LINE))*8 + ((int)(LineMemory[2]+LINE_LINE))*4 + ((int)(LineMemory[1]+LINE_LINE))*2 + ((int)(LineMemory[0]+LINE_LINE))*1; SendData[0] = (char)IrMemory[0]; SendData[1] = (char)IrMemory[1]; SendData[2] = (char)IrMemory[2]; SendData[3] = (char)IrMemory[3]; SendData[4] = (char)IrMemory[4]; SendData[5] = (char)IrMemory[5]; SendData[6] = (char)PingMemory[0]; SendData[7] = (char)PingMemory[1]; SendData[8] = (char)LineFlag; switch(Mbed.receive()){ case I2CSlave::ReadAddressed: Mbed.write(SendData, 9); // Includes null char break; case I2CSlave::WriteGeneral: break; case I2CSlave::WriteAddressed: break; } Led = 0; } }