A program to read steering angle and wheel speed off CAN bus and to perform PID control

Dependencies:   mbed PID

Committer:
samh25
Date:
Tue Jun 28 16:08:30 2022 +0000
Revision:
1:6839bcd71b6a
Parent:
0:190a2fe3cf0f
2

Who changed what in which revision?

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