Team DIANA
/
can_prove
Joystick commands can publisher
main.cpp@6:7afa4c3c74ca, 2019-04-16 (annotated)
- Committer:
- stebonicelli
- Date:
- Tue Apr 16 09:00:35 2019 +0000
- Revision:
- 6:7afa4c3c74ca
- Parent:
- 5:1fa56bf23f8a
button combinations
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gidiana | 0:0da0fd430e20 | 1 | #include "mbed.h" //5.4.7 (144) |
gidiana | 0:0da0fd430e20 | 2 | |
gidiana | 0:0da0fd430e20 | 3 | const PinName can1rxPins[] = {PA_11}; |
gidiana | 0:0da0fd430e20 | 4 | const PinName can1txPins[] = {PA_12}; |
stebonicelli | 1:1dc44ef7308a | 5 | const PinName can2rxPins[] = {PB_5}; |
stebonicelli | 1:1dc44ef7308a | 6 | const PinName can2txPins[] = {PB_6}; |
gidiana | 0:0da0fd430e20 | 7 | |
gidiana | 0:0da0fd430e20 | 8 | //CAN1 |
gidiana | 0:0da0fd430e20 | 9 | //0,0=OK 0,1=OK 0,2=OK 1,0=OK 1,1=OK 1,2=OK 2,0=OK 2,1=OK 2,2=OK |
gidiana | 0:0da0fd430e20 | 10 | //CAN2 |
gidiana | 0:0da0fd430e20 | 11 | //0,0=RX_OK 0,1=OK 1,0=RX_OK 1,1=OK |
gidiana | 0:0da0fd430e20 | 12 | |
stebonicelli | 1:1dc44ef7308a | 13 | CAN can(can1rxPins[0], can1txPins[0]); |
stebonicelli | 1:1dc44ef7308a | 14 | CAN can1(can2rxPins[0], can2txPins[0]); |
gidiana | 0:0da0fd430e20 | 15 | |
gidiana | 0:0da0fd430e20 | 16 | //UART1, Tx, Rx (Debug) |
gidiana | 0:0da0fd430e20 | 17 | DigitalOut led1(LED1); |
stebonicelli | 1:1dc44ef7308a | 18 | DigitalIn button(USER_BUTTON); |
gidiana | 0:0da0fd430e20 | 19 | |
gidiana | 0:0da0fd430e20 | 20 | |
gidiana | 0:0da0fd430e20 | 21 | Thread sendThread(osPriorityAboveNormal, 2048); |
gidiana | 0:0da0fd430e20 | 22 | Thread canrx; |
gidiana | 0:0da0fd430e20 | 23 | CANMessage messageIn; |
gidiana | 0:0da0fd430e20 | 24 | CANMessage messageOut; |
gidiana | 0:0da0fd430e20 | 25 | |
gidiana | 4:48199bc5065f | 26 | AnalogIn xin(A1); |
gidiana | 4:48199bc5065f | 27 | AnalogIn yin(A0); |
stebonicelli | 1:1dc44ef7308a | 28 | |
gidiana | 5:1fa56bf23f8a | 29 | DigitalIn b1(D12); |
gidiana | 5:1fa56bf23f8a | 30 | DigitalIn b2(D11); |
gidiana | 5:1fa56bf23f8a | 31 | DigitalIn b3(D10); |
gidiana | 5:1fa56bf23f8a | 32 | DigitalIn b4(D9); |
gidiana | 5:1fa56bf23f8a | 33 | DigitalIn b5(D8); |
gidiana | 5:1fa56bf23f8a | 34 | DigitalIn b6(D7); |
gidiana | 5:1fa56bf23f8a | 35 | DigitalIn b7(D6); |
gidiana | 5:1fa56bf23f8a | 36 | DigitalIn b8(D5); |
gidiana | 5:1fa56bf23f8a | 37 | |
stebonicelli | 1:1dc44ef7308a | 38 | char payload[] = {0,0,0,0}; |
stebonicelli | 1:1dc44ef7308a | 39 | int id = 0x020; |
stebonicelli | 1:1dc44ef7308a | 40 | |
gidiana | 0:0da0fd430e20 | 41 | void sendMessage() |
gidiana | 0:0da0fd430e20 | 42 | { |
stebonicelli | 2:8dbcdac69f61 | 43 | if(xin < 0.2f) |
stebonicelli | 2:8dbcdac69f61 | 44 | payload[0] = 1; |
stebonicelli | 2:8dbcdac69f61 | 45 | else if(xin > 0.8f) |
stebonicelli | 2:8dbcdac69f61 | 46 | payload[0] = 2; |
stebonicelli | 2:8dbcdac69f61 | 47 | else |
stebonicelli | 2:8dbcdac69f61 | 48 | payload[0] = 0; |
stebonicelli | 2:8dbcdac69f61 | 49 | |
stebonicelli | 2:8dbcdac69f61 | 50 | id = 0x020; |
stebonicelli | 2:8dbcdac69f61 | 51 | |
stebonicelli | 1:1dc44ef7308a | 52 | int status = can.write(CANMessage(id, payload, 4)); |
gidiana | 4:48199bc5065f | 53 | wait(0.01); |
gidiana | 4:48199bc5065f | 54 | printf("Send status X: %d\r\n", status); |
stebonicelli | 2:8dbcdac69f61 | 55 | |
stebonicelli | 2:8dbcdac69f61 | 56 | if(yin < 0.2f) |
stebonicelli | 6:7afa4c3c74ca | 57 | payload[0] = 2; |
stebonicelli | 2:8dbcdac69f61 | 58 | else if(yin > 0.8f) |
stebonicelli | 6:7afa4c3c74ca | 59 | payload[0] = 1; |
stebonicelli | 2:8dbcdac69f61 | 60 | else |
stebonicelli | 2:8dbcdac69f61 | 61 | payload[0] = 0; |
stebonicelli | 2:8dbcdac69f61 | 62 | |
stebonicelli | 2:8dbcdac69f61 | 63 | id = 0x010; |
stebonicelli | 2:8dbcdac69f61 | 64 | |
gidiana | 4:48199bc5065f | 65 | status = can.write(CANMessage(id, payload, 4)); |
gidiana | 4:48199bc5065f | 66 | wait(0.01); |
gidiana | 4:48199bc5065f | 67 | printf("Send status Y: %d\r\n\n", status); |
gidiana | 5:1fa56bf23f8a | 68 | |
gidiana | 5:1fa56bf23f8a | 69 | if(b5==0) |
gidiana | 5:1fa56bf23f8a | 70 | { |
gidiana | 5:1fa56bf23f8a | 71 | payload[0]=1; |
stebonicelli | 6:7afa4c3c74ca | 72 | if(b8) |
stebonicelli | 6:7afa4c3c74ca | 73 | id = 0x030; |
stebonicelli | 6:7afa4c3c74ca | 74 | else |
stebonicelli | 6:7afa4c3c74ca | 75 | id=0x070; |
gidiana | 5:1fa56bf23f8a | 76 | status = can.write(CANMessage(id, payload, 4)); |
gidiana | 5:1fa56bf23f8a | 77 | printf("Send status linup: %d\r\n\n", status); |
gidiana | 5:1fa56bf23f8a | 78 | wait(0.01); |
gidiana | 5:1fa56bf23f8a | 79 | } |
gidiana | 5:1fa56bf23f8a | 80 | else if(b7==0) |
gidiana | 5:1fa56bf23f8a | 81 | { |
gidiana | 5:1fa56bf23f8a | 82 | payload[0]=2; |
stebonicelli | 6:7afa4c3c74ca | 83 | if(b8) |
stebonicelli | 6:7afa4c3c74ca | 84 | id = 0x030; |
stebonicelli | 6:7afa4c3c74ca | 85 | else |
stebonicelli | 6:7afa4c3c74ca | 86 | id=0x070; |
gidiana | 5:1fa56bf23f8a | 87 | status = can.write(CANMessage(id, payload, 4)); |
gidiana | 5:1fa56bf23f8a | 88 | printf("Send status linDown: %d\r\n\n", status); |
gidiana | 5:1fa56bf23f8a | 89 | wait(0.01); |
gidiana | 5:1fa56bf23f8a | 90 | } |
gidiana | 5:1fa56bf23f8a | 91 | else if (b5==1 && b7==1) |
gidiana | 5:1fa56bf23f8a | 92 | { |
gidiana | 5:1fa56bf23f8a | 93 | payload[0]=0; |
stebonicelli | 6:7afa4c3c74ca | 94 | if(b8) |
stebonicelli | 6:7afa4c3c74ca | 95 | id = 0x030; |
stebonicelli | 6:7afa4c3c74ca | 96 | else |
stebonicelli | 6:7afa4c3c74ca | 97 | id=0x070; |
stebonicelli | 6:7afa4c3c74ca | 98 | status = can.write(CANMessage(id, payload, 4)); |
stebonicelli | 6:7afa4c3c74ca | 99 | printf("Send status linStop: %d\r\n\n", status); |
stebonicelli | 6:7afa4c3c74ca | 100 | wait(0.01); |
stebonicelli | 6:7afa4c3c74ca | 101 | } |
stebonicelli | 6:7afa4c3c74ca | 102 | |
stebonicelli | 6:7afa4c3c74ca | 103 | // ---------------------------------------------- |
stebonicelli | 6:7afa4c3c74ca | 104 | if(b4==0) |
stebonicelli | 6:7afa4c3c74ca | 105 | { |
stebonicelli | 6:7afa4c3c74ca | 106 | payload[0]=1; |
stebonicelli | 6:7afa4c3c74ca | 107 | id = 0x050; |
stebonicelli | 6:7afa4c3c74ca | 108 | status = can.write(CANMessage(id, payload, 4)); |
stebonicelli | 6:7afa4c3c74ca | 109 | printf("Send status linup: %d\r\n\n", status); |
stebonicelli | 6:7afa4c3c74ca | 110 | wait(0.01); |
stebonicelli | 6:7afa4c3c74ca | 111 | } |
stebonicelli | 6:7afa4c3c74ca | 112 | else if(b3==0) |
stebonicelli | 6:7afa4c3c74ca | 113 | { |
stebonicelli | 6:7afa4c3c74ca | 114 | payload[0]=2; |
stebonicelli | 6:7afa4c3c74ca | 115 | id = 0x050; |
stebonicelli | 6:7afa4c3c74ca | 116 | status = can.write(CANMessage(id, payload, 4)); |
stebonicelli | 6:7afa4c3c74ca | 117 | printf("Send status linDown: %d\r\n\n", status); |
stebonicelli | 6:7afa4c3c74ca | 118 | wait(0.01); |
stebonicelli | 6:7afa4c3c74ca | 119 | } |
stebonicelli | 6:7afa4c3c74ca | 120 | else if (b4==1 && b3==1) |
stebonicelli | 6:7afa4c3c74ca | 121 | { |
stebonicelli | 6:7afa4c3c74ca | 122 | payload[0]=0; |
stebonicelli | 6:7afa4c3c74ca | 123 | id = 0x050; |
gidiana | 5:1fa56bf23f8a | 124 | status = can.write(CANMessage(id, payload, 4)); |
gidiana | 5:1fa56bf23f8a | 125 | printf("Send status linStop: %d\r\n\n", status); |
gidiana | 5:1fa56bf23f8a | 126 | wait(0.01); |
gidiana | 5:1fa56bf23f8a | 127 | } |
gidiana | 5:1fa56bf23f8a | 128 | |
stebonicelli | 6:7afa4c3c74ca | 129 | // ---------------------------------------------- |
stebonicelli | 6:7afa4c3c74ca | 130 | if(b1==0) |
stebonicelli | 6:7afa4c3c74ca | 131 | { |
stebonicelli | 6:7afa4c3c74ca | 132 | payload[0]=1; |
stebonicelli | 6:7afa4c3c74ca | 133 | id = 0x040; |
stebonicelli | 6:7afa4c3c74ca | 134 | status = can.write(CANMessage(id, payload, 4)); |
stebonicelli | 6:7afa4c3c74ca | 135 | printf("Send status linup: %d\r\n\n", status); |
stebonicelli | 6:7afa4c3c74ca | 136 | wait(0.01); |
stebonicelli | 6:7afa4c3c74ca | 137 | } |
stebonicelli | 6:7afa4c3c74ca | 138 | else if(b2==0) |
stebonicelli | 6:7afa4c3c74ca | 139 | { |
stebonicelli | 6:7afa4c3c74ca | 140 | payload[0]=2; |
stebonicelli | 6:7afa4c3c74ca | 141 | id = 0x040; |
stebonicelli | 6:7afa4c3c74ca | 142 | status = can.write(CANMessage(id, payload, 4)); |
stebonicelli | 6:7afa4c3c74ca | 143 | printf("Send status linDown: %d\r\n\n", status); |
stebonicelli | 6:7afa4c3c74ca | 144 | wait(0.01); |
stebonicelli | 6:7afa4c3c74ca | 145 | } |
stebonicelli | 6:7afa4c3c74ca | 146 | else if (b1==1 && b2==1) |
stebonicelli | 6:7afa4c3c74ca | 147 | { |
stebonicelli | 6:7afa4c3c74ca | 148 | payload[0]=0; |
stebonicelli | 6:7afa4c3c74ca | 149 | id = 0x040; |
stebonicelli | 6:7afa4c3c74ca | 150 | status = can.write(CANMessage(id, payload, 4)); |
stebonicelli | 6:7afa4c3c74ca | 151 | printf("Send status linStop: %d\r\n\n", status); |
stebonicelli | 6:7afa4c3c74ca | 152 | wait(0.01); |
stebonicelli | 6:7afa4c3c74ca | 153 | } |
stebonicelli | 6:7afa4c3c74ca | 154 | |
stebonicelli | 6:7afa4c3c74ca | 155 | //---------------------------------------------- |
stebonicelli | 6:7afa4c3c74ca | 156 | if(b6==0 && b8==1) |
stebonicelli | 6:7afa4c3c74ca | 157 | { |
stebonicelli | 6:7afa4c3c74ca | 158 | payload[0]=1; |
stebonicelli | 6:7afa4c3c74ca | 159 | id = 0x060; |
stebonicelli | 6:7afa4c3c74ca | 160 | status = can.write(CANMessage(id, payload, 4)); |
stebonicelli | 6:7afa4c3c74ca | 161 | printf("Send status linup: %d\r\n\n", status); |
stebonicelli | 6:7afa4c3c74ca | 162 | wait(0.01); |
stebonicelli | 6:7afa4c3c74ca | 163 | } |
stebonicelli | 6:7afa4c3c74ca | 164 | else if(b6==0 && b8==0) |
stebonicelli | 6:7afa4c3c74ca | 165 | { |
stebonicelli | 6:7afa4c3c74ca | 166 | payload[0]=2; |
stebonicelli | 6:7afa4c3c74ca | 167 | id = 0x060; |
stebonicelli | 6:7afa4c3c74ca | 168 | status = can.write(CANMessage(id, payload, 4)); |
stebonicelli | 6:7afa4c3c74ca | 169 | printf("Send status linDown: %d\r\n\n", status); |
stebonicelli | 6:7afa4c3c74ca | 170 | wait(0.01); |
stebonicelli | 6:7afa4c3c74ca | 171 | } |
stebonicelli | 6:7afa4c3c74ca | 172 | else if (b6==1 && b8==0) |
stebonicelli | 6:7afa4c3c74ca | 173 | { |
stebonicelli | 6:7afa4c3c74ca | 174 | payload[0]=0; |
stebonicelli | 6:7afa4c3c74ca | 175 | id = 0x060; |
stebonicelli | 6:7afa4c3c74ca | 176 | status = can.write(CANMessage(id, payload, 4)); |
stebonicelli | 6:7afa4c3c74ca | 177 | printf("Send status linStop: %d\r\n\n", status); |
stebonicelli | 6:7afa4c3c74ca | 178 | wait(0.01); |
stebonicelli | 6:7afa4c3c74ca | 179 | } |
gidiana | 0:0da0fd430e20 | 180 | } |
gidiana | 0:0da0fd430e20 | 181 | |
gidiana | 0:0da0fd430e20 | 182 | |
gidiana | 0:0da0fd430e20 | 183 | int main() |
gidiana | 0:0da0fd430e20 | 184 | { |
gidiana | 5:1fa56bf23f8a | 185 | b1.mode(PullUp); |
gidiana | 5:1fa56bf23f8a | 186 | b2.mode(PullUp); |
gidiana | 5:1fa56bf23f8a | 187 | b3.mode(PullUp); |
gidiana | 5:1fa56bf23f8a | 188 | b4.mode(PullUp); |
gidiana | 5:1fa56bf23f8a | 189 | b5.mode(PullUp); |
gidiana | 5:1fa56bf23f8a | 190 | b6.mode(PullUp); |
gidiana | 5:1fa56bf23f8a | 191 | b7.mode(PullUp); |
gidiana | 5:1fa56bf23f8a | 192 | b8.mode(PullUp); |
gidiana | 5:1fa56bf23f8a | 193 | |
gidiana | 0:0da0fd430e20 | 194 | printf("CAN receive / transmit test.\r\n"); |
stebonicelli | 1:1dc44ef7308a | 195 | can.frequency(125000); |
stebonicelli | 1:1dc44ef7308a | 196 | can1.frequency(125000); |
stebonicelli | 1:1dc44ef7308a | 197 | printf("Running! \r\n"); |
gidiana | 0:0da0fd430e20 | 198 | |
stebonicelli | 1:1dc44ef7308a | 199 | while(true) |
stebonicelli | 3:5e10299983ae | 200 | { |
stebonicelli | 1:1dc44ef7308a | 201 | sendMessage(); |
gidiana | 0:0da0fd430e20 | 202 | |
stebonicelli | 1:1dc44ef7308a | 203 | printf("%f\t%f\n\r", float(xin), float(yin)); |
gidiana | 5:1fa56bf23f8a | 204 | printf("b1: %d\tb2: %d\tb3: %d\tb4: %d\tb5: %d\tb6: %d\tb7: %d\tb8: %d\n\r", b1.read(), b2.read(), b3.read(), b4.read(), b5.read(), b6.read(), b7.read(), b8.read()); |
stebonicelli | 1:1dc44ef7308a | 205 | |
stebonicelli | 1:1dc44ef7308a | 206 | osDelay(100); |
gidiana | 0:0da0fd430e20 | 207 | } |
stebonicelli | 1:1dc44ef7308a | 208 | } |