右側のほうのセンサLPC1114FN28
Dependencies: IRM2121 Ping interruptin_mod mbed
右側(仮)のセンサデータ処理等を行うプログラム
まだまだ改良の余地ありり.
main.cpp@0:182437c14483, 2014-12-06 (annotated)
- Committer:
- ryuna
- Date:
- Sat Dec 06 07:42:33 2014 +0000
- Revision:
- 0:182437c14483
Sensor catch and send to main .
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ryuna | 0:182437c14483 | 1 | /* |
ryuna | 0:182437c14483 | 2 | メインと通信するLPC1114のプログラム() |
ryuna | 0:182437c14483 | 3 | |
ryuna | 0:182437c14483 | 4 | 現在は両方がmainと通信します. |
ryuna | 0:182437c14483 | 5 | |
ryuna | 0:182437c14483 | 6 | |
ryuna | 0:182437c14483 | 7 | */ |
ryuna | 0:182437c14483 | 8 | |
ryuna | 0:182437c14483 | 9 | #include "mbed.h" |
ryuna | 0:182437c14483 | 10 | |
ryuna | 0:182437c14483 | 11 | #define SYSAHBCLKDIV_Val 0x00000001 // Reset: 0x001 |
ryuna | 0:182437c14483 | 12 | #define CLOCK_SETUP 1 // デフォルト=1 |
ryuna | 0:182437c14483 | 13 | #define SYSPLLCTRL_Val 0x00000023 // デフォルト=23 Reset: 0x000 |
ryuna | 0:182437c14483 | 14 | #define SYSPLLCLKSEL_Val 0x00000001 // デフォルト=0 Reset: 0x000 |
ryuna | 0:182437c14483 | 15 | #define MAINCLKSEL_Val 0x00000003 // デフォルト=3 Reset: 0x000 |
ryuna | 0:182437c14483 | 16 | |
ryuna | 0:182437c14483 | 17 | #include "IRM2121.h" |
ryuna | 0:182437c14483 | 18 | #include "Ping.h" |
ryuna | 0:182437c14483 | 19 | |
ryuna | 0:182437c14483 | 20 | #define PING_COUNT 5 //5回に1回にPing処理 |
ryuna | 0:182437c14483 | 21 | #define LINE_LINE 0.45 //すごく雑 |
ryuna | 0:182437c14483 | 22 | |
ryuna | 0:182437c14483 | 23 | IRM2121 Ir[6] = {dp17,dp18,dp24,dp25,dp26,dp28}; |
ryuna | 0:182437c14483 | 24 | Ping Ping1(dp1,dp2); |
ryuna | 0:182437c14483 | 25 | Ping Ping2(dp4,dp6); |
ryuna | 0:182437c14483 | 26 | AnalogIn Line[4] ={dp9,dp10,dp11,dp13}; |
ryuna | 0:182437c14483 | 27 | DigitalOut Led(LED1); |
ryuna | 0:182437c14483 | 28 | |
ryuna | 0:182437c14483 | 29 | I2CSlave Mbed(dp5,dp27);//sda,scl |
ryuna | 0:182437c14483 | 30 | Serial pc(USBTX,USBRX); |
ryuna | 0:182437c14483 | 31 | |
ryuna | 0:182437c14483 | 32 | |
ryuna | 0:182437c14483 | 33 | uint8_t IrMovig_ave(uint8_t num, int data){ |
ryuna | 0:182437c14483 | 34 | static unsigned int sum[6]; |
ryuna | 0:182437c14483 | 35 | static unsigned temp[6][5]; |
ryuna | 0:182437c14483 | 36 | |
ryuna | 0:182437c14483 | 37 | sum[num] -= temp[num][4]; |
ryuna | 0:182437c14483 | 38 | sum[num] += data; |
ryuna | 0:182437c14483 | 39 | |
ryuna | 0:182437c14483 | 40 | temp[num][4] = temp[num][3]; |
ryuna | 0:182437c14483 | 41 | temp[num][3] = temp[num][2]; |
ryuna | 0:182437c14483 | 42 | temp[num][2] = temp[num][1]; |
ryuna | 0:182437c14483 | 43 | temp[num][1] = temp[num][0]; |
ryuna | 0:182437c14483 | 44 | temp[num][0] = data; |
ryuna | 0:182437c14483 | 45 | |
ryuna | 0:182437c14483 | 46 | return sum[data]/5; |
ryuna | 0:182437c14483 | 47 | } |
ryuna | 0:182437c14483 | 48 | |
ryuna | 0:182437c14483 | 49 | |
ryuna | 0:182437c14483 | 50 | |
ryuna | 0:182437c14483 | 51 | void ResetSet(uint8_t *PingCk){ |
ryuna | 0:182437c14483 | 52 | |
ryuna | 0:182437c14483 | 53 | Led = 1;//周回の初め |
ryuna | 0:182437c14483 | 54 | PingCk ++; |
ryuna | 0:182437c14483 | 55 | |
ryuna | 0:182437c14483 | 56 | } |
ryuna | 0:182437c14483 | 57 | |
ryuna | 0:182437c14483 | 58 | |
ryuna | 0:182437c14483 | 59 | |
ryuna | 0:182437c14483 | 60 | int main() { |
ryuna | 0:182437c14483 | 61 | |
ryuna | 0:182437c14483 | 62 | //default Mbed.frequency(); |
ryuna | 0:182437c14483 | 63 | Mbed.address(0x0A); |
ryuna | 0:182437c14483 | 64 | /*Data*/ |
ryuna | 0:182437c14483 | 65 | uint8_t IrMemory[6] = {0};//IRのデータ保管 |
ryuna | 0:182437c14483 | 66 | uint8_t PingMemory[2] = {0}; |
ryuna | 0:182437c14483 | 67 | unsigned int LineMemory[4] = {0}; |
ryuna | 0:182437c14483 | 68 | |
ryuna | 0:182437c14483 | 69 | /*Flag*/ |
ryuna | 0:182437c14483 | 70 | uint8_t LineFlag;//配置 - - - - Line[3] Line[2] Line[1] Line[0] |
ryuna | 0:182437c14483 | 71 | |
ryuna | 0:182437c14483 | 72 | /*Count*/ |
ryuna | 0:182437c14483 | 73 | uint8_t PingCk = 0; |
ryuna | 0:182437c14483 | 74 | |
ryuna | 0:182437c14483 | 75 | /* I2Cdata*/ |
ryuna | 0:182437c14483 | 76 | char SendData[9]={0}; |
ryuna | 0:182437c14483 | 77 | |
ryuna | 0:182437c14483 | 78 | while(1) { |
ryuna | 0:182437c14483 | 79 | |
ryuna | 0:182437c14483 | 80 | ResetSet(&PingCk); |
ryuna | 0:182437c14483 | 81 | Ir[0].Set(); |
ryuna | 0:182437c14483 | 82 | Ir[1].Set(); |
ryuna | 0:182437c14483 | 83 | Ir[2].Set(); |
ryuna | 0:182437c14483 | 84 | Ir[3].Set(); |
ryuna | 0:182437c14483 | 85 | Ir[4].Set(); |
ryuna | 0:182437c14483 | 86 | Ir[5].Set(); |
ryuna | 0:182437c14483 | 87 | |
ryuna | 0:182437c14483 | 88 | wait_ms(30);//wait値は最適値を探す必要がある. |
ryuna | 0:182437c14483 | 89 | |
ryuna | 0:182437c14483 | 90 | IrMemory[0] = IrMovig_ave(0,Ir[0].Read()); |
ryuna | 0:182437c14483 | 91 | IrMemory[1] = IrMovig_ave(1,Ir[1].Read()); |
ryuna | 0:182437c14483 | 92 | IrMemory[2] = IrMovig_ave(2,Ir[2].Read()); |
ryuna | 0:182437c14483 | 93 | IrMemory[3] = IrMovig_ave(3,Ir[3].Read()); |
ryuna | 0:182437c14483 | 94 | IrMemory[4] = IrMovig_ave(4,Ir[4].Read()); |
ryuna | 0:182437c14483 | 95 | IrMemory[5] = IrMovig_ave(5,Ir[5].Read()); |
ryuna | 0:182437c14483 | 96 | |
ryuna | 0:182437c14483 | 97 | /*大きい二つだけでいい気がする.*/ |
ryuna | 0:182437c14483 | 98 | if(PingCk >= PING_COUNT){ |
ryuna | 0:182437c14483 | 99 | Ping1.Send(); |
ryuna | 0:182437c14483 | 100 | Ping2.Send(); |
ryuna | 0:182437c14483 | 101 | wait_ms(30); |
ryuna | 0:182437c14483 | 102 | PingMemory[0] = Ping1.Read_cm(); |
ryuna | 0:182437c14483 | 103 | PingMemory[1] = Ping2.Read_cm(); |
ryuna | 0:182437c14483 | 104 | PingCk = 0; |
ryuna | 0:182437c14483 | 105 | } |
ryuna | 0:182437c14483 | 106 | |
ryuna | 0:182437c14483 | 107 | LineMemory[0] = Line[0]; |
ryuna | 0:182437c14483 | 108 | LineMemory[1] = Line[1]; |
ryuna | 0:182437c14483 | 109 | LineMemory[2] = Line[2]; |
ryuna | 0:182437c14483 | 110 | LineMemory[3] = Line[3]; |
ryuna | 0:182437c14483 | 111 | |
ryuna | 0:182437c14483 | 112 | LineFlag = ((int)(LineMemory[3]+LINE_LINE))*8 + |
ryuna | 0:182437c14483 | 113 | ((int)(LineMemory[2]+LINE_LINE))*4 + |
ryuna | 0:182437c14483 | 114 | ((int)(LineMemory[1]+LINE_LINE))*2 + |
ryuna | 0:182437c14483 | 115 | ((int)(LineMemory[0]+LINE_LINE))*1; |
ryuna | 0:182437c14483 | 116 | |
ryuna | 0:182437c14483 | 117 | SendData[0] = (char)IrMemory[0]; |
ryuna | 0:182437c14483 | 118 | SendData[1] = (char)IrMemory[1]; |
ryuna | 0:182437c14483 | 119 | SendData[2] = (char)IrMemory[2]; |
ryuna | 0:182437c14483 | 120 | SendData[3] = (char)IrMemory[3]; |
ryuna | 0:182437c14483 | 121 | SendData[4] = (char)IrMemory[4]; |
ryuna | 0:182437c14483 | 122 | SendData[5] = (char)IrMemory[5]; |
ryuna | 0:182437c14483 | 123 | SendData[6] = (char)PingMemory[0]; |
ryuna | 0:182437c14483 | 124 | SendData[7] = (char)PingMemory[1]; |
ryuna | 0:182437c14483 | 125 | SendData[8] = (char)LineFlag; |
ryuna | 0:182437c14483 | 126 | |
ryuna | 0:182437c14483 | 127 | switch(Mbed.receive()){ |
ryuna | 0:182437c14483 | 128 | case I2CSlave::ReadAddressed: |
ryuna | 0:182437c14483 | 129 | Mbed.write(SendData, 9); // Includes null char |
ryuna | 0:182437c14483 | 130 | break; |
ryuna | 0:182437c14483 | 131 | case I2CSlave::WriteGeneral: |
ryuna | 0:182437c14483 | 132 | break; |
ryuna | 0:182437c14483 | 133 | case I2CSlave::WriteAddressed: |
ryuna | 0:182437c14483 | 134 | break; |
ryuna | 0:182437c14483 | 135 | |
ryuna | 0:182437c14483 | 136 | } |
ryuna | 0:182437c14483 | 137 | |
ryuna | 0:182437c14483 | 138 | Led = 0; |
ryuna | 0:182437c14483 | 139 | |
ryuna | 0:182437c14483 | 140 | } |
ryuna | 0:182437c14483 | 141 | } |