右側のほうのセンサLPC1114FN28 fumiya版
Dependencies: IRM2121_2 Ping mbed HMC6352 Watchdog
Fork of CatPot_SensorRight by
main.cpp@8:52f8023cdb8f, 2015-02-27 (annotated)
- Committer:
- lilac0112_1
- Date:
- Fri Feb 27 04:43:53 2015 +0000
- Revision:
- 8:52f8023cdb8f
- Parent:
- 6:f64989ad4746
- Child:
- 9:c992dfaa77ce
ddddd
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ryuna | 0:182437c14483 | 1 | /* |
ryuna | 1:8e9ee100d854 | 2 | *メインと通信するLPC1114のプログラム() |
ryuna | 1:8e9ee100d854 | 3 | * |
ryuna | 1:8e9ee100d854 | 4 | *現在は両方がmainと通信します. |
ryuna | 1:8e9ee100d854 | 5 | * |
ryuna | 1:8e9ee100d854 | 6 | */ |
ryuna | 0:182437c14483 | 7 | |
ryuna | 0:182437c14483 | 8 | #include "mbed.h" |
ryuna | 2:099a6c81a02e | 9 | |
ryuna | 5:a41471351ae3 | 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 | 2:099a6c81a02e | 16 | |
ryuna | 0:182437c14483 | 17 | #include "IRM2121.h" |
ryuna | 0:182437c14483 | 18 | #include "Ping.h" |
ryuna | 5:a41471351ae3 | 19 | #include "WatchDogTimer.h" |
ryuna | 0:182437c14483 | 20 | |
ryuna | 0:182437c14483 | 21 | #define PING_COUNT 5 //5回に1回にPing処理 |
ryuna | 1:8e9ee100d854 | 22 | #define IR_LEVEL 400 //irのしきい値 |
lilac0112_1 | 8:52f8023cdb8f | 23 | #define I2C_ADDRESS 0xAA+2 // |
ryuna | 1:8e9ee100d854 | 24 | |
ryuna | 1:8e9ee100d854 | 25 | |
ryuna | 1:8e9ee100d854 | 26 | |
ryuna | 2:099a6c81a02e | 27 | IRM2121 Ir[6] = {dp17,dp18,dp24,dp25,dp26,dp28}; |
ryuna | 6:f64989ad4746 | 28 | |
ryuna | 0:182437c14483 | 29 | Ping Ping1(dp1,dp2); |
ryuna | 2:099a6c81a02e | 30 | Ping Ping2(dp4,dp6); |
ryuna | 0:182437c14483 | 31 | DigitalOut Led(LED1); |
ryuna | 0:182437c14483 | 32 | |
ryuna | 0:182437c14483 | 33 | I2CSlave Mbed(dp5,dp27);//sda,scl |
ryuna | 0:182437c14483 | 34 | Serial pc(USBTX,USBRX); |
ryuna | 5:a41471351ae3 | 35 | |
ryuna | 0:182437c14483 | 36 | |
ryuna | 0:182437c14483 | 37 | |
ryuna | 0:182437c14483 | 38 | |
ryuna | 0:182437c14483 | 39 | |
ryuna | 0:182437c14483 | 40 | int main() { |
ryuna | 0:182437c14483 | 41 | |
ryuna | 2:099a6c81a02e | 42 | /*begin SetUp*/ |
ryuna | 0:182437c14483 | 43 | //default Mbed.frequency(); |
ryuna | 1:8e9ee100d854 | 44 | Mbed.address(I2C_ADDRESS); |
ryuna | 5:a41471351ae3 | 45 | Watchdog g; |
ryuna | 5:a41471351ae3 | 46 | g.kick(1.0f);//1秒でWDT発生 |
ryuna | 2:099a6c81a02e | 47 | /*end Setup*/ |
ryuna | 2:099a6c81a02e | 48 | |
ryuna | 2:099a6c81a02e | 49 | /*Count*/ |
ryuna | 2:099a6c81a02e | 50 | uint8_t PingCk = 0; |
lilac0112_1 | 8:52f8023cdb8f | 51 | int i; |
ryuna | 2:099a6c81a02e | 52 | |
ryuna | 0:182437c14483 | 53 | /*Data*/ |
ryuna | 2:099a6c81a02e | 54 | uint8_t PingData[2] = {0}; |
ryuna | 6:f64989ad4746 | 55 | unsigned int ir__data[6] = {0}; |
lilac0112_1 | 8:52f8023cdb8f | 56 | |
ryuna | 1:8e9ee100d854 | 57 | /*State(operate_value etc...)*/ |
ryuna | 1:8e9ee100d854 | 58 | int I2CState; |
ryuna | 1:8e9ee100d854 | 59 | |
ryuna | 0:182437c14483 | 60 | /* I2Cdata*/ |
lilac0112_1 | 8:52f8023cdb8f | 61 | char SendData[6]={0}; |
ryuna | 5:a41471351ae3 | 62 | char AddressData[1] = {0}; |
ryuna | 1:8e9ee100d854 | 63 | |
ryuna | 0:182437c14483 | 64 | |
ryuna | 0:182437c14483 | 65 | while(1) { |
ryuna | 0:182437c14483 | 66 | |
lilac0112_1 | 8:52f8023cdb8f | 67 | /*Ping(圧縮1/1)*/ |
lilac0112_1 | 8:52f8023cdb8f | 68 | /*if(PingCk >= PING_COUNT){ |
lilac0112_1 | 8:52f8023cdb8f | 69 | |
ryuna | 0:182437c14483 | 70 | Ping1.Send(); |
ryuna | 0:182437c14483 | 71 | wait_ms(30); |
ryuna | 2:099a6c81a02e | 72 | PingData[0] = Ping1.Read_cm(); |
lilac0112_1 | 8:52f8023cdb8f | 73 | |
lilac0112_1 | 8:52f8023cdb8f | 74 | if(I2C_ADDRESS==0xAA){ |
lilac0112_1 | 8:52f8023cdb8f | 75 | Ping2.Send(); |
lilac0112_1 | 8:52f8023cdb8f | 76 | wait_ms(30); |
lilac0112_1 | 8:52f8023cdb8f | 77 | PingData[1] = Ping2.Read_cm(); |
lilac0112_1 | 8:52f8023cdb8f | 78 | } |
lilac0112_1 | 8:52f8023cdb8f | 79 | |
lilac0112_1 | 8:52f8023cdb8f | 80 | for(i=0; i < 2; i++){ |
lilac0112_1 | 8:52f8023cdb8f | 81 | |
lilac0112_1 | 8:52f8023cdb8f | 82 | if(PingData[i] > 125) PingData[i] = 125; |
lilac0112_1 | 8:52f8023cdb8f | 83 | |
lilac0112_1 | 8:52f8023cdb8f | 84 | } |
lilac0112_1 | 8:52f8023cdb8f | 85 | |
ryuna | 0:182437c14483 | 86 | PingCk = 0; |
lilac0112_1 | 8:52f8023cdb8f | 87 | }*/ |
lilac0112_1 | 8:52f8023cdb8f | 88 | |
lilac0112_1 | 8:52f8023cdb8f | 89 | /*Ir(圧縮1/10)*/ |
lilac0112_1 | 8:52f8023cdb8f | 90 | for(i=0; i < 6; i++){ |
lilac0112_1 | 8:52f8023cdb8f | 91 | |
lilac0112_1 | 8:52f8023cdb8f | 92 | ir__data[i] = Ir[i].Read(); |
lilac0112_1 | 8:52f8023cdb8f | 93 | |
lilac0112_1 | 8:52f8023cdb8f | 94 | if(ir__data[i] > 1000) ir__data[i] = 1000; |
lilac0112_1 | 8:52f8023cdb8f | 95 | ir__data[i] = ir__data[i] / 10; |
ryuna | 0:182437c14483 | 96 | } |
lilac0112_1 | 8:52f8023cdb8f | 97 | |
ryuna | 1:8e9ee100d854 | 98 | I2CState = Mbed.receive(); |
ryuna | 5:a41471351ae3 | 99 | |
lilac0112_1 | 8:52f8023cdb8f | 100 | switch(I2CState){ |
lilac0112_1 | 8:52f8023cdb8f | 101 | |
ryuna | 0:182437c14483 | 102 | case I2CSlave::ReadAddressed: |
ryuna | 5:a41471351ae3 | 103 | |
lilac0112_1 | 8:52f8023cdb8f | 104 | if(AddressData[0]){ |
lilac0112_1 | 8:52f8023cdb8f | 105 | switch(AddressData[0]){ |
lilac0112_1 | 8:52f8023cdb8f | 106 | case 0x01://ping |
lilac0112_1 | 8:52f8023cdb8f | 107 | SendData[0] = (char)PingData[0]; |
lilac0112_1 | 8:52f8023cdb8f | 108 | SendData[1] = (char)PingData[1]; |
lilac0112_1 | 8:52f8023cdb8f | 109 | Mbed.write(SendData, 2); |
lilac0112_1 | 8:52f8023cdb8f | 110 | break; |
lilac0112_1 | 8:52f8023cdb8f | 111 | case 0x00: |
lilac0112_1 | 8:52f8023cdb8f | 112 | case 0x02://IR |
lilac0112_1 | 8:52f8023cdb8f | 113 | for(i=0; i < 6; i++) SendData[i] = (char)ir__data[i]; |
lilac0112_1 | 8:52f8023cdb8f | 114 | |
lilac0112_1 | 8:52f8023cdb8f | 115 | /*for(i=0; i<6; i++){ |
lilac0112_1 | 8:52f8023cdb8f | 116 | pc.printf("%d ", (char)SendData[i]); |
lilac0112_1 | 8:52f8023cdb8f | 117 | } |
lilac0112_1 | 8:52f8023cdb8f | 118 | pc.printf("\n");*/ |
lilac0112_1 | 8:52f8023cdb8f | 119 | |
lilac0112_1 | 8:52f8023cdb8f | 120 | Mbed.write(SendData, 6); |
lilac0112_1 | 8:52f8023cdb8f | 121 | |
lilac0112_1 | 8:52f8023cdb8f | 122 | break; |
lilac0112_1 | 8:52f8023cdb8f | 123 | default: |
lilac0112_1 | 8:52f8023cdb8f | 124 | break; |
lilac0112_1 | 8:52f8023cdb8f | 125 | } |
lilac0112_1 | 8:52f8023cdb8f | 126 | } |
ryuna | 2:099a6c81a02e | 127 | |
lilac0112_1 | 8:52f8023cdb8f | 128 | AddressData[0] = 0x00; |
ryuna | 0:182437c14483 | 129 | break; |
ryuna | 1:8e9ee100d854 | 130 | case I2CSlave::WriteGeneral: |
ryuna | 5:a41471351ae3 | 131 | Mbed.read(AddressData,1); |
ryuna | 0:182437c14483 | 132 | break; |
ryuna | 1:8e9ee100d854 | 133 | case I2CSlave::WriteAddressed: |
lilac0112_1 | 8:52f8023cdb8f | 134 | Mbed.read(AddressData,1); |
ryuna | 0:182437c14483 | 135 | break; |
ryuna | 0:182437c14483 | 136 | |
ryuna | 0:182437c14483 | 137 | } |
ryuna | 0:182437c14483 | 138 | Led = 0; |
lilac0112_1 | 8:52f8023cdb8f | 139 | |
lilac0112_1 | 8:52f8023cdb8f | 140 | PingCk ++; |
ryuna | 6:f64989ad4746 | 141 | |
ryuna | 0:182437c14483 | 142 | } |
lilac0112_1 | 8:52f8023cdb8f | 143 | } |