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
Diff: main.cpp
- Revision:
- 5:f55622eacb87
- Parent:
- 4:7d027ceba0a0
- Child:
- 6:e7c29e46ad6c
--- a/main.cpp Sat Nov 09 20:30:32 2019 +0000
+++ b/main.cpp Mon Nov 11 19:37:48 2019 +0000
@@ -39,9 +39,14 @@
#define MOTOR_TEMPERATURE 0x90D
#define DC_BUS_AMP_HOURS 0x90E
#define ODOMETER 0x90F
+
+#define DASH_Forward 0x580 // DASH Forward Motor ID
+#define DASH_Cruise_Set 0x581 // DASH Brake ID
+#define DASH_Cruise 0x582 // DASH Brake ID
+#define DASH_Regen 0x583 // DASH Regen ID
CAN can1(PD_0,PD_1,125000); // can1 is car CAN (Rx, Tx, speed)
-CAN can2(PB_5,PB_6,50000); // can2 is motor controller CAN (Rx, Tx, speed)
+CAN can2(PB_5,PB_6, 100000); // can2 is motor controller CAN (Rx, Tx, speed)
Serial pc(USBTX, USBRX);
AnalogIn ain(PB_0);
@@ -57,8 +62,17 @@
#define MAX_VELOCITY 100 // motor velocity in m/s
#define MAX_CURRENT 1.0 // desired motor current as percentage of max current
-
-int main() {
+void Dumb1(){
+
+ while(1){
+ pc.printf("This is Thread \n\r");
+ }
+
+ }
+
+int main() {
+ Thread dumb(Dumb1);
+
float current = MAX_CURRENT;
float velocity = MAX_VELOCITY;
float bus_current = MAX_CURRENT;
@@ -88,6 +102,10 @@
float motorTemp;
float DCBusAmpHours;
float odometerValue;
+ int forward;
+ int cruiseSet;
+ int cruise;
+ float regen;
//char const * serial = "0002173";
// can1.frequency(500000);
@@ -103,8 +121,17 @@
char rdata7[8];
char rdata8[8];
char rdata9[8];
+
+ char ddata[8];
+ char ddata1[8];
+ char ddata2[8];
+ char ddata3[8];
+
+ float zero = 0;
CANMessage msg;
+ CANMessage msg2;
+
dummy = 0;
alive = 0;
@@ -197,7 +224,80 @@
// }
//
// }
-
+
+ if(can1.read(msg2)) {
+ if(msg2.id == DASH_Forward) {
+ for(int i = 0; i < msg2.len; i++) {
+ ddata[i] = msg2.data[i];
+ }
+
+ float ddatafloat = *((float*) &ddata);
+ int ddatabit = ceil(ddatafloat);
+
+
+ if(ddatabit == 2147483647) {
+ forward = 1;
+ } else forward = 0;
+
+ pc.printf("ddatabit: %d", ddatabit);
+ pc.printf("forward: %d \n", forward);
+
+
+ }
+
+ else if(msg2.id == DASH_Cruise_Set) {
+ for(int i = 0; i < msg2.len; i++) {
+ ddata1[i] = msg2.data[i];
+ }
+
+ float ddatafloat1 = *((float*) &ddata1);
+ int ddatabit1 = ceil(ddatafloat1);
+
+ if(ddatabit1 == 2147483647) {
+ cruiseSet = 1;
+ } else cruiseSet = 0;
+
+ pc.printf("ddatabit1: %d", ddatabit1);
+ pc.printf("cruise set: %d \n", cruiseSet);
+
+
+ }
+
+ else if(msg2.id == DASH_Cruise) {
+ for(int i = 0; i < msg2.len; i++) {
+ ddata2[i] = msg2.data[i];
+ }
+
+ float ddatafloat2 = *((float*) &ddata2);
+ int ddatabit2 = ceil(ddatafloat2);
+
+ if(ddatabit2 == 2147483647) {
+ cruise = 1;
+ } else cruise = 0;
+
+ pc.printf("ddatabit2: %d", ddatabit2);
+ pc.printf("cruise: %d \n", cruise);
+
+ }
+
+ else if(msg2.id == DASH_Regen) {
+ for(int i = 0; i < msg2.len; i++) {
+ ddata3[i] = msg2.data[i];
+ }
+ pc.printf("regen ddata: %f", ddata3);
+
+ urxdata.rcvdata[3] = ddata3[3];
+ urxdata.rcvdata[2] = ddata3[2];
+ urxdata.rcvdata[1] = ddata3[1];
+ urxdata.rcvdata[0] = ddata3[0];
+ regen = urxdata.rxdata;
+
+ pc.printf("here in regen \n");
+ pc.printf("%f", regen);
+
+ }
+ }
+
if(can2.read(msg)){
if(msg.id == id3 ) { // Tritium Bus
for(int i = 0; i < msg.len; i++) {
@@ -208,7 +308,7 @@
if (!can1.write(CANMessage(0x242, (char*) rdata, 8))) {
pc.printf("Cannot write to CAN\n");
}
- wait(0.001);
+// wait(0.001);
urxdata.rcvdata[3] = rdata[7];
urxdata.rcvdata[2] = rdata[6];
@@ -233,7 +333,7 @@
if (!can1.write(CANMessage(0x243, (char*) rdata2, 8))) {
pc.printf("Cannot write to CAN\n");
}
- wait(0.001);
+// wait(0.001);
urxdata.rcvdata[3] = rdata2[7];
urxdata.rcvdata[2] = rdata2[6];
@@ -247,101 +347,101 @@
motorVel = urxdata.rxdata;
}
- // reading phase currents
- else if(msg.id == (MC_BASE+MC_PHCUR)) {
- for (int i = 0; i < msg.len; i++) {
- rdata3[i] = msg.data[i];
- }
-
- // sending value to CAR can
- if (!can1.write(CANMessage(0x244, (char*) rdata3, 8))) {
- pc.printf("Cannot write to CAN\n");
- }
- wait(0.001);
-
- urxdata.rcvdata[3] = rdata3[7];
- urxdata.rcvdata[2] = rdata3[6];
- urxdata.rcvdata[1] = rdata3[5];
- urxdata.rcvdata[0] = rdata3[4];
- phaseCcurrent = urxdata.rxdata;
- urxdata.rcvdata[3] = rdata3[3];
- urxdata.rcvdata[2] = rdata3[2];
- urxdata.rcvdata[1] = rdata3[1];
- urxdata.rcvdata[0] = rdata3[0];
- phaseBcurrent = urxdata.rxdata;
- }
-
- // reading motor voltage vector
- else if(msg.id == (MC_BASE+MC_VOVEC)) {
- for (int i = 0; i < msg.len; i++) {
- rdata4[i] = msg.data[i];
- }
-
- // sending value to CAR can
- if (!can1.write(CANMessage(0x245, (char*) rdata4, 8))) {
- pc.printf("Cannot write to CAN\n");
- }
- wait(0.001);
-
- urxdata.rcvdata[3] = rdata4[7];
- urxdata.rcvdata[2] = rdata4[6];
- urxdata.rcvdata[1] = rdata4[5];
- urxdata.rcvdata[0] = rdata4[4];
- vd = urxdata.rxdata;
- urxdata.rcvdata[3] = rdata4[3];
- urxdata.rcvdata[2] = rdata4[2];
- urxdata.rcvdata[1] = rdata4[1];
- urxdata.rcvdata[0] = rdata4[0];
- vq = urxdata.rxdata;
- }
+// // reading phase currents
+// else if(msg.id == (MC_BASE+MC_PHCUR)) {
+// for (int i = 0; i < msg.len; i++) {
+// rdata3[i] = msg.data[i];
+// }
+//
+// // sending value to CAR can
+// if (!can1.write(CANMessage(0x244, (char*) rdata3, 8))) {
+// pc.printf("Cannot write to CAN\n");
+// }
+//// wait(0.001);
+//
+// urxdata.rcvdata[3] = rdata3[7];
+// urxdata.rcvdata[2] = rdata3[6];
+// urxdata.rcvdata[1] = rdata3[5];
+// urxdata.rcvdata[0] = rdata3[4];
+// phaseCcurrent = urxdata.rxdata;
+// urxdata.rcvdata[3] = rdata3[3];
+// urxdata.rcvdata[2] = rdata3[2];
+// urxdata.rcvdata[1] = rdata3[1];
+// urxdata.rcvdata[0] = rdata3[0];
+// phaseBcurrent = urxdata.rxdata;
+// }
- // reading current vector
- else if(msg.id == (MC_BASE+MC_CUVEC)) {
- for (int i = 0; i < msg.len; i++) {
- rdata5[i] = msg.data[i];
- }
-
- // sending value to CAR can
- if (!can1.write(CANMessage(0x246, (char*) rdata5, 8))) {
- pc.printf("Cannot write to CAN\n");
- }
- wait(0.001);
-
- urxdata.rcvdata[3] = rdata5[7];
- urxdata.rcvdata[2] = rdata5[6];
- urxdata.rcvdata[1] = rdata5[5];
- urxdata.rcvdata[0] = rdata5[4];
- Id = urxdata.rxdata;
- urxdata.rcvdata[3] = rdata5[3];
- urxdata.rcvdata[2] = rdata5[2];
- urxdata.rcvdata[1] = rdata5[1];
- urxdata.rcvdata[0] = rdata5[0];
- Iq = urxdata.rxdata;
- }
-
- // reading back emf
- else if(msg.id == (MC_BASE+MC_BEMF)) {
- for (int i = 0; i < msg.len; i++) {
- rdata6[i] = msg.data[i];
- }
-
- // sending value to CAR can
- if (!can1.write(CANMessage(0x247, (char*) rdata6, 8))) {
- pc.printf("Cannot write to CAN\n");
- }
- wait(0.001);
-
- urxdata.rcvdata[3] = rdata6[7];
- urxdata.rcvdata[2] = rdata6[6];
- urxdata.rcvdata[1] = rdata6[5];
- urxdata.rcvdata[0] = rdata6[4];
- BEMFd = urxdata.rxdata;
- urxdata.rcvdata[3] = rdata6[3];
- urxdata.rcvdata[2] = rdata6[2];
- urxdata.rcvdata[1] = rdata6[1];
- urxdata.rcvdata[0] = rdata6[0];
- BEMFq = urxdata.rxdata;
- }
+// // reading motor voltage vector
+// else if(msg.id == (MC_BASE+MC_VOVEC)) {
+// for (int i = 0; i < msg.len; i++) {
+// rdata4[i] = msg.data[i];
+// }
+//
+// // sending value to CAR can
+// if (!can1.write(CANMessage(0x245, (char*) rdata4, 8))) {
+// pc.printf("Cannot write to CAN\n");
+// }
+//// wait(0.001);
+//
+// urxdata.rcvdata[3] = rdata4[7];
+// urxdata.rcvdata[2] = rdata4[6];
+// urxdata.rcvdata[1] = rdata4[5];
+// urxdata.rcvdata[0] = rdata4[4];
+// vd = urxdata.rxdata;
+// urxdata.rcvdata[3] = rdata4[3];
+// urxdata.rcvdata[2] = rdata4[2];
+// urxdata.rcvdata[1] = rdata4[1];
+// urxdata.rcvdata[0] = rdata4[0];
+// vq = urxdata.rxdata;
+// }
+//
+ // // reading current vector
+// else if(msg.id == (MC_BASE+MC_CUVEC)) {
+// for (int i = 0; i < msg.len; i++) {
+// rdata5[i] = msg.data[i];
+// }
+//
+// // sending value to CAR can
+// if (!can1.write(CANMessage(0x246, (char*) rdata5, 8))) {
+// pc.printf("Cannot write to CAN\n");
+// }
+//// wait(0.001);
+//
+// urxdata.rcvdata[3] = rdata5[7];
+// urxdata.rcvdata[2] = rdata5[6];
+// urxdata.rcvdata[1] = rdata5[5];
+// urxdata.rcvdata[0] = rdata5[4];
+// Id = urxdata.rxdata;
+// urxdata.rcvdata[3] = rdata5[3];
+// urxdata.rcvdata[2] = rdata5[2];
+// urxdata.rcvdata[1] = rdata5[1];
+// urxdata.rcvdata[0] = rdata5[0];
+// Iq = urxdata.rxdata;
+// }
+//
+// // reading back emf
+// else if(msg.id == (MC_BASE+MC_BEMF)) {
+// for (int i = 0; i < msg.len; i++) {
+// rdata6[i] = msg.data[i];
+// }
+//
+// // sending value to CAR can
+// if (!can1.write(CANMessage(0x247, (char*) rdata6, 8))) {
+// pc.printf("Cannot write to CAN\n");
+// }
+//// wait(0.001);
+//
+// urxdata.rcvdata[3] = rdata6[7];
+// urxdata.rcvdata[2] = rdata6[6];
+// urxdata.rcvdata[1] = rdata6[5];
+// urxdata.rcvdata[0] = rdata6[4];
+// BEMFd = urxdata.rxdata;
+// urxdata.rcvdata[3] = rdata6[3];
+// urxdata.rcvdata[2] = rdata6[2];
+// urxdata.rcvdata[1] = rdata6[1];
+// urxdata.rcvdata[0] = rdata6[0];
+// BEMFq = urxdata.rxdata;
+// }
// reading heatsink and motor temp
else if(msg.id == (MC_BASE+MC_TEMP)) {
@@ -353,7 +453,7 @@
if (!can1.write(CANMessage(0x24B, (char*) rdata7, 8))) {
pc.printf("Cannot write to CAN\n");
}
- wait(0.001);
+// wait(0.001);
urxdata.rcvdata[3] = rdata7[7];
urxdata.rcvdata[2] = rdata7[6];
@@ -367,29 +467,29 @@
motorTemp = urxdata.rxdata;
}
- // reading odometer and bus amp ohours measuremeant
- else if(msg.id == (MC_BASE+MC_AMPH)) {
- for (int i = 0; i < msg.len; i++) {
- rdata8[i] = msg.data[i];
- }
-
- // sending value to CAR can
- if (!can1.write(CANMessage(0x24E, (char*) rdata8, 8))) {
- pc.printf("Cannot write to CAN\n");
- }
- wait(0.001);
-
- urxdata.rcvdata[3] = rdata8[7];
- urxdata.rcvdata[2] = rdata8[6];
- urxdata.rcvdata[1] = rdata8[5];
- urxdata.rcvdata[0] = rdata8[4];
- DCBusAmpHours = urxdata.rxdata;
- urxdata.rcvdata[3] = rdata8[3];
- urxdata.rcvdata[2] = rdata8[2];
- urxdata.rcvdata[1] = rdata8[1];
- urxdata.rcvdata[0] = rdata8[0];
- odometerValue = urxdata.rxdata;
- }
+// // reading odometer and bus amp ohours measuremeant
+// else if(msg.id == (MC_BASE+MC_AMPH)) {
+// for (int i = 0; i < msg.len; i++) {
+// rdata8[i] = msg.data[i];
+// }
+//
+// // sending value to CAR can
+// if (!can1.write(CANMessage(0x24E, (char*) rdata8, 8))) {
+// pc.printf("Cannot write to CAN\n");
+// }
+//// wait(0.001);
+//
+// urxdata.rcvdata[3] = rdata8[7];
+// urxdata.rcvdata[2] = rdata8[6];
+// urxdata.rcvdata[1] = rdata8[5];
+// urxdata.rcvdata[0] = rdata8[4];
+// DCBusAmpHours = urxdata.rxdata;
+// urxdata.rcvdata[3] = rdata8[3];
+// urxdata.rcvdata[2] = rdata8[2];
+// urxdata.rcvdata[1] = rdata8[1];
+// urxdata.rcvdata[0] = rdata8[0];
+// odometerValue = urxdata.rxdata;
+// }
}
if(alive % 100 == 0){
@@ -406,32 +506,32 @@
printf("\r\n");
printf(" Motor Velocity (V) = %f",motorVel);
printf("\r\n");
- printf(" Phase B Current (A-rms) = %f",phaseBcurrent);
- printf("\r\n");
- printf(" Phase C Current (A-rms) = %f",phaseCcurrent);
- printf("\r\n");
- printf(" Vd (V) = %f",vd);
- printf("\r\n");
- printf(" Vq (V) = %f",vq);
- printf("\r\n");
-
- printf(" Id (A) = %f",Id);
- printf("\r\n");
- printf(" Iq (A) = %f",Iq);
- printf("\r\n");
- printf(" BEMFd (V) = %f",BEMFd);
- printf("\r\n");
- printf(" BEMFq (V) = %f",BEMFq);
- printf("\r\n");
+ // printf(" Phase B Current (A-rms) = %f",phaseBcurrent);
+// printf("\r\n");
+// printf(" Phase C Current (A-rms) = %f",phaseCcurrent);
+// printf("\r\n");
+// printf(" Vd (V) = %f",vd);
+// printf("\r\n");
+// printf(" Vq (V) = %f",vq);
+// printf("\r\n");
+//
+// printf(" Id (A) = %f",Id);
+// printf("\r\n");
+// printf(" Iq (A) = %f",Iq);
+// printf("\r\n");
+// printf(" BEMFd (V) = %f",BEMFd);
+// printf("\r\n");
+// printf(" BEMFq (V) = %f",BEMFq);
+// printf("\r\n");
printf(" Heat Sink Temperature (Celsius) = %f",heatSinkTemp);
printf("\r\n");
printf(" Motor Temperature (Celsius) = %f",motorTemp);
printf("\r\n");
- printf(" DC Bus (Ah) = %f",DCBusAmpHours);
- printf("\r\n");
- printf(" Odometer (Distance) (m) = %f",odometerValue);
- printf("\r\n");
-
+// printf(" DC Bus (Ah) = %f",DCBusAmpHours);
+// printf("\r\n");
+// printf(" Odometer (Distance) (m) = %f",odometerValue);
+// printf("\r\n");
+//
// blinking LED
LED8 = !LED8;