03.04.2019. revision - preliminary version with important notes.

Dependencies:   mbed LCD_DISCO_F469NIa CANlibrary SD_DISCO_F469NI BSP_DISCO_F469NIa EEPROM_DISCO_F469NI

Committer:
Stefan_Sofijanic
Date:
Wed Apr 03 11:27:45 2019 +0000
Revision:
0:e72467972ec9
03.04.2019. revision - preliminary version with important notes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Stefan_Sofijanic 0:e72467972ec9 1 #include "screen_library.h"
Stefan_Sofijanic 0:e72467972ec9 2
Stefan_Sofijanic 0:e72467972ec9 3 extern LCD_DISCO_F469NI lcd;
Stefan_Sofijanic 0:e72467972ec9 4 extern SD_DISCO_F469NI sd;
Stefan_Sofijanic 0:e72467972ec9 5 extern DigitalIn change_screen_input;
Stefan_Sofijanic 0:e72467972ec9 6
Stefan_Sofijanic 0:e72467972ec9 7 extern uint8_t screen_flag,ft_main_flag,ft_2aux_flag,change_flag;
Stefan_Sofijanic 0:e72467972ec9 8 extern GEAR *Gears;
Stefan_Sofijanic 0:e72467972ec9 9 extern IMAGE LogoBig,LogoSmall,Branko,NewYearCongat;
Stefan_Sofijanic 0:e72467972ec9 10
Stefan_Sofijanic 0:e72467972ec9 11 extern uint16_t Rpm0, Speed0, Gear0, Water_Temp0, Oil_Temp0, TPS0, Brakes0, MAP0, Air_Temp0, Lambda0, Volts0, Crank0;
Stefan_Sofijanic 0:e72467972ec9 12 extern uint16_t Rpm, Speed, Gear, Water_Temp, Oil_Temp, TPS, Brakes, MAP, Air_Temp, Lambda, Volts, Crank;
Stefan_Sofijanic 0:e72467972ec9 13 extern int FL_LVDT0, FR_LVDT0, RL_LVDT0, RR_LVDT0, FL_LVDT, FR_LVDT, RL_LVDT, RR_LVDT;
Stefan_Sofijanic 0:e72467972ec9 14 extern int FL_LVDT_Ref,FR_LVDT_Ref,RL_LVDT_Ref,RR_LVDT_Ref;
Stefan_Sofijanic 0:e72467972ec9 15 extern int LVDT_Max;
Stefan_Sofijanic 0:e72467972ec9 16 //extern float Meter_counter,Meter_counter0;
Stefan_Sofijanic 0:e72467972ec9 17
Stefan_Sofijanic 0:e72467972ec9 18 void ChangeCommand(){ //Interrupt function for registering change command
Stefan_Sofijanic 0:e72467972ec9 19 change_flag=1;
Stefan_Sofijanic 0:e72467972ec9 20 };
Stefan_Sofijanic 0:e72467972ec9 21
Stefan_Sofijanic 0:e72467972ec9 22 void ChangeScreen(){ //Changes the screen if needed.
Stefan_Sofijanic 0:e72467972ec9 23 switch(screen_flag){
Stefan_Sofijanic 0:e72467972ec9 24 case(3):
Stefan_Sofijanic 0:e72467972ec9 25 screen_flag=1; //Change flag to new value.
Stefan_Sofijanic 0:e72467972ec9 26 ft_main_flag=1; //Set flag which point that Main screne is entered.
Stefan_Sofijanic 0:e72467972ec9 27 SetMain(); //Set Main Screne.
Stefan_Sofijanic 0:e72467972ec9 28 break;
Stefan_Sofijanic 0:e72467972ec9 29 case(1):
Stefan_Sofijanic 0:e72467972ec9 30 screen_flag=2;
Stefan_Sofijanic 0:e72467972ec9 31 SetFirstAux();
Stefan_Sofijanic 0:e72467972ec9 32 break;
Stefan_Sofijanic 0:e72467972ec9 33 case(2):
Stefan_Sofijanic 0:e72467972ec9 34 screen_flag=3;
Stefan_Sofijanic 0:e72467972ec9 35 SetSecondAux();
Stefan_Sofijanic 0:e72467972ec9 36 break;
Stefan_Sofijanic 0:e72467972ec9 37 };
Stefan_Sofijanic 0:e72467972ec9 38 change_flag=0;
Stefan_Sofijanic 0:e72467972ec9 39 };
Stefan_Sofijanic 0:e72467972ec9 40
Stefan_Sofijanic 0:e72467972ec9 41
Stefan_Sofijanic 0:e72467972ec9 42
Stefan_Sofijanic 0:e72467972ec9 43 void SetIntro(){ // Set Intro screen
Stefan_Sofijanic 0:e72467972ec9 44 DrawRGBImage(LogoBig,0,0);
Stefan_Sofijanic 0:e72467972ec9 45 wait(1);
Stefan_Sofijanic 0:e72467972ec9 46 };
Stefan_Sofijanic 0:e72467972ec9 47
Stefan_Sofijanic 0:e72467972ec9 48 void SetMain(){ // Set Main screen
Stefan_Sofijanic 0:e72467972ec9 49 //Erase previous screen
Stefan_Sofijanic 0:e72467972ec9 50 lcd.SetTextColor(LCD_COLOR_WHITE);
Stefan_Sofijanic 0:e72467972ec9 51 lcd.FillRect(0,0,800,480);
Stefan_Sofijanic 0:e72467972ec9 52 lcd.SetTextColor(LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 53 //Draw Main screen
Stefan_Sofijanic 0:e72467972ec9 54 DrawSpeedMeter();
Stefan_Sofijanic 0:e72467972ec9 55 DrawRGBImage(LogoSmall,LogoSmallXPos,LogoSmallYPos);
Stefan_Sofijanic 0:e72467972ec9 56 lcd.SetFont(&Font24);
Stefan_Sofijanic 0:e72467972ec9 57 lcd.DisplayStringAt(30,170,(uint8_t*)"Oil Temp",LEFT_MODE);
Stefan_Sofijanic 0:e72467972ec9 58 lcd.DisplayStringAt(30,320,(uint8_t*)"Water Temp",LEFT_MODE);
Stefan_Sofijanic 0:e72467972ec9 59 lcd.DisplayStringAt(584,170,(uint8_t*)"TPS",LEFT_MODE);
Stefan_Sofijanic 0:e72467972ec9 60 lcd.SetTextColor(LCD_COLOR_DARKRED);
Stefan_Sofijanic 0:e72467972ec9 61 lcd.FillRect(560,340,230,68);
Stefan_Sofijanic 0:e72467972ec9 62 lcd.SetBackColor(LCD_COLOR_DARKRED);
Stefan_Sofijanic 0:e72467972ec9 63 PrintString("BRAKE",50,575,350,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 64 lcd.SetBackColor(LCD_COLOR_WHITE);
Stefan_Sofijanic 0:e72467972ec9 65
Stefan_Sofijanic 0:e72467972ec9 66 //Display initial values
Stefan_Sofijanic 0:e72467972ec9 67 PrintChar(Gears[Gear],GearXPos,GearYPos,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 68 SetNumber(Oil_Temp,100,OilTempXPos,OilTempYPos,3,0,0);
Stefan_Sofijanic 0:e72467972ec9 69 SetNumber(Water_Temp,100,WaterTempXPos,WaterTempYPos,3,0,0);
Stefan_Sofijanic 0:e72467972ec9 70 SetNumber(TPS,100,TPSXPos,TPSYPos,3,0,0);
Stefan_Sofijanic 0:e72467972ec9 71 BrakeSignal(Brakes);
Stefan_Sofijanic 0:e72467972ec9 72 };
Stefan_Sofijanic 0:e72467972ec9 73
Stefan_Sofijanic 0:e72467972ec9 74
Stefan_Sofijanic 0:e72467972ec9 75 void SetFirstAux(){ // Set First Auxiliary screen
Stefan_Sofijanic 0:e72467972ec9 76 // Erase previous screen
Stefan_Sofijanic 0:e72467972ec9 77 lcd.SetTextColor(LCD_COLOR_WHITE);
Stefan_Sofijanic 0:e72467972ec9 78 lcd.FillRect(0,0,800,480);
Stefan_Sofijanic 0:e72467972ec9 79 lcd.SetTextColor(LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 80 //Draw First Auxiliary screen
Stefan_Sofijanic 0:e72467972ec9 81 PrintString("RPM",50,20,30,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 82 PrintString("MAP",50,20,90,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 83 PrintString("Air Temp",50,20,150,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 84 PrintString("Lambda",50,20,210,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 85 PrintString("Volts",50,20,270,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 86 PrintString("Distance:",50,20,330,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 87 //PrintString("",50,470,30,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 88 PrintString("kPa",50,560,90,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 89 PrintString("C",50,560,150,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 90 PrintString("Ratio",50,560,210,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 91 PrintString("V",50,560,270,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 92 PrintString("km",50,560,330,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 93 DrawRGBImage(LogoSmall,LogoSmallXPos,LogoSmallYPos);
Stefan_Sofijanic 0:e72467972ec9 94 //Display initial values
Stefan_Sofijanic 0:e72467972ec9 95 SetNumber(Rpm,50,RpmXPos,RpmYPos,5,0,0);
Stefan_Sofijanic 0:e72467972ec9 96 SetNumber(MAP,50,MAPXPos,MAPYPos,3,0,0);
Stefan_Sofijanic 0:e72467972ec9 97 SetNumber(Air_Temp,50,AirTempXPos,AirTempYPos,3,0,0);
Stefan_Sofijanic 0:e72467972ec9 98 SetNumber(Lambda,50,LambdaXPos,LambdaYPos,4,1,0);
Stefan_Sofijanic 0:e72467972ec9 99 SetNumber(Volts,50,VoltsXPos,VoltsYPos,3,2,0);
Stefan_Sofijanic 0:e72467972ec9 100 //SetNumber((int)(Meter_counter/10),50,Meter_counterXPos,Meter_counterYPos,5,3,0);
Stefan_Sofijanic 0:e72467972ec9 101 };
Stefan_Sofijanic 0:e72467972ec9 102
Stefan_Sofijanic 0:e72467972ec9 103
Stefan_Sofijanic 0:e72467972ec9 104 void SetSecondAux(){ // Set Second Auxiliary screen
Stefan_Sofijanic 0:e72467972ec9 105 // Erase previous screen
Stefan_Sofijanic 0:e72467972ec9 106 lcd.SetTextColor(LCD_COLOR_WHITE);
Stefan_Sofijanic 0:e72467972ec9 107 lcd.FillRect(0,0,800,480);
Stefan_Sofijanic 0:e72467972ec9 108 lcd.SetTextColor(LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 109 // Draw Second Auxiliary screen
Stefan_Sofijanic 0:e72467972ec9 110 PrintString("LVDT Sensors",50,200,20,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 111 DrawRGBImage(LogoSmall,LogoSmallXPos,LogoSmallYPos);
Stefan_Sofijanic 0:e72467972ec9 112 lcd.SetTextColor(LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 113 lcd.SetFont(&Font24);
Stefan_Sofijanic 0:e72467972ec9 114 lcd.DisplayStringAt(FLLVDTBarXPos+25,FLLVDTBarYPos,(uint8_t*)"FL",LEFT_MODE);
Stefan_Sofijanic 0:e72467972ec9 115 lcd.DisplayStringAt(FRLVDTBarXPos+25,FRLVDTBarYPos,(uint8_t*)"FR",LEFT_MODE);
Stefan_Sofijanic 0:e72467972ec9 116 lcd.DisplayStringAt(RLLVDTBarXPos+25,RLLVDTBarYPos,(uint8_t*)"BL",LEFT_MODE);
Stefan_Sofijanic 0:e72467972ec9 117 lcd.DisplayStringAt(RRLVDTBarXPos+25,RRLVDTBarYPos,(uint8_t*)"BR",LEFT_MODE);
Stefan_Sofijanic 0:e72467972ec9 118 // Display initial values
Stefan_Sofijanic 0:e72467972ec9 119 SetNumber(FL_LVDT,100,FLLVDTXPos,FLLVDTYPos,3,0,1);
Stefan_Sofijanic 0:e72467972ec9 120 SetNumber(FR_LVDT,100,FRLVDTXPos,FRLVDTYPos,3,0,1);
Stefan_Sofijanic 0:e72467972ec9 121 SetNumber(RL_LVDT,100,RLLVDTXPos,RLLVDTYPos,3,0,1);
Stefan_Sofijanic 0:e72467972ec9 122 SetNumber(RR_LVDT,100,RRLVDTXPos,RRLVDTYPos,3,0,1);
Stefan_Sofijanic 0:e72467972ec9 123 UpdateLVDTScale(FL_LVDT,-100,FLLVDTBarXPos,FLLVDTBarYPos);
Stefan_Sofijanic 0:e72467972ec9 124 UpdateLVDTScale(FR_LVDT,-100,FRLVDTBarXPos,FRLVDTBarYPos);
Stefan_Sofijanic 0:e72467972ec9 125 UpdateLVDTScale(RL_LVDT,-100,RLLVDTBarXPos,RLLVDTBarYPos);
Stefan_Sofijanic 0:e72467972ec9 126 UpdateLVDTScale(RR_LVDT,-100,RRLVDTBarXPos,RRLVDTBarYPos);
Stefan_Sofijanic 0:e72467972ec9 127
Stefan_Sofijanic 0:e72467972ec9 128 };
Stefan_Sofijanic 0:e72467972ec9 129
Stefan_Sofijanic 0:e72467972ec9 130
Stefan_Sofijanic 0:e72467972ec9 131 void MainUpdate(){ // Update information in Main screen
Stefan_Sofijanic 0:e72467972ec9 132 lcd.SetTextColor(LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 133 switch(ft_main_flag){ // Check is main update is first time entered. If yes set Speed0 to 0 to acordingly draw update.
Stefan_Sofijanic 0:e72467972ec9 134 case(0):break;
Stefan_Sofijanic 0:e72467972ec9 135 case(1):
Stefan_Sofijanic 0:e72467972ec9 136 Speed0=0;
Stefan_Sofijanic 0:e72467972ec9 137 ft_main_flag=0; //Set flag to 0.
Stefan_Sofijanic 0:e72467972ec9 138 break;
Stefan_Sofijanic 0:e72467972ec9 139 };
Stefan_Sofijanic 0:e72467972ec9 140 if(Speed!=Speed0){ //Check is value is changed. If it is then update it on screen.
Stefan_Sofijanic 0:e72467972ec9 141 UpdateSpeedMeter(Speed0/10,(Speed-Speed0)/10);
Stefan_Sofijanic 0:e72467972ec9 142 };
Stefan_Sofijanic 0:e72467972ec9 143 if(Gear!=Gear0){
Stefan_Sofijanic 0:e72467972ec9 144 PrintChar(Gears[Gear],GearXPos,GearYPos,LCD_COLOR_BLACK);
Stefan_Sofijanic 0:e72467972ec9 145 };
Stefan_Sofijanic 0:e72467972ec9 146 if(Oil_Temp!=Oil_Temp0){
Stefan_Sofijanic 0:e72467972ec9 147 ChangeNumber(Oil_Temp,Oil_Temp0,100,OilTempXPos,OilTempYPos,3,0,0);
Stefan_Sofijanic 0:e72467972ec9 148 };
Stefan_Sofijanic 0:e72467972ec9 149 if(Water_Temp!=Water_Temp0){
Stefan_Sofijanic 0:e72467972ec9 150 ChangeNumber(Water_Temp,Water_Temp0,100,WaterTempXPos,WaterTempYPos,3,0,0);
Stefan_Sofijanic 0:e72467972ec9 151 };
Stefan_Sofijanic 0:e72467972ec9 152 if(TPS!=TPS0){
Stefan_Sofijanic 0:e72467972ec9 153 ChangeNumber(TPS,TPS0,100,TPSXPos,TPSYPos,3,0,0);
Stefan_Sofijanic 0:e72467972ec9 154 };
Stefan_Sofijanic 0:e72467972ec9 155 if(Brakes!=Brakes0){
Stefan_Sofijanic 0:e72467972ec9 156 BrakeSignal(Brakes);
Stefan_Sofijanic 0:e72467972ec9 157 };
Stefan_Sofijanic 0:e72467972ec9 158 };
Stefan_Sofijanic 0:e72467972ec9 159
Stefan_Sofijanic 0:e72467972ec9 160
Stefan_Sofijanic 0:e72467972ec9 161 void FirstAuxUpdate(){ // Update information in First Auxiliary screen
Stefan_Sofijanic 0:e72467972ec9 162 if (Rpm!=Rpm0){
Stefan_Sofijanic 0:e72467972ec9 163 ChangeNumber(Rpm,Rpm0,50,RpmXPos,RpmYPos,5,0,0);
Stefan_Sofijanic 0:e72467972ec9 164 };
Stefan_Sofijanic 0:e72467972ec9 165 if (MAP!=MAP0){
Stefan_Sofijanic 0:e72467972ec9 166 ChangeNumber(MAP,MAP0,50,MAPXPos,MAPYPos,3,0,0);
Stefan_Sofijanic 0:e72467972ec9 167 };
Stefan_Sofijanic 0:e72467972ec9 168 if (Air_Temp!=Air_Temp0){
Stefan_Sofijanic 0:e72467972ec9 169 ChangeNumber(Air_Temp,Air_Temp0,50,AirTempXPos,AirTempYPos,3,0,0);
Stefan_Sofijanic 0:e72467972ec9 170 };
Stefan_Sofijanic 0:e72467972ec9 171 if (Lambda!=Lambda0){
Stefan_Sofijanic 0:e72467972ec9 172 ChangeNumber(Lambda,Lambda0,50,LambdaXPos,LambdaYPos,4,1,0);
Stefan_Sofijanic 0:e72467972ec9 173 };
Stefan_Sofijanic 0:e72467972ec9 174 if (Volts!=Volts0){
Stefan_Sofijanic 0:e72467972ec9 175 ChangeNumber(Volts,Volts0,50,VoltsXPos,VoltsYPos,3,2,0);
Stefan_Sofijanic 0:e72467972ec9 176 };
Stefan_Sofijanic 0:e72467972ec9 177 //if (Meter_counter!=Meter_counter0){
Stefan_Sofijanic 0:e72467972ec9 178 // ChangeNumber((int)(Meter_counter/10),(int)(Meter_counter0/10),50,Meter_counterXPos,Meter_counterYPos,5,3,0);
Stefan_Sofijanic 0:e72467972ec9 179 //};
Stefan_Sofijanic 0:e72467972ec9 180 };
Stefan_Sofijanic 0:e72467972ec9 181
Stefan_Sofijanic 0:e72467972ec9 182 void SecondAuxUpdate(){ // Update information in Second Auxiliary screen
Stefan_Sofijanic 0:e72467972ec9 183 switch(ft_2aux_flag){ //Same as in Main.
Stefan_Sofijanic 0:e72467972ec9 184 case(0):break;
Stefan_Sofijanic 0:e72467972ec9 185 case(1):
Stefan_Sofijanic 0:e72467972ec9 186 FL_LVDT0=0;
Stefan_Sofijanic 0:e72467972ec9 187 FR_LVDT0=0;
Stefan_Sofijanic 0:e72467972ec9 188 RL_LVDT0=0;
Stefan_Sofijanic 0:e72467972ec9 189 RR_LVDT0=0;
Stefan_Sofijanic 0:e72467972ec9 190 ft_2aux_flag=0;
Stefan_Sofijanic 0:e72467972ec9 191 break;
Stefan_Sofijanic 0:e72467972ec9 192 };
Stefan_Sofijanic 0:e72467972ec9 193
Stefan_Sofijanic 0:e72467972ec9 194 if(FL_LVDT!=FL_LVDT0){
Stefan_Sofijanic 0:e72467972ec9 195 ChangeNumber(FL_LVDT,FL_LVDT0,100,FLLVDTXPos,FLLVDTYPos,3,0,1);
Stefan_Sofijanic 0:e72467972ec9 196 UpdateLVDTScale(FL_LVDT,FL_LVDT0,FLLVDTBarXPos,FLLVDTBarYPos);
Stefan_Sofijanic 0:e72467972ec9 197 };
Stefan_Sofijanic 0:e72467972ec9 198 if(FR_LVDT!=FR_LVDT0){
Stefan_Sofijanic 0:e72467972ec9 199 ChangeNumber(FR_LVDT,FR_LVDT0,100,FRLVDTXPos,FRLVDTYPos,3,0,1);
Stefan_Sofijanic 0:e72467972ec9 200 UpdateLVDTScale(FR_LVDT,FR_LVDT0,FRLVDTBarXPos,FRLVDTBarYPos);
Stefan_Sofijanic 0:e72467972ec9 201 };
Stefan_Sofijanic 0:e72467972ec9 202 if(RL_LVDT!=RL_LVDT0){
Stefan_Sofijanic 0:e72467972ec9 203 ChangeNumber(RL_LVDT,RL_LVDT0,100,RLLVDTXPos,RLLVDTYPos,3,0,1);
Stefan_Sofijanic 0:e72467972ec9 204 UpdateLVDTScale(RL_LVDT,RL_LVDT0,RLLVDTBarXPos,RLLVDTBarYPos);
Stefan_Sofijanic 0:e72467972ec9 205 };
Stefan_Sofijanic 0:e72467972ec9 206 if(RR_LVDT!=RR_LVDT0){
Stefan_Sofijanic 0:e72467972ec9 207 ChangeNumber(RR_LVDT,RR_LVDT0,100,RRLVDTXPos,RRLVDTYPos,3,0,1);
Stefan_Sofijanic 0:e72467972ec9 208 UpdateLVDTScale(RR_LVDT,RR_LVDT0,RRLVDTBarXPos,RRLVDTBarYPos);
Stefan_Sofijanic 0:e72467972ec9 209 };
Stefan_Sofijanic 0:e72467972ec9 210 };