右側のほうのセンサLPC1114FN28

Dependencies:   IRM2121 Ping interruptin_mod mbed

右側(仮)のセンサデータ処理等を行うプログラム

まだまだ改良の余地ありり.

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?

UserRevisionLine numberNew 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 }