Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp
- Committer:
- chd21
- Date:
- 2019-06-24
- Revision:
- 0:b2e8c7b0bad9
File content as of revision 0:b2e8c7b0bad9:
#include "mbed.h"
#include <cmath>
DigitalOut myled(LED1);
// 18 Digitial In pins for monitoring system
// 16 are low when ok, high when fault
// 2 that aren't are brake and current, low when fault, high when ok
DigitalIn interlock_in(p5); // LOW OK, HIGH FAULT
DigitalIn tsms_in(p6); // LOW OK, HIGH FAULT
DigitalIn inertia_in(p7); // LOW OK, HIGH FAULT
DigitalIn bspd_latch_in(p8); // LOW OK, HIGH FAULT
DigitalIn pcb_in(p11); // LOW OK, HIGH FAULT
DigitalIn hvd_in(p12); // LOW OK, HIGH FAULT
DigitalIn e_stp_roll_in(p13);// LOW OK, HIGH FAULT
DigitalIn e_stp_dash_in(p14);// LOW OK, HIGH FAULT
DigitalIn ecu_in(p15); // LOW OK, HIGH FAULT
DigitalIn imd_latch_in(p16); // LOW OK, HIGH FAULT
DigitalIn bspd_in(p18); // LOW OK, HIGH FAULT
DigitalIn bms_in(p19); // LOW OK, HIGH FAULT
DigitalIn fuse_in(p20); // LOW OK, HIGH FAULT
DigitalIn imd_in(p21); // LOW OK, HIGH FAULT
DigitalIn bms_latch_in(p23); // LOW OK, HIGH FAULT
DigitalIn bots_in(p24); // LOW OK, HIGH FAULT
DigitalIn current_in(p17); // HIGH OK, LOW FAULT
DigitalIn brake_in(p22); // HIGH OK, LOW FAULT
CAN can1(p9,p10); // CAN bus
CANMessage shutdown_msg;
int main() {
while(1) {
int car_shutdown = 0;
int latched_shutdown = 0;
int any_fault = 0;
// fault array
int fault_array1[8] = {car_shutdown, latched_shutdown, any_fault, fuse_in, pcb_in, bots_in, e_stp_dash_in, inertia_in};
//printf("Fault array: %d %d %d %d %d %d %d %d\r\n",fault_array1[0],fault_array1[1],fault_array1[2],fault_array1[3],fault_array1[4],fault_array1[5],fault_array1[6],fault_array1[7]);
int fault_array2[8] = {e_stp_roll_in, tsms_in, hvd_in, interlock_in, ecu_in, bms_in, imd_in, !brake_in};
int fault_array3[5] = {!current_in, bspd_in, bms_latch_in, imd_latch_in, bspd_latch_in};
// find the sum of the faults, find if a shutdown fault has gone, find if a latch has gone
int fault_latch[3] = {bms_latch_in, imd_latch_in, bspd_latch_in};
int fault_shutdown[13] = {fuse_in, pcb_in, bots_in, e_stp_dash_in, inertia_in, e_stp_roll_in, tsms_in, hvd_in, interlock_in, ecu_in, bms_latch_in, imd_latch_in, bspd_latch_in};
// if any latched fault is detected then set flag high
for(int i=0;i<3;i++) {
latched_shutdown = latched_shutdown + fault_latch[i];
if (latched_shutdown>0) {
latched_shutdown = 1;
fault_array1[1] = latched_shutdown;
}
}
// if any shutdown fault is detected then set flag high
for(int j=0;j<5;j++) {
car_shutdown = car_shutdown + fault_shutdown[j];
printf("car shutdown = %d\r\n",car_shutdown);
if (car_shutdown>0) {
car_shutdown = 1;
fault_array1[0] = car_shutdown;
break;
}
}
printf("CAR SHUTDOWN %d\r\n",car_shutdown);
// if any fault is deteched set flag high
for (int l=0;l<3;l++) {
for (int k=0;k<8;k++) {
any_fault = any_fault + fault_array1[k];
if (any_fault>0) {
any_fault = 1;
fault_array1[2] = any_fault;
break;
}
}
for (int m=0;m<8;m++) {
any_fault = any_fault + fault_array2[m];
if (any_fault>0) {
any_fault = 1;
break;
}
}
for (int n=0;n<5;n++) {
any_fault = any_fault + fault_array3[n];
if (any_fault>0) {
any_fault = 1;
break;
}
}
}
for (int k=3;k<8;k++) {
any_fault = any_fault + fault_array1[k];
if (any_fault>0) {
any_fault = 1;
fault_array1[2] = any_fault;
break;
}
}
printf("ANY FAULT %d\r\n",any_fault);
int x = 2;
int byte1 = 0;
int byte2 = 0;
int byte3 = 0;
// Generate the CAN message
for (int b=0;b<8;b++) {
int power = pow((double)x,b);
//printf("Current val = %d, b = %d \r\n",fault_array1[b], power);
byte1 = byte1 + (fault_array1[b]*pow((double)x,b));
//printf("Byte 1 = %d\r\n",byte1);
byte2 = byte2 + (fault_array2[b]*pow((double)x,b));
byte3 = byte3 + (fault_array3[b]*pow((double)x,b));
}
shutdown_msg.id = 0x705;
shutdown_msg.data[0] = byte1;
shutdown_msg.data[1] = byte2;
shutdown_msg.data[2] = byte3;
printf("CAN Message, %X %X %X %X \r\n", shutdown_msg.id,shutdown_msg.data[0],shutdown_msg.data[1],shutdown_msg.data[2]);
//printf("CAN Message, %X %X \r\n", shutdown_msg.id,shutdown_msg.data[0]);
wait(1);
}
}