Marcel Visser
/
DisplayBRW
brw1
main.cpp@0:a115ff47d1c1, 2015-11-30 (annotated)
- Committer:
- reiniermarcel
- Date:
- Mon Nov 30 11:13:18 2015 +0000
- Revision:
- 0:a115ff47d1c1
ok
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
reiniermarcel | 0:a115ff47d1c1 | 1 | #include "mbed.h" |
reiniermarcel | 0:a115ff47d1c1 | 2 | #include "RA8875.h" |
reiniermarcel | 0:a115ff47d1c1 | 3 | |
reiniermarcel | 0:a115ff47d1c1 | 4 | Serial Fc(p28, p27); |
reiniermarcel | 0:a115ff47d1c1 | 5 | |
reiniermarcel | 0:a115ff47d1c1 | 6 | int fuelcellStatus = -1; |
reiniermarcel | 0:a115ff47d1c1 | 7 | int fuelcellAmbientRawT; |
reiniermarcel | 0:a115ff47d1c1 | 8 | float fuelcellAmbientT; |
reiniermarcel | 0:a115ff47d1c1 | 9 | int fuelcellStackRawV; |
reiniermarcel | 0:a115ff47d1c1 | 10 | int fuelcellStackRawIHighByte; |
reiniermarcel | 0:a115ff47d1c1 | 11 | int fuelcellStackRawILowByte; |
reiniermarcel | 0:a115ff47d1c1 | 12 | int fuelcellStackRawH2Sensor; |
reiniermarcel | 0:a115ff47d1c1 | 13 | |
reiniermarcel | 0:a115ff47d1c1 | 14 | int fuelcellStackRawT; |
reiniermarcel | 0:a115ff47d1c1 | 15 | int fuelcellRawOutputCurrent1; //high byte |
reiniermarcel | 0:a115ff47d1c1 | 16 | int fuelcellRawOutputCurrent2; //low byte |
reiniermarcel | 0:a115ff47d1c1 | 17 | int fuelcellBatteryRawV; |
reiniermarcel | 0:a115ff47d1c1 | 18 | float fuelcellStackV; |
reiniermarcel | 0:a115ff47d1c1 | 19 | float fuelcellStackI; |
reiniermarcel | 0:a115ff47d1c1 | 20 | float h2SensorVoltage; |
reiniermarcel | 0:a115ff47d1c1 | 21 | float fuelcellStackPower; |
reiniermarcel | 0:a115ff47d1c1 | 22 | float fuelcellStackT; |
reiniermarcel | 0:a115ff47d1c1 | 23 | float fuelcellOutputCurrent;// |
reiniermarcel | 0:a115ff47d1c1 | 24 | float fuelcellBatteryV; |
reiniermarcel | 0:a115ff47d1c1 | 25 | float PWRused = 0.0; |
reiniermarcel | 0:a115ff47d1c1 | 26 | |
reiniermarcel | 0:a115ff47d1c1 | 27 | InterruptIn S(p15); |
reiniermarcel | 0:a115ff47d1c1 | 28 | float speed = 0.0; |
reiniermarcel | 0:a115ff47d1c1 | 29 | float avgspeed = 0.0; |
reiniermarcel | 0:a115ff47d1c1 | 30 | float necspeed = 0.0; |
reiniermarcel | 0:a115ff47d1c1 | 31 | float wielomtrek = 1.75; |
reiniermarcel | 0:a115ff47d1c1 | 32 | bool rond = 0; |
reiniermarcel | 0:a115ff47d1c1 | 33 | Timer t; |
reiniermarcel | 0:a115ff47d1c1 | 34 | Timer teller; |
reiniermarcel | 0:a115ff47d1c1 | 35 | Ticker tick; |
reiniermarcel | 0:a115ff47d1c1 | 36 | |
reiniermarcel | 0:a115ff47d1c1 | 37 | int seconde = 0; |
reiniermarcel | 0:a115ff47d1c1 | 38 | int sec = 0; |
reiniermarcel | 0:a115ff47d1c1 | 39 | int min = 0; |
reiniermarcel | 0:a115ff47d1c1 | 40 | int lmin = 39; |
reiniermarcel | 0:a115ff47d1c1 | 41 | int lsec = 0; |
reiniermarcel | 0:a115ff47d1c1 | 42 | |
reiniermarcel | 0:a115ff47d1c1 | 43 | float afstandtogo = 17000.0; |
reiniermarcel | 0:a115ff47d1c1 | 44 | float afstand = 0.0; |
reiniermarcel | 0:a115ff47d1c1 | 45 | float tijd = 39.0*60.0; |
reiniermarcel | 0:a115ff47d1c1 | 46 | color_t Kleur1; |
reiniermarcel | 0:a115ff47d1c1 | 47 | color_t Kleur6; |
reiniermarcel | 0:a115ff47d1c1 | 48 | |
reiniermarcel | 0:a115ff47d1c1 | 49 | |
reiniermarcel | 0:a115ff47d1c1 | 50 | |
reiniermarcel | 0:a115ff47d1c1 | 51 | void tel(){ |
reiniermarcel | 0:a115ff47d1c1 | 52 | rond=1; |
reiniermarcel | 0:a115ff47d1c1 | 53 | } |
reiniermarcel | 0:a115ff47d1c1 | 54 | |
reiniermarcel | 0:a115ff47d1c1 | 55 | |
reiniermarcel | 0:a115ff47d1c1 | 56 | void counters(){ |
reiniermarcel | 0:a115ff47d1c1 | 57 | seconde++; |
reiniermarcel | 0:a115ff47d1c1 | 58 | PWRused += (fuelcellStackPower * (1.0/3600.0)); |
reiniermarcel | 0:a115ff47d1c1 | 59 | if(seconde >= 39*60) |
reiniermarcel | 0:a115ff47d1c1 | 60 | { |
reiniermarcel | 0:a115ff47d1c1 | 61 | |
reiniermarcel | 0:a115ff47d1c1 | 62 | min = 39; |
reiniermarcel | 0:a115ff47d1c1 | 63 | sec = 00; |
reiniermarcel | 0:a115ff47d1c1 | 64 | lmin = 00; |
reiniermarcel | 0:a115ff47d1c1 | 65 | lsec = 00; |
reiniermarcel | 0:a115ff47d1c1 | 66 | Kleur1 = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 67 | Kleur6 = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 68 | } |
reiniermarcel | 0:a115ff47d1c1 | 69 | else if(seconde >= 34*60) |
reiniermarcel | 0:a115ff47d1c1 | 70 | { |
reiniermarcel | 0:a115ff47d1c1 | 71 | |
reiniermarcel | 0:a115ff47d1c1 | 72 | min = seconde/60; |
reiniermarcel | 0:a115ff47d1c1 | 73 | sec = seconde - (min*60); |
reiniermarcel | 0:a115ff47d1c1 | 74 | lsec--; |
reiniermarcel | 0:a115ff47d1c1 | 75 | if(lsec < 0){ |
reiniermarcel | 0:a115ff47d1c1 | 76 | lsec = 59; |
reiniermarcel | 0:a115ff47d1c1 | 77 | lmin--; |
reiniermarcel | 0:a115ff47d1c1 | 78 | } |
reiniermarcel | 0:a115ff47d1c1 | 79 | |
reiniermarcel | 0:a115ff47d1c1 | 80 | Kleur1 = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 81 | Kleur6 = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 82 | } |
reiniermarcel | 0:a115ff47d1c1 | 83 | else |
reiniermarcel | 0:a115ff47d1c1 | 84 | { |
reiniermarcel | 0:a115ff47d1c1 | 85 | |
reiniermarcel | 0:a115ff47d1c1 | 86 | min = seconde/60; |
reiniermarcel | 0:a115ff47d1c1 | 87 | sec = seconde - (min*60); |
reiniermarcel | 0:a115ff47d1c1 | 88 | lsec--; |
reiniermarcel | 0:a115ff47d1c1 | 89 | if(lsec < 0){ |
reiniermarcel | 0:a115ff47d1c1 | 90 | lsec = 59; |
reiniermarcel | 0:a115ff47d1c1 | 91 | lmin--; |
reiniermarcel | 0:a115ff47d1c1 | 92 | } |
reiniermarcel | 0:a115ff47d1c1 | 93 | |
reiniermarcel | 0:a115ff47d1c1 | 94 | Kleur1 = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 95 | Kleur6 = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 96 | } |
reiniermarcel | 0:a115ff47d1c1 | 97 | |
reiniermarcel | 0:a115ff47d1c1 | 98 | } |
reiniermarcel | 0:a115ff47d1c1 | 99 | |
reiniermarcel | 0:a115ff47d1c1 | 100 | void snelheidmeten(){ |
reiniermarcel | 0:a115ff47d1c1 | 101 | if (rond){ |
reiniermarcel | 0:a115ff47d1c1 | 102 | speed = (wielomtrek/t.read())*3,6; |
reiniermarcel | 0:a115ff47d1c1 | 103 | afstand += wielomtrek; |
reiniermarcel | 0:a115ff47d1c1 | 104 | t.reset(); |
reiniermarcel | 0:a115ff47d1c1 | 105 | } |
reiniermarcel | 0:a115ff47d1c1 | 106 | tijd -= teller.read(); |
reiniermarcel | 0:a115ff47d1c1 | 107 | necspeed = ((afstandtogo-afstand)/tijd)*3.6; |
reiniermarcel | 0:a115ff47d1c1 | 108 | avgspeed = (afstand/teller.read())*3.6; |
reiniermarcel | 0:a115ff47d1c1 | 109 | |
reiniermarcel | 0:a115ff47d1c1 | 110 | if(t.read() > 2.5) |
reiniermarcel | 0:a115ff47d1c1 | 111 | speed = 0.0; |
reiniermarcel | 0:a115ff47d1c1 | 112 | |
reiniermarcel | 0:a115ff47d1c1 | 113 | rond = 0; |
reiniermarcel | 0:a115ff47d1c1 | 114 | |
reiniermarcel | 0:a115ff47d1c1 | 115 | } |
reiniermarcel | 0:a115ff47d1c1 | 116 | |
reiniermarcel | 0:a115ff47d1c1 | 117 | void checkIncomingFcData() { |
reiniermarcel | 0:a115ff47d1c1 | 118 | |
reiniermarcel | 0:a115ff47d1c1 | 119 | // anything in the buffer? yes check if its a valid packet. no, return |
reiniermarcel | 0:a115ff47d1c1 | 120 | if (Fc.readable()) { |
reiniermarcel | 0:a115ff47d1c1 | 121 | |
reiniermarcel | 0:a115ff47d1c1 | 122 | |
reiniermarcel | 0:a115ff47d1c1 | 123 | |
reiniermarcel | 0:a115ff47d1c1 | 124 | fuelcellStatus = Fc.getc(); |
reiniermarcel | 0:a115ff47d1c1 | 125 | fuelcellAmbientRawT = Fc.getc(); |
reiniermarcel | 0:a115ff47d1c1 | 126 | fuelcellStackRawV = Fc.getc(); |
reiniermarcel | 0:a115ff47d1c1 | 127 | fuelcellStackRawH2Sensor = Fc.getc(); |
reiniermarcel | 0:a115ff47d1c1 | 128 | fuelcellStackRawT= Fc.getc(); |
reiniermarcel | 0:a115ff47d1c1 | 129 | fuelcellStackRawIHighByte = Fc.getc(); |
reiniermarcel | 0:a115ff47d1c1 | 130 | fuelcellStackRawILowByte = Fc.getc(); |
reiniermarcel | 0:a115ff47d1c1 | 131 | fuelcellBatteryRawV = Fc.getc(); |
reiniermarcel | 0:a115ff47d1c1 | 132 | |
reiniermarcel | 0:a115ff47d1c1 | 133 | //calculate actual values |
reiniermarcel | 0:a115ff47d1c1 | 134 | fuelcellAmbientT = fuelcellAmbientRawT * .5; |
reiniermarcel | 0:a115ff47d1c1 | 135 | fuelcellStackV = fuelcellStackRawV * .33333; |
reiniermarcel | 0:a115ff47d1c1 | 136 | fuelcellStackT = fuelcellStackRawT * .5; |
reiniermarcel | 0:a115ff47d1c1 | 137 | fuelcellStackI = ((fuelcellStackRawIHighByte<<8) + fuelcellStackRawILowByte) * .2;// |
reiniermarcel | 0:a115ff47d1c1 | 138 | fuelcellBatteryV = fuelcellBatteryRawV * .10; |
reiniermarcel | 0:a115ff47d1c1 | 139 | fuelcellStackPower = fuelcellStackI * fuelcellStackV; |
reiniermarcel | 0:a115ff47d1c1 | 140 | h2SensorVoltage = fuelcellStackRawH2Sensor *.10; |
reiniermarcel | 0:a115ff47d1c1 | 141 | |
reiniermarcel | 0:a115ff47d1c1 | 142 | } |
reiniermarcel | 0:a115ff47d1c1 | 143 | } |
reiniermarcel | 0:a115ff47d1c1 | 144 | |
reiniermarcel | 0:a115ff47d1c1 | 145 | |
reiniermarcel | 0:a115ff47d1c1 | 146 | |
reiniermarcel | 0:a115ff47d1c1 | 147 | |
reiniermarcel | 0:a115ff47d1c1 | 148 | |
reiniermarcel | 0:a115ff47d1c1 | 149 | int main() |
reiniermarcel | 0:a115ff47d1c1 | 150 | { |
reiniermarcel | 0:a115ff47d1c1 | 151 | teller.start(); |
reiniermarcel | 0:a115ff47d1c1 | 152 | t.start(); |
reiniermarcel | 0:a115ff47d1c1 | 153 | S.rise(&tel); |
reiniermarcel | 0:a115ff47d1c1 | 154 | float f = 10000000; |
reiniermarcel | 0:a115ff47d1c1 | 155 | |
reiniermarcel | 0:a115ff47d1c1 | 156 | |
reiniermarcel | 0:a115ff47d1c1 | 157 | RA8875 lcd(p5, p6, p7, p12, NC, "tft"); // MOSI, MISO, SCK, /ChipSelect, /reset, name |
reiniermarcel | 0:a115ff47d1c1 | 158 | lcd.init(800, 480, 24, true, false, false); |
reiniermarcel | 0:a115ff47d1c1 | 159 | |
reiniermarcel | 0:a115ff47d1c1 | 160 | lcd.frequency(f); |
reiniermarcel | 0:a115ff47d1c1 | 161 | AnalogIn ain(A5); |
reiniermarcel | 0:a115ff47d1c1 | 162 | tick.attach(&counters, 1.0); |
reiniermarcel | 0:a115ff47d1c1 | 163 | lcd.cls(); |
reiniermarcel | 0:a115ff47d1c1 | 164 | wait_ms(250); |
reiniermarcel | 0:a115ff47d1c1 | 165 | |
reiniermarcel | 0:a115ff47d1c1 | 166 | |
reiniermarcel | 0:a115ff47d1c1 | 167 | |
reiniermarcel | 0:a115ff47d1c1 | 168 | |
reiniermarcel | 0:a115ff47d1c1 | 169 | lcd.background(White); |
reiniermarcel | 0:a115ff47d1c1 | 170 | lcd.fillrect( 0,0, 800,480, White); |
reiniermarcel | 0:a115ff47d1c1 | 171 | lcd.fillrect( 0,79, 800,81 , Black); // hor strepen over het hele beeld |
reiniermarcel | 0:a115ff47d1c1 | 172 | lcd.fillrect( 0,159, 800,161, Black); |
reiniermarcel | 0:a115ff47d1c1 | 173 | lcd.fillrect( 0,239, 800,241, Black); |
reiniermarcel | 0:a115ff47d1c1 | 174 | lcd.fillrect( 0,319, 800,321, Black); |
reiniermarcel | 0:a115ff47d1c1 | 175 | lcd.fillrect( 0,399, 800,401, Black); |
reiniermarcel | 0:a115ff47d1c1 | 176 | |
reiniermarcel | 0:a115ff47d1c1 | 177 | lcd.fillrect( 759,80 , 761,240, Black); //verticale streep boven |
reiniermarcel | 0:a115ff47d1c1 | 178 | lcd.fillrect( 759,320, 761,480, Black); //verticale streep onder |
reiniermarcel | 0:a115ff47d1c1 | 179 | |
reiniermarcel | 0:a115ff47d1c1 | 180 | lcd.fillrect( 371,119, 800,121, Black); //hor strepen vanaf halve cirkel |
reiniermarcel | 0:a115ff47d1c1 | 181 | lcd.fillrect( 396,199, 800,201, Black); |
reiniermarcel | 0:a115ff47d1c1 | 182 | lcd.fillrect( 371,359, 800,361, Black); |
reiniermarcel | 0:a115ff47d1c1 | 183 | lcd.fillrect( 315,439, 800,441, Black); |
reiniermarcel | 0:a115ff47d1c1 | 184 | |
reiniermarcel | 0:a115ff47d1c1 | 185 | lcd.line( 209,0 , 280,80 , Black); //binnenste halve cirkel |
reiniermarcel | 0:a115ff47d1c1 | 186 | lcd.line( 280,80 , 321,160, Black); |
reiniermarcel | 0:a115ff47d1c1 | 187 | lcd.line( 321,160, 331,240, Black); |
reiniermarcel | 0:a115ff47d1c1 | 188 | lcd.line( 331,240, 321,320, Black); |
reiniermarcel | 0:a115ff47d1c1 | 189 | lcd.line( 321,320, 280,400, Black); |
reiniermarcel | 0:a115ff47d1c1 | 190 | lcd.line( 280,400, 209,480, Black); |
reiniermarcel | 0:a115ff47d1c1 | 191 | |
reiniermarcel | 0:a115ff47d1c1 | 192 | lcd.line( 209+70,0 , 280+70,80 , Black); //buitenste halve cirkel (+70) |
reiniermarcel | 0:a115ff47d1c1 | 193 | lcd.line( 280+70,80 , 321+70,160, Black); |
reiniermarcel | 0:a115ff47d1c1 | 194 | lcd.line( 321+70,160, 331+70,240, Black); |
reiniermarcel | 0:a115ff47d1c1 | 195 | lcd.line( 331+70,240, 321+70,320, Black); |
reiniermarcel | 0:a115ff47d1c1 | 196 | lcd.line( 321+70,320, 280+70,400, Black); |
reiniermarcel | 0:a115ff47d1c1 | 197 | lcd.line( 280+70,400, 209+70,480, Black); |
reiniermarcel | 0:a115ff47d1c1 | 198 | |
reiniermarcel | 0:a115ff47d1c1 | 199 | Kleur1 = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 200 | Kleur6 = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 201 | |
reiniermarcel | 0:a115ff47d1c1 | 202 | lcd.SetTextFontSize(2,2); |
reiniermarcel | 0:a115ff47d1c1 | 203 | int H = lcd.fontheight()/2; |
reiniermarcel | 0:a115ff47d1c1 | 204 | lcd.puts(411,40-H, "STATUS FUEL CELL"); |
reiniermarcel | 0:a115ff47d1c1 | 205 | lcd.puts(411,280-H, "GENERAL STATUS"); |
reiniermarcel | 0:a115ff47d1c1 | 206 | |
reiniermarcel | 0:a115ff47d1c1 | 207 | lcd.SetTextFontSize(1,1); |
reiniermarcel | 0:a115ff47d1c1 | 208 | H = lcd.fontheight()/2; |
reiniermarcel | 0:a115ff47d1c1 | 209 | |
reiniermarcel | 0:a115ff47d1c1 | 210 | |
reiniermarcel | 0:a115ff47d1c1 | 211 | color_t Kleur2; |
reiniermarcel | 0:a115ff47d1c1 | 212 | color_t Kleur3; |
reiniermarcel | 0:a115ff47d1c1 | 213 | color_t Kleur4; |
reiniermarcel | 0:a115ff47d1c1 | 214 | color_t Kleur5; |
reiniermarcel | 0:a115ff47d1c1 | 215 | |
reiniermarcel | 0:a115ff47d1c1 | 216 | color_t KleurA; |
reiniermarcel | 0:a115ff47d1c1 | 217 | color_t KleurB; |
reiniermarcel | 0:a115ff47d1c1 | 218 | color_t KleurC; |
reiniermarcel | 0:a115ff47d1c1 | 219 | color_t KleurD; |
reiniermarcel | 0:a115ff47d1c1 | 220 | color_t KleurE; |
reiniermarcel | 0:a115ff47d1c1 | 221 | color_t KleurF; |
reiniermarcel | 0:a115ff47d1c1 | 222 | color_t KleurG; |
reiniermarcel | 0:a115ff47d1c1 | 223 | color_t KleurH; |
reiniermarcel | 0:a115ff47d1c1 | 224 | |
reiniermarcel | 0:a115ff47d1c1 | 225 | |
reiniermarcel | 0:a115ff47d1c1 | 226 | while(1){ |
reiniermarcel | 0:a115ff47d1c1 | 227 | checkIncomingFcData(); |
reiniermarcel | 0:a115ff47d1c1 | 228 | snelheidmeten(); |
reiniermarcel | 0:a115ff47d1c1 | 229 | |
reiniermarcel | 0:a115ff47d1c1 | 230 | if (avgspeed >= 26.0 && avgspeed <= 27.3) |
reiniermarcel | 0:a115ff47d1c1 | 231 | { |
reiniermarcel | 0:a115ff47d1c1 | 232 | |
reiniermarcel | 0:a115ff47d1c1 | 233 | Kleur2 = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 234 | } |
reiniermarcel | 0:a115ff47d1c1 | 235 | else if(avgspeed <= 25.0 || avgspeed >= 28.5) |
reiniermarcel | 0:a115ff47d1c1 | 236 | Kleur2 = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 237 | else{ |
reiniermarcel | 0:a115ff47d1c1 | 238 | Kleur2 = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 239 | } |
reiniermarcel | 0:a115ff47d1c1 | 240 | Kleur3 = BrightBlue; |
reiniermarcel | 0:a115ff47d1c1 | 241 | |
reiniermarcel | 0:a115ff47d1c1 | 242 | |
reiniermarcel | 0:a115ff47d1c1 | 243 | Kleur4 = BrightBlue; |
reiniermarcel | 0:a115ff47d1c1 | 244 | |
reiniermarcel | 0:a115ff47d1c1 | 245 | |
reiniermarcel | 0:a115ff47d1c1 | 246 | Kleur5 = BrightBlue; |
reiniermarcel | 0:a115ff47d1c1 | 247 | |
reiniermarcel | 0:a115ff47d1c1 | 248 | if(fuelcellStackV >= 22 && fuelcellStackV <= 45) |
reiniermarcel | 0:a115ff47d1c1 | 249 | { |
reiniermarcel | 0:a115ff47d1c1 | 250 | KleurA = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 251 | } |
reiniermarcel | 0:a115ff47d1c1 | 252 | else if(fuelcellStackV <= 20 || fuelcellStackV >= 48){ |
reiniermarcel | 0:a115ff47d1c1 | 253 | KleurA = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 254 | } |
reiniermarcel | 0:a115ff47d1c1 | 255 | else{ |
reiniermarcel | 0:a115ff47d1c1 | 256 | KleurA = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 257 | } |
reiniermarcel | 0:a115ff47d1c1 | 258 | |
reiniermarcel | 0:a115ff47d1c1 | 259 | |
reiniermarcel | 0:a115ff47d1c1 | 260 | if(fuelcellStackI <= 25) |
reiniermarcel | 0:a115ff47d1c1 | 261 | { |
reiniermarcel | 0:a115ff47d1c1 | 262 | KleurB = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 263 | } |
reiniermarcel | 0:a115ff47d1c1 | 264 | else if(fuelcellStackI >= 27){ |
reiniermarcel | 0:a115ff47d1c1 | 265 | KleurB = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 266 | } |
reiniermarcel | 0:a115ff47d1c1 | 267 | else{ |
reiniermarcel | 0:a115ff47d1c1 | 268 | KleurB = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 269 | } |
reiniermarcel | 0:a115ff47d1c1 | 270 | |
reiniermarcel | 0:a115ff47d1c1 | 271 | |
reiniermarcel | 0:a115ff47d1c1 | 272 | |
reiniermarcel | 0:a115ff47d1c1 | 273 | if(fuelcellStackPower <=1000){ |
reiniermarcel | 0:a115ff47d1c1 | 274 | KleurC = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 275 | } |
reiniermarcel | 0:a115ff47d1c1 | 276 | else if(fuelcellStackPower >= 1200){ |
reiniermarcel | 0:a115ff47d1c1 | 277 | KleurC = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 278 | } |
reiniermarcel | 0:a115ff47d1c1 | 279 | else{ |
reiniermarcel | 0:a115ff47d1c1 | 280 | KleurC = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 281 | } |
reiniermarcel | 0:a115ff47d1c1 | 282 | |
reiniermarcel | 0:a115ff47d1c1 | 283 | |
reiniermarcel | 0:a115ff47d1c1 | 284 | if(fuelcellStackT <=38){ |
reiniermarcel | 0:a115ff47d1c1 | 285 | KleurD = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 286 | } |
reiniermarcel | 0:a115ff47d1c1 | 287 | else if(fuelcellStackT >= 40){ |
reiniermarcel | 0:a115ff47d1c1 | 288 | KleurD = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 289 | } |
reiniermarcel | 0:a115ff47d1c1 | 290 | else{ |
reiniermarcel | 0:a115ff47d1c1 | 291 | KleurD = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 292 | } |
reiniermarcel | 0:a115ff47d1c1 | 293 | |
reiniermarcel | 0:a115ff47d1c1 | 294 | |
reiniermarcel | 0:a115ff47d1c1 | 295 | if((ain*20*3.3) <=45){ |
reiniermarcel | 0:a115ff47d1c1 | 296 | KleurE = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 297 | } |
reiniermarcel | 0:a115ff47d1c1 | 298 | else if((ain*20*3.3) >= 48){ |
reiniermarcel | 0:a115ff47d1c1 | 299 | KleurE = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 300 | } |
reiniermarcel | 0:a115ff47d1c1 | 301 | else{ |
reiniermarcel | 0:a115ff47d1c1 | 302 | KleurE = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 303 | } |
reiniermarcel | 0:a115ff47d1c1 | 304 | |
reiniermarcel | 0:a115ff47d1c1 | 305 | |
reiniermarcel | 0:a115ff47d1c1 | 306 | if(fuelcellAmbientT <=28){ |
reiniermarcel | 0:a115ff47d1c1 | 307 | KleurF = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 308 | } |
reiniermarcel | 0:a115ff47d1c1 | 309 | else if(fuelcellAmbientT >= 30){ |
reiniermarcel | 0:a115ff47d1c1 | 310 | KleurF = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 311 | } |
reiniermarcel | 0:a115ff47d1c1 | 312 | else{ |
reiniermarcel | 0:a115ff47d1c1 | 313 | KleurF = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 314 | } |
reiniermarcel | 0:a115ff47d1c1 | 315 | |
reiniermarcel | 0:a115ff47d1c1 | 316 | |
reiniermarcel | 0:a115ff47d1c1 | 317 | |
reiniermarcel | 0:a115ff47d1c1 | 318 | |
reiniermarcel | 0:a115ff47d1c1 | 319 | |
reiniermarcel | 0:a115ff47d1c1 | 320 | |
reiniermarcel | 0:a115ff47d1c1 | 321 | |
reiniermarcel | 0:a115ff47d1c1 | 322 | lcd.foreground(Black); |
reiniermarcel | 0:a115ff47d1c1 | 323 | |
reiniermarcel | 0:a115ff47d1c1 | 324 | lcd.SetTextCursor(10,40-H); //16 |
reiniermarcel | 0:a115ff47d1c1 | 325 | lcd.printf("Total time %02d:%02d",min,sec ); |
reiniermarcel | 0:a115ff47d1c1 | 326 | lcd.SetTextCursor(10,120-H); |
reiniermarcel | 0:a115ff47d1c1 | 327 | lcd.printf("Average speed %.1f km/h ",avgspeed); |
reiniermarcel | 0:a115ff47d1c1 | 328 | lcd.SetTextCursor(10,200-H); |
reiniermarcel | 0:a115ff47d1c1 | 329 | lcd.printf("Necessary speed %.1f km/h ",necspeed); |
reiniermarcel | 0:a115ff47d1c1 | 330 | lcd.SetTextCursor(10,280-H); |
reiniermarcel | 0:a115ff47d1c1 | 331 | lcd.printf("Actual speed %.1f km/h ",speed); |
reiniermarcel | 0:a115ff47d1c1 | 332 | lcd.SetTextCursor(10,360-H); |
reiniermarcel | 0:a115ff47d1c1 | 333 | lcd.printf("Power used %.1f Wh ",PWRused); |
reiniermarcel | 0:a115ff47d1c1 | 334 | lcd.SetTextCursor(10,440-H); |
reiniermarcel | 0:a115ff47d1c1 | 335 | lcd.printf("Time left %02d:%02d",lmin,lsec); |
reiniermarcel | 0:a115ff47d1c1 | 336 | |
reiniermarcel | 0:a115ff47d1c1 | 337 | lcd.SetTextCursor(411,100-H); |
reiniermarcel | 0:a115ff47d1c1 | 338 | lcd.printf("Voltage fuel cell %.2f V ",fuelcellStackV); |
reiniermarcel | 0:a115ff47d1c1 | 339 | lcd.SetTextCursor(411,140-H); |
reiniermarcel | 0:a115ff47d1c1 | 340 | lcd.printf("Current fuel cell %.2f A ",fuelcellStackI); |
reiniermarcel | 0:a115ff47d1c1 | 341 | lcd.SetTextCursor(411,180-H); |
reiniermarcel | 0:a115ff47d1c1 | 342 | lcd.printf("Power fuel cell %.2f W ",fuelcellStackPower); |
reiniermarcel | 0:a115ff47d1c1 | 343 | lcd.SetTextCursor(411,220-H); |
reiniermarcel | 0:a115ff47d1c1 | 344 | lcd.printf("Temperature fuel cell %.2f %cC ",fuelcellStackT,176); |
reiniermarcel | 0:a115ff47d1c1 | 345 | lcd.SetTextCursor(411,340-H); |
reiniermarcel | 0:a115ff47d1c1 | 346 | lcd.printf("Voltage supercapacitors %.2f V ",ain*20*3.3); |
reiniermarcel | 0:a115ff47d1c1 | 347 | lcd.SetTextCursor(411,380-H); |
reiniermarcel | 0:a115ff47d1c1 | 348 | lcd.printf("Ambient temperature %.2f %cC ",fuelcellAmbientT,176); |
reiniermarcel | 0:a115ff47d1c1 | 349 | lcd.SetTextCursor(411,420-H); |
reiniermarcel | 0:a115ff47d1c1 | 350 | |
reiniermarcel | 0:a115ff47d1c1 | 351 | switch(fuelcellStatus) |
reiniermarcel | 0:a115ff47d1c1 | 352 | { |
reiniermarcel | 0:a115ff47d1c1 | 353 | case 0: |
reiniermarcel | 0:a115ff47d1c1 | 354 | lcd.printf("Status fuelcell: NORMAL "); |
reiniermarcel | 0:a115ff47d1c1 | 355 | KleurG = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 356 | KleurH = BrightGreen; |
reiniermarcel | 0:a115ff47d1c1 | 357 | break; |
reiniermarcel | 0:a115ff47d1c1 | 358 | |
reiniermarcel | 0:a115ff47d1c1 | 359 | case 1: |
reiniermarcel | 0:a115ff47d1c1 | 360 | lcd.printf("Status fuelcell: BATTERY LOW "); |
reiniermarcel | 0:a115ff47d1c1 | 361 | KleurG = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 362 | KleurH = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 363 | break; |
reiniermarcel | 0:a115ff47d1c1 | 364 | |
reiniermarcel | 0:a115ff47d1c1 | 365 | case 2: |
reiniermarcel | 0:a115ff47d1c1 | 366 | lcd.printf("Status fuelcell: FC VOLTAGE LOW "); |
reiniermarcel | 0:a115ff47d1c1 | 367 | KleurG = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 368 | KleurH = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 369 | break; |
reiniermarcel | 0:a115ff47d1c1 | 370 | |
reiniermarcel | 0:a115ff47d1c1 | 371 | case 3: |
reiniermarcel | 0:a115ff47d1c1 | 372 | lcd.printf("Status fuelcell: H2% HIGH "); |
reiniermarcel | 0:a115ff47d1c1 | 373 | KleurG = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 374 | KleurH = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 375 | break; |
reiniermarcel | 0:a115ff47d1c1 | 376 | |
reiniermarcel | 0:a115ff47d1c1 | 377 | case 4: |
reiniermarcel | 0:a115ff47d1c1 | 378 | lcd.printf("Status fuelcell: CURRENT HIGH "); |
reiniermarcel | 0:a115ff47d1c1 | 379 | KleurG = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 380 | KleurH = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 381 | break; |
reiniermarcel | 0:a115ff47d1c1 | 382 | |
reiniermarcel | 0:a115ff47d1c1 | 383 | case 5: |
reiniermarcel | 0:a115ff47d1c1 | 384 | lcd.printf("Status fuelcell: TEMPERATURE HIGH"); |
reiniermarcel | 0:a115ff47d1c1 | 385 | KleurG = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 386 | KleurH = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 387 | break; |
reiniermarcel | 0:a115ff47d1c1 | 388 | |
reiniermarcel | 0:a115ff47d1c1 | 389 | case 20: |
reiniermarcel | 0:a115ff47d1c1 | 390 | lcd.printf("Status fuelcell: MANUAL TURN OFF "); |
reiniermarcel | 0:a115ff47d1c1 | 391 | KleurG = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 392 | KleurH = BrightRed; |
reiniermarcel | 0:a115ff47d1c1 | 393 | break; |
reiniermarcel | 0:a115ff47d1c1 | 394 | |
reiniermarcel | 0:a115ff47d1c1 | 395 | default: |
reiniermarcel | 0:a115ff47d1c1 | 396 | lcd.printf("Status fuelcell: NO STATUS "); |
reiniermarcel | 0:a115ff47d1c1 | 397 | KleurG = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 398 | KleurH = Yellow; |
reiniermarcel | 0:a115ff47d1c1 | 399 | } |
reiniermarcel | 0:a115ff47d1c1 | 400 | |
reiniermarcel | 0:a115ff47d1c1 | 401 | |
reiniermarcel | 0:a115ff47d1c1 | 402 | |
reiniermarcel | 0:a115ff47d1c1 | 403 | |
reiniermarcel | 0:a115ff47d1c1 | 404 | |
reiniermarcel | 0:a115ff47d1c1 | 405 | |
reiniermarcel | 0:a115ff47d1c1 | 406 | // vakjes in de halve cirkel |
reiniermarcel | 0:a115ff47d1c1 | 407 | lcd.filltriangle( 210,0, 281,78, 278,0, Kleur1); //vakje 1 |
reiniermarcel | 0:a115ff47d1c1 | 408 | lcd.filltriangle( 349,78, 281,78, 278,0, Kleur1); |
reiniermarcel | 0:a115ff47d1c1 | 409 | |
reiniermarcel | 0:a115ff47d1c1 | 410 | lcd.filltriangle( 281,82, 322,158, 349,82, Kleur2); //vakje 2 |
reiniermarcel | 0:a115ff47d1c1 | 411 | lcd.filltriangle( 390,158, 322,158, 349,82, Kleur2); |
reiniermarcel | 0:a115ff47d1c1 | 412 | |
reiniermarcel | 0:a115ff47d1c1 | 413 | lcd.filltriangle( 322,162, 332,238, 390,162, Kleur3); //vakje 3 |
reiniermarcel | 0:a115ff47d1c1 | 414 | lcd.filltriangle( 400,238, 332,238, 390,162, Kleur3); |
reiniermarcel | 0:a115ff47d1c1 | 415 | |
reiniermarcel | 0:a115ff47d1c1 | 416 | lcd.filltriangle( 332,242, 322,318, 400,242, Kleur4); //vakje 4 |
reiniermarcel | 0:a115ff47d1c1 | 417 | lcd.filltriangle( 390,318, 322,318, 400,242, Kleur4); |
reiniermarcel | 0:a115ff47d1c1 | 418 | |
reiniermarcel | 0:a115ff47d1c1 | 419 | lcd.filltriangle( 322,322, 281,398, 390,322, Kleur5); //vakje 5 |
reiniermarcel | 0:a115ff47d1c1 | 420 | lcd.filltriangle( 349,398, 281,398, 390,322, Kleur5); |
reiniermarcel | 0:a115ff47d1c1 | 421 | |
reiniermarcel | 0:a115ff47d1c1 | 422 | lcd.filltriangle( 281,402, 210,480, 349,402, Kleur6); //vakje 6 |
reiniermarcel | 0:a115ff47d1c1 | 423 | lcd.filltriangle( 278,480, 210,480, 349,402, Kleur6); |
reiniermarcel | 0:a115ff47d1c1 | 424 | |
reiniermarcel | 0:a115ff47d1c1 | 425 | //vierkantjes aan de rechterkant |
reiniermarcel | 0:a115ff47d1c1 | 426 | |
reiniermarcel | 0:a115ff47d1c1 | 427 | lcd.fillrect( 762,82, 800,118, KleurA); // Vierkant A |
reiniermarcel | 0:a115ff47d1c1 | 428 | lcd.fillrect( 762,122, 800,158, KleurB); // Vierkant B |
reiniermarcel | 0:a115ff47d1c1 | 429 | lcd.fillrect( 762,162, 800,198, KleurC); // Vierkant C |
reiniermarcel | 0:a115ff47d1c1 | 430 | lcd.fillrect( 762,202, 800,238, KleurD); // Vierkant D |
reiniermarcel | 0:a115ff47d1c1 | 431 | lcd.fillrect( 762,322, 800,358, KleurE); // Vierkant E |
reiniermarcel | 0:a115ff47d1c1 | 432 | lcd.fillrect( 762,362, 800,398, KleurF); // Vierkant F |
reiniermarcel | 0:a115ff47d1c1 | 433 | lcd.fillrect( 762,402, 800,438, KleurG); // Vierkant G |
reiniermarcel | 0:a115ff47d1c1 | 434 | lcd.fillrect( 762,442, 800,480, KleurH); // Vierkant H |
reiniermarcel | 0:a115ff47d1c1 | 435 | |
reiniermarcel | 0:a115ff47d1c1 | 436 | wait(0.2); |
reiniermarcel | 0:a115ff47d1c1 | 437 | } |
reiniermarcel | 0:a115ff47d1c1 | 438 | } |