Plz

Dependencies:   mbed CANMsg Adafruit_LEDBackpack

Revision:
7:060be032c57a
Parent:
6:be28839a8221
Child:
8:3eb4fcab8ede
--- a/main.cpp	Fri Jul 26 13:32:21 2019 +0000
+++ b/main.cpp	Mon Aug 05 16:50:20 2019 +0000
@@ -1,27 +1,39 @@
 #include "mbed.h"
 #include "CANMsg.h"
+#include "Adafruit_LEDBackpack.h"
 
 Ticker ticker;
 Timer timer;
 AnalogIn currentPot(p15);
+float curr_val = 0;
+float curr_reading = 0;
 AnalogIn speedPot(p16);
+float speed_val = 0;
+float speed_reading = 0;
+float speed_reading_ms = 0;
+float speed_reading_kmh = 0;
 DigitalIn ignition(p21);
 DigitalIn regen(p22);
-DigitalIn forwardreverse(p22);
-DigitalIn brake(p22);
-DigitalIn accel(p22);
-DigitalIn enable(p5);
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-CAN can1(p9, p10);
-//CAN can2(p30, p29);
+DigitalIn rev(p23);
+DigitalIn brake(p24);
+DigitalIn accel(p25);
+float maxBusCurrent = 1.0;
+
+I2C i2c(p28,p27);
+Adafruit_LEDBackpack display(&i2c);
 
-//const uint16_t MY_ID = 0x500;
+DigitalOut debug1(LED1);
+DigitalOut debug2(LED2);
+DigitalOut debug3(LED3);
+DigitalOut debug4(LED4);
+
+//CAN can1(p9, p10);
+CAN can1(p30, p29);
+
 const uint16_t SIGNAL_ID = 0x501;
 const uint16_t BUS_ID = 0x502;
+const uint8_t DISPLAY_ADDR = 0x70; 
 char counter = 0;
-float curr_val = 0;
-float speed_val = 0;
 Serial pc(USBTX, USBRX); // tx, rx
 
 CANMsg driverControls;
@@ -66,76 +78,175 @@
 */
 //======================================================================
 
+void flash(int light)   //Turns on one of the 4 mbed LEDs
+{   if (light == 1)
+    {debug1 = 1;
+    wait(0.2);
+    debug1 = 0;}
+    else if (light == 2)
+    {debug2 = 1;
+    wait(0.2);
+    debug2 = 0;}
+    else if (light == 3)
+    {debug3 = 1;
+    wait(0.2);
+    debug3 = 0;}
+    else if (light == 4)
+    {debug4 = 1;
+    wait(0.2);
+    debug4 = 0;}
+    else if (light == 5)
+    {debug1 = 1;
+    debug2 = 1;
+    debug3 = 1;
+    debug4 = 1;
+    wait(0.2);
+    debug1 = 0;
+    debug2 = 0;
+    debug3 = 0;
+    debug4 = 0;}}
+
 void setDriverControls()
 {
     driverControls.clear();
     driverControls.id = SIGNAL_ID;
     driverControls << speed_val;
     driverControls << curr_val;
+    
+    busCurrent.clear();
+    busCurrent.id = BUS_ID;
+    busCurrent << 0;
+    busCurrent << maxBusCurrent;
 }
 
-void send()
+void sendCAN()
 {
     setDriverControls();
+    //printMsg(driverControls);
+    //printMsg(busCurrent);
     if(can1.write(driverControls))
-        {
-            led1 = !led1;
-        } 
+    {
+        debug1 = !debug1;
+    }
     else
-        {
-            led1 = 1;
-            led2 = 1;
-            wait(3);
-        }
-    timer.stop();
+    {
+        //wait(0.5);
+        //flash(3);
+    }
+    
+    //if(can1.write(busCurrent))
+    //{
+    //    debug2 = !debug2;
+    //}
+    //else
+    //{
+        //wait(0.5);
+    //}
 }
 
-//unsigned int swap(unsigned int value)
-//{
-//    value = ((value & 0xFFFF0000) >> 16) | ((value & 0x0000FFFF) << 16);
-//    value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8);
-    //value = ((value & 0xF0F0F0F0) >> 4) | ((value & 0x0F0F0F0F) << 4);
-    //value = ((value & 0xCCCCCCCC) >> 2) | ((value & 0x33333333) << 2);
-    //value = ((value & 0xAAAAAAAA) >> 1) | ((value & 0x55555555) << 1);
-//    return value;
-//}
-
 int main()
 {
-    ticker.attach(&send, 0.1);
+
     pc.baud(9600);
     can1.frequency(1000000);
-    pc.printf("-------------------------------------\r\n");
-    printf("Attempting to send a CAN message\n");
-    //float signalCurrent = currentPot.read();
-    //float signalSpeed = speedPot.read();
-    float maxBusCurrent = 1.0;
-    printf("Current and Speed: %f and %f\n", currentPot.read(), speedPot.read());
-    pc.printf("-------------------------------------\r\n");
+    ticker.attach(&sendCAN, 1);
+    ignition.mode(PullUp);
+    regen.mode(PullUp);
+    rev.mode(PullUp);
+    brake.mode(PullUp);
+    accel.mode(PullUp);
+    
+    
+//    display.begin(DISPLAY_ADDR);
+//    for (int n = 0; n<16; n++)
+//    {
+//    display.setBrightness(n);
+//    for (int i = 0; i<10; i++)
+//    {
+//    display.displaybuffer[0] = i;
+//    display.displaybuffer[1] = i;
+//    display.displaybuffer[2] = 0;
+//    display.displaybuffer[3] = 0;
+//    display.displaybuffer[4] = 0;
+//    display.displaybuffer[5] = 0;
+//    display.displaybuffer[6] = 0;
+//    display.displaybuffer[7] = 0;
+//    display.writeDisplay();
+//    wait(0.5);
+//    }
+//    }
+    
+    
+    //pc.printf("-------------------------------------\r\n");
+    //printf("Attempting to send a CAN message\n");
+    //printf("Current and Speed: %f and %f\n", currentPot.read(), speedPot.read());
+    //pc.printf("-------------------------------------\r\n");
     //while(1) {
-        printf("Entering transmission main code)\n");
-        //pc.printf("-------------------------------------\r\n");
-        driverControls.clear();
-        driverControls.id = SIGNAL_ID;
-        // Append message with speed and current potentiometer s.
-        float curr_val = currentPot.read();
-        float speed_val = speedPot.read();
-        //float curr_val = 1.0;
-        //float speed_val = 50.0;
-        //float a = 1.0;
-        //unsigned int *curr_as_int  = (unsigned int *)&curr_val;
-        //unsigned int *speed_as_int  = (unsigned int *)&speed_val;
-        //driverControls << swap(*curr_as_int);
-        //driverControls << swap(*speed_as_int);
-        driverControls << speed_val;
-        driverControls << curr_val;
-        busCurrent.clear();
-        busCurrent.id = BUS_ID;
-        busCurrent << maxBusCurrent;
-        if(can1.write(busCurrent))
+        
+        //curr_val = 0.0;
+        //speed_val = 0.0;
+        curr_reading = currentPot.read();
+        speed_reading = speedPot.read();
+        speed_reading_ms = speed_reading * 30;
+        speed_reading_kmh = speed_reading_ms*3.6;
+        
+        bool ignition_reading = ignition.read();
+        bool regen_reading = regen.read();
+        bool rev_reading = rev.read();
+        bool brake_reading = brake.read();
+        bool accel_reading = accel.read();
+        
+        //pc.printf("Current reading: %f\r\n", curr_reading);
+        //pc.printf("Speed reading: %f\r\n", speed_reading);
+        //pc.printf("Ignition reading: %d\r\n", ignition_reading);
+        //pc.printf("Regen reading: %d\r\n", regen_reading);
+        //pc.printf("Forward/reverse reading: %d\r\n", rev_reading);
+        //pc.printf("Brake reading: %d\r\n", brake_reading);
+        //pc.printf("Accelerator reading: %d\r\n\r\n", accel_reading);
+        //wait(2);
+        
+        if (ignition)
+        {
+            curr_val = 0;
+            speed_val = 0;
+        }
+        else
         {
-            led2 = !led2;
+            if (!brake && !regen)
+            {
+                speed_val = 0;
+                curr_val = curr_reading;
+            }
+            else if(!brake && regen)
+            {
+                speed_val = 0;
+                curr_val = 0;
+            }
+            else
+            {
+                if (!rev)
+                {
+                    speed_val = (-1)*speed_reading_ms;
+                }
+                else
+                {
+                    speed_val = speed_reading_ms;
+                }
+                
+                if (!accel)
+                {
+                    curr_val = curr_reading;
+                }
+                else
+                {
+                    curr_val = 0;
+                }
+            }
         }
-        send();  
+        //pc.printf("speed_val: %f\r\n", speed_val);
+        //pc.printf("curr_val: %f\r\n\r\n", curr_val);
+        //sendCAN();
+        //pc.printf("\r\n\r\n");
+        //wait(3);
     //}
 }
\ No newline at end of file