The Code Repository for the REV0 Steering Wheel.

Dependencies:   CANBuffer KS0108_fork mbed-rtos mbed CAN Addresses

Fork of REVO_Updated_Steering by Penn Electric

Revision:
0:313541d8f8be
Child:
4:a4fb060e7840
diff -r 000000000000 -r 313541d8f8be Steering.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Steering.cpp	Sat Sep 27 18:43:15 2014 +0000
@@ -0,0 +1,293 @@
+#include "Steering.h"
+
+void HomeScreen()
+{
+    CANMessage Rxmsg;
+    ftc rcv;
+    rcv.FLOAT=0.0;
+    char dat[4];
+    float power_ratio=0.0;
+    printf("Homescreen\n\r");
+    display.ClearScreen();
+    display.SelectFont(Arial12,BLACK,ReadData);
+    display.GotoXY(0,0);
+    display.PrintString(" HOME SCREEN");
+    while( !(biSWTL.read() || biSWTR.read() || biSWBR.read()) )
+    {
+        if(CAN_Steering.read(Rxmsg))
+        {
+            for(int i=0; i<4; i++)
+                rcv.C_FLOAT[i]=Rxmsg.data[i];
+            if(Rxmsg.id == BATTERY_VOLTAGE_ID)
+            {
+                display.GotoXY(0,16);
+                display.PrintString(" PV: ");     
+                sprintf(dat,"%2.2f",rcv.FLOAT);
+                display.PrintString(dat);
+                display.PrintString("V");
+            }
+            if(Rxmsg.id == BATTERY_POWER_ID)
+            {
+                display.GotoXY(64,16);
+                display.PrintString(" PP: ");
+                power_ratio=rcv.FLOAT/10000;        
+                sprintf(dat,"%2.2f",power_ratio);
+                display.PrintString(dat);
+                display.PrintString("kW");
+            }
+            if(Rxmsg.id == PCM_STATE_ID)
+            {
+                display.GotoXY(0,32);
+                display.PrintString(" STATE: ");      
+                display.PrintNumber(rcv.FLOAT);
+            }
+        }
+    }    
+    return;    
+}
+
+void AMSScreen1()
+{
+    CANMessage Rxmsg;
+    ftc rcv;
+    char dat[4];
+    rcv.FLOAT=0.0;
+    printf("AMSScreen1");
+    display.ClearScreen();
+    display.SelectFont(Arial12,BLACK,ReadData);
+    while( !(biSWTL.read() || biSWTR.read() || biSWBL.read()) )
+    {
+        printf("iN LOOP1");
+        if(CAN_Steering.read(Rxmsg))
+        {
+            for(int i=0; i<4; i++)
+                rcv.C_FLOAT[i]=Rxmsg.data[i];
+            if(Rxmsg.id == BATTERY_VOLTAGE_ID)
+            {
+                display.GotoXY(0,0);
+                display.PrintString(" pv: ");
+                sprintf(dat,"%2.2f",rcv.FLOAT);
+                display.PrintString(dat);
+            }
+            if(Rxmsg.id == BATTERY_POWER_ID)
+            {
+                display.GotoXY(0,16);
+                display.PrintString(" pp: ");
+                sprintf(dat,"%2.2f",rcv.FLOAT);
+                display.PrintString(dat);
+            }
+            if(Rxmsg.id == BATTERY_CURRENT_ID)
+            {
+                display.GotoXY(0,32);
+                display.PrintString(" pi: ");
+                sprintf(dat,"%2.2f",rcv.FLOAT);
+                display.PrintString(dat);
+            }
+            
+            //Column 2
+            if(Rxmsg.id == BATTERY_MIN_CELLVOLTAGE_ID)
+            {
+                display.GotoXY(49,0);
+                display.PrintString(" min cell V: ");
+                sprintf(dat,"%2.2f",rcv.FLOAT);
+                display.PrintString(dat);
+            }
+            if(Rxmsg.id == BATTERY_MAX_CELLVOLTAGE_ID)
+            {
+                display.GotoXY(49,16);
+                display.PrintString(" max cell V: ");
+                sprintf(dat,"%2.2f",rcv.FLOAT);
+                display.PrintString(dat);
+            }
+            if(Rxmsg.id == BATTERY_AVG_CELLVOLTAGE_ID)
+            {
+                display.GotoXY(49,32);
+                display.PrintString(" avg cell V: ");
+                sprintf(dat,"%2.2f",rcv.FLOAT);
+                display.PrintString(dat);
+            }
+        }
+        screen=1;                 
+    }   
+    return;   
+}    
+
+void AMSScreen2()
+{
+    CANMessage Rxmsg;
+    ftc rcv;
+    char dat[4];
+    //ftc send;
+    rcv.FLOAT=0.0;
+    //send.FLOAT=65.6432;
+    printf("AMSScreen2\n\r");
+    display.ClearScreen();
+    display.SelectFont(Arial12,BLACK,ReadData);
+    while( !(biSWTL.read() || biSWTR.read() || biSWBL.read()) )
+    {
+        printf("iN LOOP2");
+        if(CAN_Steering.read(Rxmsg))
+        {
+            for(int i=0; i<4; i++)
+                rcv.C_FLOAT[i]=Rxmsg.data[i];
+            if(Rxmsg.id == BATTERY_MIN_CELLTEMPERATURE_ID)
+            {
+                display.GotoXY(0,0);
+                display.PrintString(" mn cll T: ");
+                sprintf(dat,"%2.2f",rcv.FLOAT);
+                display.PrintString(dat);
+            }
+            if(Rxmsg.id == BATTERY_MAX_CELLTEMPERATURE_ID)
+            {
+                display.GotoXY(0,16);
+                display.PrintString(" mx cll T: ");
+                sprintf(dat,"%2.2f",rcv.FLOAT);
+                display.PrintString(dat);
+            }
+            if(Rxmsg.id == BATTERY_AVG_CELLTEMPERATURE_ID)
+            {
+                display.GotoXY(0,32);
+                display.PrintString(" avg cell T: ");
+                sprintf(dat,"%2.2f",rcv.FLOAT);
+                display.PrintString(dat);
+            }
+            
+            //Column 2
+            if(Rxmsg.id == AMS_BATTERY_STATE)
+            {
+                if((rcv.C_FLOAT[0] & 0xC0) == 0xC0)
+                {
+                    display.GotoXY(70,0);
+                    display.PrintString(" AIRS: ");
+                    display.PrintString("CLOS");
+                }
+                else
+                {
+                    display.GotoXY(70,0);
+                    display.PrintString(" AIRS: ");
+                    display.PrintString("OPEN");
+                }
+                
+                if((rcv.C_FLOAT[0] & 0x04) == 0x04)
+                {
+                    display.GotoXY(70,16);
+                    display.PrintString(" Prchrg: ");
+                    display.PrintString("on");
+                }
+                else
+                {
+                    display.GotoXY(70,16);
+                    display.PrintString(" Prchrg: ");
+                    display.PrintString("off");
+                }                
+            }
+            if(Rxmsg.id == AMS_BATTERY_STATE)
+            {
+                display.GotoXY(70,16);
+                display.PrintString(" Prchrg: ");
+                display.PrintString("off");
+            }
+        }
+        screen=0;         
+    }
+    return;        
+}
+
+void ON()
+{
+    Txmsg_Drive.data[0]|=(1<<0);   
+    wait(0.1);
+    
+    display.ClearScreen();
+    display.SelectFont(Arial12,BLACK,ReadData);
+    display.GotoXY(26,16);
+    display.PrintString(" ON    INITIATED");
+    printf("ON Initiated\n\r");
+    //screen=0;
+    return;
+}
+
+void ResetCommand()
+{
+    Txmsg_Drive.data[0]&=~(1<<0);
+    wait(0.1);
+    
+    display.ClearScreen();
+    display.SelectFont(Arial12,BLACK,ReadData);
+    display.GotoXY(16,16);
+    display.PrintString(" RESET INITIATED");
+    printf("Reset Initiated\n\r");
+    //screen=0;
+    
+    return;
+}    
+
+void Powerstream()
+{
+    CANMessage Rxmsg;
+    float power_ratio;
+    ftc rcv;
+    rcv.FLOAT=0.0;
+    if(CAN_Steering.read(Rxmsg))
+    {   
+        if(Rxmsg.id == BATTERY_POWER_ID)
+        {
+            for(int i=0; i<4; i++)
+                rcv.C_FLOAT[i]=Rxmsg.data[i];
+            power_ratio=rcv.FLOAT/80000;
+            ledstream.write(power_ratio);
+        }
+    }   
+}
+
+void Init()
+{
+    pc.baud(230400);
+    CAN_Steering.frequency(500000);
+    for(int i = 0; i<4; i++)
+        drive[i] = (0x00);
+    ledstream.write(0);
+    call_ledstream.attach(&Powerstream,0.1);
+}
+
+int main()
+{
+    Init();
+    //int flag=1;
+    wait(0.1);
+    display.GotoXY(10,16);
+    display.SelectFont(Arial_14,BLACK,ReadData);
+    display.PrintString("Penn Electric Racing");
+    display.GotoXY(20,32); 
+    display.PrintString("Live The Dream");
+    screen=0;
+    wait(1);
+    
+    while(1)
+    {
+        if(biSWBL.read())
+            HomeScreen();
+        
+        if(biSWTR.read())
+        {
+            ON();
+            wait(1);
+            HomeScreen();
+        }
+        if(biSWTL.read())
+        {
+            ResetCommand();
+            wait(1);
+            HomeScreen();
+        }
+        if(biSWBR.read())
+        { 
+            if(screen)
+                AMSScreen2();
+            else
+                AMSScreen1();   
+        }
+        CAN_Steering.write(Txmsg_Drive);        
+        wait(0.3);    
+    }        
+}