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 mbed-STM32F103C8T6
Diff: main.cpp
- Revision:
- 7:467e350d1a10
- Parent:
- 6:41a4ad385daa
--- a/main.cpp Tue Dec 30 10:10:02 2014 +0000
+++ b/main.cpp Wed Jun 10 20:15:48 2020 +0000
@@ -13,56 +13,49 @@
********************************************************************************
*/
-
+//#include "MapleMini.h"
+#include "stm32f103c8t6.h"
#include "mbed.h"
#include "ecu_simulator.h"
#include "globals.h"
-#include "TextLCD.h"
-TextLCD lcd(p18, p19, p20, p17, p16, p15, p14); // rs, rw, e, d0, d1, d2, d3
-DigitalIn click(p21); // Joystick inputs
-DigitalIn right(p22);
-DigitalIn down(p23);
-DigitalIn left(p24);
-DigitalIn up(p25);
+// pinout for Maple Mini
+DigitalIn click(PA_1); // Button inputs
+// pinout for lpc1768
+//DigitalIn click(p21); // Joystick inputs
+//DigitalIn right(p22);
+//DigitalIn down(p23);
+//DigitalIn left(p24);
+//DigitalIn up(p25);
ecu_sim sim(CANSPEED_500); //Create object and set CAN speed
ecu_t ecu;
-void update_menu(void);
-void update_param(unsigned char dir);
+Ticker timer;
+
+void attime()
+{
+ //second_tick = true;
+ //myled = !myled;
+ led1 = !led1;
+}
// Menu defines
-#define L0_MAIN_MENU 0
-#define L0_RPM 1
-#define L0_THROTTLE 2
-#define L0_SPEED 3
-#define L0_COOLANT 4
-#define L0_MAF 5
-#define L0_O2 6
-#define L0_DTC 7
-#define INC 0
-#define DEC 1
-
-#define CAN250 0
-#define CAN500 1
-unsigned char menu_state;
-unsigned char canspeed;
+//unsigned char menu_state;
+//unsigned char canspeed;
int main()
{
+ confSysClock(); //Configure system clock (72MHz HSE clock, 48MHz USB clock)
pc.baud(115200);
-
+
//Enable Pullup
click.mode(PullUp);
- right.mode(PullUp);
- down.mode(PullUp);
- left.mode(PullUp);
- up.mode(PullUp);
- printf("\n\nECU Simulator v1.0 \n");
+
+ pc.printf("\n\nRIXEN Simulator v1.1 \r\n");
led1 = 1;
wait(0.1);
@@ -74,213 +67,40 @@
wait(0.2);
led1 = 0; led2 = 0; led3 = 0; led4 = 0;
- lcd.cls();
- lcd.locate(0,0); // Set LCD cursor position
- lcd.printf("ECU Simulator v1.0");
- lcd.locate(0,1);
- lcd.printf("www.skpang.co.uk");
wait(1);
- lcd.cls();
- lcd.printf("<- Params ->");
- lcd.locate(0,1);
- lcd.printf("500kb/s");
+ //canspeed = CAN500;
+ ecu.dtc = false;
+ ecu.active_fault = false;
- canspeed = CAN500;
- menu_state = L0_MAIN_MENU;
- ecu.dtc = false;
+ sim.canspeed(CANSPEED_500);
wait(0.2);
led1 = 1;
- while(1) { // Main CAN loop
-
+ timer.attach(&attime, 1);
+
+ while(1) // Main CAN loop
+ {
sim.request();
- if(!down){
- update_param(DEC);
- }
-
- if(!up){
- update_param(INC);
+ if(!click)
+ {
+ //update_param(DEC);
+ if ( ecu.active_fault == true )
+ {
+ ecu.active_fault = false;
+ led4 = 0;
+ } else {
+ ecu.active_fault = true;
+ led4 = 1;
+ }
+ wait(0.1); //Delay for auto repeat
}
-
- if(!left){
- if(menu_state != L0_MAIN_MENU) menu_state--;
- update_menu();
- }
-
- if(!right){
- if(menu_state != L0_DTC) menu_state++;
- update_menu();
- }
-
+ //wait(0.1); //Delay cause can bus problems
+ //led1 = 1;
+ //wait(0.1);
+ //led1 = 0;
}
}
-void update_param(unsigned char dir)
-{
- char buffer[20];
- lcd.locate(0,1);
- switch(menu_state)
- {
- case L0_MAIN_MENU:
- if(dir == INC){
- sim.canspeed(CANSPEED_500);
- lcd.printf("500kb/s");
- canspeed = CAN500;
- }else {
- sim.canspeed(CANSPEED_250);
- lcd.printf("250kb/s");
- canspeed = CAN250;
- }
-
- break;
-
- case L0_RPM:
- if(dir == INC){
- ecu.engine_rpm = ecu.engine_rpm +10;
- } else ecu.engine_rpm = ecu.engine_rpm - 10;
-
- sprintf(buffer,"%d RPM ", (int)((((ecu.engine_rpm & 0xff00) >> 8) * 256) + (ecu.engine_rpm & 0x00ff)) / 4);
- lcd.printf(buffer);
- break;
-
- case L0_THROTTLE:
- if(dir == INC){
- ecu.throttle_position++;
- } else ecu.throttle_position--;
-
- sprintf(buffer,"%d %% ", (int)ecu.throttle_position);
- lcd.printf(buffer);
- break;
-
- case L0_SPEED:
- if(dir == INC){
- ecu.vehicle_speed++;
- } else ecu.vehicle_speed--;
-
- sprintf(buffer,"%d km/h ",(int) ecu.vehicle_speed);
- lcd.printf(buffer);
- break;
-
- case L0_COOLANT:
- if(dir == INC){
- ecu.coolant_temp++;
- } else ecu.coolant_temp--;
-
- sprintf(buffer,"%d C ",(int) ecu.coolant_temp - 40);
- lcd.printf(buffer);
- break;
-
- case L0_MAF:
- if(dir == INC){
- ecu.maf_airflow = ecu.maf_airflow +10;
- } else ecu.maf_airflow = ecu.maf_airflow - 10;
-
- sprintf(buffer,"%d g/s ", (int)((((ecu.maf_airflow & 0xff00) >> 8) * 256) + (ecu.maf_airflow & 0x00ff)) / 100);
- lcd.printf(buffer);
- break;
-
- case L0_O2:
- if(dir == INC){
- ecu.o2_voltage = ecu.o2_voltage +10;
- } else ecu.o2_voltage = ecu.o2_voltage - 10;
-
- sprintf(buffer,"%d ", (int)ecu.o2_voltage);
- lcd.printf(buffer);
- break;
-
- case L0_DTC:
- if(dir == INC){
- ecu.dtc = true;
- led4 = 1;
- } else {
- ecu.dtc = false;
- led4 = 0;
- }
-
- sprintf(buffer,"%d ", (int)ecu.dtc);
- lcd.printf(buffer);
- break;
-
- }
-
- wait(0.1); //Delay for auto repeat
-
-
-}
-void update_menu(void)
-{
- char buffer[20];
- lcd.cls();
- lcd.locate(0,0);
-
- switch(menu_state)
- {
- case L0_MAIN_MENU:
- lcd.printf("CAN speed");
- lcd.locate(0,1);
- if(canspeed == CAN500) lcd.printf("500kb/s");
- else lcd.printf("250kb/s");
- break;
-
- case L0_RPM:
- lcd.printf("Engine RPM");
- lcd.locate(0,1);
- sprintf(buffer,"%d RPM ", (int) ((((ecu.engine_rpm & 0xff00) >> 8) * 256) + (ecu.engine_rpm & 0x00ff)) / 4);
- lcd.printf(buffer);
- break;
-
- case L0_THROTTLE:
- lcd.printf("Throttle pos");
- lcd.locate(0,1);
- sprintf(buffer,"%d % ", ecu.throttle_position);
- lcd.printf(buffer);
- break;
-
- case L0_SPEED:
- lcd.printf("Vehicle speed");
- lcd.locate(0,1);
- sprintf(buffer,"%d kph ", ecu.vehicle_speed);
- lcd.printf(buffer);
- break;
-
- case L0_COOLANT:
- lcd.printf("Coolant temp");
- lcd.locate(0,1);
- sprintf(buffer,"%d C ",(int) ecu.coolant_temp - 40);
- lcd.printf(buffer);
- break;
-
- case L0_MAF:
- lcd.printf("MAF air flow ");
- lcd.locate(0,1);
- sprintf(buffer,"%d g/s ", ecu.maf_airflow);
- lcd.printf(buffer);
- break;
-
- case L0_O2:
- lcd.printf("Oxygen sensor v.");
- lcd.locate(0,1);
- sprintf(buffer,"%d ", ecu.o2_voltage);
- lcd.printf(buffer);
- break;
-
- case L0_DTC:
- lcd.printf("DTC");
- lcd.locate(0,1);
- sprintf(buffer,"%d ", ecu.dtc);
- lcd.printf(buffer);
- break;
-
- }
-
- while(!left); //Wait for key to be released
- while(!right);
- wait(0.05);
-
-}
-
-
-