
A program to read steering angle and wheel speed off CAN bus and to perform PID control
main.cpp@1:6839bcd71b6a, 2022-06-28 (annotated)
- Committer:
- samh25
- Date:
- Tue Jun 28 16:08:30 2022 +0000
- Revision:
- 1:6839bcd71b6a
- Parent:
- 0:190a2fe3cf0f
2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
samh25 | 0:190a2fe3cf0f | 1 | // TBReAI AI-MBED |
samh25 | 0:190a2fe3cf0f | 2 | // WRITTEN BY SEB HALL ON 29/06/2022 |
samh25 | 0:190a2fe3cf0f | 3 | |
samh25 | 0:190a2fe3cf0f | 4 | #include "mbed.h" |
samh25 | 0:190a2fe3cf0f | 5 | |
samh25 | 0:190a2fe3cf0f | 6 | const PinName writePin = p29; |
samh25 | 0:190a2fe3cf0f | 7 | const PinName readPin = p30; |
samh25 | 0:190a2fe3cf0f | 8 | const int busFrequency = 500000; |
samh25 | 0:190a2fe3cf0f | 9 | const unsigned steeringMessageID = 0x100; |
samh25 | 0:190a2fe3cf0f | 10 | |
samh25 | 0:190a2fe3cf0f | 11 | Serial pc(USBTX, USBRX); |
samh25 | 0:190a2fe3cf0f | 12 | DigitalOut led1(LED1); |
samh25 | 0:190a2fe3cf0f | 13 | DigitalOut led2(LED2); |
samh25 | 0:190a2fe3cf0f | 14 | union { |
samh25 | 0:190a2fe3cf0f | 15 | double formattedData; |
samh25 | 0:190a2fe3cf0f | 16 | char rawData[8]; |
samh25 | 0:190a2fe3cf0f | 17 | } CANFormatted; |
samh25 | 0:190a2fe3cf0f | 18 | |
samh25 | 0:190a2fe3cf0f | 19 | CAN CANBus(readPin, writePin, busFrequency); |
samh25 | 0:190a2fe3cf0f | 20 | |
samh25 | 0:190a2fe3cf0f | 21 | void readCANMessage() { |
samh25 | 0:190a2fe3cf0f | 22 | |
samh25 | 0:190a2fe3cf0f | 23 | led2 = 1; |
samh25 | 0:190a2fe3cf0f | 24 | |
samh25 | 0:190a2fe3cf0f | 25 | CANMessage message; |
samh25 | 0:190a2fe3cf0f | 26 | CANBus.read(message); |
samh25 | 0:190a2fe3cf0f | 27 | |
samh25 | 0:190a2fe3cf0f | 28 | for (int i = 0; i < 8; i++) { |
samh25 | 0:190a2fe3cf0f | 29 | CANFormatted.rawData[i] = message.data[i]; |
samh25 | 0:190a2fe3cf0f | 30 | } |
samh25 | 0:190a2fe3cf0f | 31 | |
samh25 | 0:190a2fe3cf0f | 32 | led2 = 0; |
samh25 | 0:190a2fe3cf0f | 33 | |
samh25 | 0:190a2fe3cf0f | 34 | } |
samh25 | 0:190a2fe3cf0f | 35 | |
samh25 | 0:190a2fe3cf0f | 36 | void sendCANMessage(double data, unsigned id) { |
samh25 | 0:190a2fe3cf0f | 37 | |
samh25 | 0:190a2fe3cf0f | 38 | CANMessage message; |
samh25 | 0:190a2fe3cf0f | 39 | |
samh25 | 0:190a2fe3cf0f | 40 | CANFormatted.formattedData = data; |
samh25 | 0:190a2fe3cf0f | 41 | |
samh25 | 0:190a2fe3cf0f | 42 | for (int i = 0; i < 8; i++) { |
samh25 | 0:190a2fe3cf0f | 43 | message.data[i] = CANFormatted.rawData[i]; |
samh25 | 0:190a2fe3cf0f | 44 | } |
samh25 | 0:190a2fe3cf0f | 45 | |
samh25 | 0:190a2fe3cf0f | 46 | message.id = id; |
samh25 | 0:190a2fe3cf0f | 47 | |
samh25 | 0:190a2fe3cf0f | 48 | CANBus.write(message); |
samh25 | 0:190a2fe3cf0f | 49 | |
samh25 | 0:190a2fe3cf0f | 50 | } |
samh25 | 0:190a2fe3cf0f | 51 | |
samh25 | 0:190a2fe3cf0f | 52 | int main() { |
samh25 | 0:190a2fe3cf0f | 53 | |
samh25 | 0:190a2fe3cf0f | 54 | pc.printf("STARTED\n"); |
samh25 | 0:190a2fe3cf0f | 55 | |
samh25 | 0:190a2fe3cf0f | 56 | led1 = !led1; |
samh25 | 0:190a2fe3cf0f | 57 | |
samh25 | 0:190a2fe3cf0f | 58 | CANBus.attach(callback(readCANMessage)); |
samh25 | 0:190a2fe3cf0f | 59 | |
samh25 | 0:190a2fe3cf0f | 60 | } |