Тут уже много таких было. Но мне приспичело. Разбил дружище LCD щитка приборов ФордФокус2 дорестайл
было так

стало так , угол разбит и вверху ниче не показывает

LCD отдельно не продается. Вернее можно найти почти по стоимости панели, я нашел за 1500р. Дороговато. Но раз уж ардуиной увлекаюсь, хотел применить куда-нибудь и заодно научиться с ним работать, давно заказанный китайский LCD 2,4 mcufriend купленный за 200 руб. У штатного LCD функционал вообще никакой показывает положение селектора, когда зажигание включено. А когда выключено - надпись FordFOCUS и дату под чертой - всё! Хотелось бы конечно расширить функционал, раз уж заниматься этим.
Итак, дисплей MCUFriend 2.4. SD карта в него вставлена. На неё залить все эти файлы.
https://yadi.sk/d/lXuHZGff3NJk97
Пока задача просто вывести все моменты на дисплей. Тем более это всем подойдет не только к форду, например концевики дверей можно подключить к ардуино по аналогу и будет показывать конкретную дверь и т.д.
Мне же в последствии придётся извлекать информацию из кан-шины авто (наработки кое-какие есть уже) для управления элементами инф.дисплея.
Цель темы - если кого заинтересовало - помогайте, в одно лицо тяжеловато проект тащить.
Пока такие наработки https://yadi.sk/i/mfSIoE983NJjYD
Скетч
003 | #include <Adafruit_GFX.h> |
005 | UTFTGLUE myGLCD(0x7783,A2,A1,A3,A4,A0); |
008 | int bmpWidth, bmpHeight; |
009 | uint8_t bmpDepth, bmpImageoffset; |
020 | pinMode(SD_CS, OUTPUT); |
023 | Serial .print( "Initializing SD card..." ); |
024 | if (!SD.begin(SD_CS)) { |
025 | Serial .println( "failed!" ); |
028 | Serial .println( "OK!" ); |
030 | randomSeed(analogRead(0)); |
032 | digitalWrite(A0, HIGH); |
038 | bmpDraw( "car1.bmp" , 113, 15); |
040 | myGLCD.setBackColor(0,0,0); |
049 | for ( int i=0; i<2; i++){ |
064 | myGLCD.setColor (0,255,0); |
086 | void Drive() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw( "D.bmp" , 255, 10);} |
087 | void Neutral() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw( "N.bmp" , 255, 10);} |
088 | void Reverse() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw( "R.bmp" , 255, 10);} |
089 | void Parking() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw( "P.bmp" , 255, 10);} |
090 | void Drive1() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw( "1.bmp" , 255, 10);} |
091 | void Drive2() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw( "2.bmp" , 255, 10);} |
092 | void Drive3() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw( "3.bmp" , 255, 10);} |
093 | void Drive4() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw( "4.bmp" , 255, 10);} |
094 | void FLdoorOPEN() {bmpDraw( "doorFL.bmp" , 59, 63);} |
095 | void FRdoorOPEN() {bmpDraw( "doorFR.bmp" , 203, 68);} |
096 | void RLdoorOPEN() {bmpDraw( "doorRL.bmp" , 63, 128);} |
097 | void RRdoorOPEN() {bmpDraw( "doorRR.bmp" , 203, 128);} |
098 | void FLdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (59,68,114,118);} |
099 | void FRdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (203, 68,258,125);} |
100 | void RLdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (63, 128,114,166);} |
101 | void RRdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (203, 128,254,166);} |
102 | void Ford() {bmpDraw( "ford.bmp" ,10, 64);} |
105 | <span style= "font-family:Verdana, Geneva, Arial, sans-serif;font-size:12px;" >Пока в скетче просто отображаются (не зависят не от чего, так для демонстрации) элементы инф.дисплея</span> |
Хотелось бы добавить:
1. Отображение времени и даты в момент отображения логотипа
2. Слева внизу может температуру двигателя показывать
3. Слева вверху напряжение АКБ
4. При перегреве ДВС на весь экран предупреждение
5. При отсутствии давления масла и наличии оборотов ДВС на весь экран предупреждение
ну и ещё ченить.
блин в скетче выше ошибка вот этот надо
001
#include <SPI.h>
002
#include <SD.h>
003
#include <Adafruit_GFX.h>
004
#include <UTFTGLUE.h>
005
UTFTGLUE myGLCD(0x7783,A2,A1,A3,A4,A0);
// у меня почему то ещё канает адрес LCD 0х0154
006
#define SD_CS 10
007
File bmpFile;
008
int
bmpWidth, bmpHeight;
009
uint8_t bmpDepth, bmpImageoffset;
010
011
//#if !defined(GroteskBold16x32)
012
//extern uint8_t GroteskBold16x32[];
013
//#endif
014
015
//////////////// Ниже для считывания файла BMP с SD карты
016
017
#define BUFFPIXEL 20
018
019
void
bmpDraw(
char
*filename, uint8_t x, uint8_t y) {
020
021
File bmpFile;
022
int
bmpWidth, bmpHeight;
// W+H in pixels
023
uint8_t bmpDepth;
// Bit depth (currently must be 24)
024
uint32_t bmpImageoffset;
// Start of image data in file
025
uint32_t rowSize;
// Not always = bmpWidth; may have padding
026
uint8_t sdbuffer[3*BUFFPIXEL];
// pixel buffer (R+G+B per pixel)
027
uint8_t buffidx =
sizeof
(sdbuffer);
// Current position in sdbuffer
028
boolean goodBmp =
false
;
// Set to true on valid header parse
029
boolean flip =
true
;
// BMP is stored bottom-to-top
030
int
w, h, row, col;
031
uint8_t r, g, b;
032
uint32_t pos = 0, startTime = millis();
033
034
if
((x >= myGLCD.width()) || (y >= myGLCD.height()))
return
;
035
036
Serial
.println();
037
Serial
.print(
"Loading image '"
);
038
Serial
.print(filename);
039
Serial
.println(
'\''
);
040
041
// Open requested file on SD card
042
if
((bmpFile = SD.open(filename)) == NULL) {
043
Serial
.print(
"File not found"
);
044
return
;
045
}
046
047
// Parse BMP header
048
if
(read16(bmpFile) == 0x4D42) {
// BMP signature
049
Serial
.print(
"File size: "
);
Serial
.println(read32(bmpFile));
050
(
void
)read32(bmpFile);
// Read & ignore creator bytes
051
bmpImageoffset = read32(bmpFile);
// Start of image data
052
Serial
.print(
"Image Offset: "
);
Serial
.println(bmpImageoffset, DEC);
053
// Read DIB header
054
Serial
.print(
"Header size: "
);
Serial
.println(read32(bmpFile));
055
bmpWidth = read32(bmpFile);
056
bmpHeight = read32(bmpFile);
057
if
(read16(bmpFile) == 1) {
// # planes -- must be '1'
058
bmpDepth = read16(bmpFile);
// bits per pixel
059
Serial
.print(
"Bit Depth: "
);
Serial
.println(bmpDepth);
060
if
((bmpDepth == 24) && (read32(bmpFile) == 0)) {
// 0 = uncompressed
061
062
goodBmp =
true
;
// Supported BMP format -- proceed!
063
Serial
.print(
"Image size: "
);
064
Serial
.print(bmpWidth);
065
Serial
.print(
'x'
);
066
Serial
.println(bmpHeight);
067
068
// BMP rows are padded (if needed) to 4-byte boundary
069
rowSize = (bmpWidth * 3 + 3) & ~3;
070
071
// If bmpHeight is negative, image is in top-down order.
072
// This is not canon but has been observed in the wild.
073
if
(bmpHeight < 0) {
074
bmpHeight = -bmpHeight;
075
flip =
false
;
076
}
077
078
// Crop area to be loaded
079
w = bmpWidth;
080
h = bmpHeight;
081
if
((x+w-1) >= myGLCD.width()) w = myGLCD.width() - x;
082
if
((y+h-1) >= myGLCD.height()) h = myGLCD.height() - y;
083
084
for
(row=0; row<h; row++) {
// For each scanline...
085
myGLCD.setCursor(x, y+row);
086
087
// Seek to start of scan line. It might seem labor-
088
// intensive to be doing this on every line, but this
089
// method covers a lot of gritty details like cropping
090
// and scanline padding. Also, the seek only takes
091
// place if the file position actually needs to change
092
// (avoids a lot of cluster math in SD library).
093
if
(flip)
// Bitmap is stored bottom-to-top order (normal BMP)
094
pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
095
else
// Bitmap is stored top-to-bottom
096
pos = bmpImageoffset + row * rowSize;
097
if
(bmpFile.position() != pos) {
// Need seek?
098
bmpFile.seek(pos);
099
buffidx =
sizeof
(sdbuffer);
// Force buffer reload
100
}
101
102
// optimize by setting pins now
103
for
(col=0; col<w; col++) {
// For each pixel...
104
// Time to read more pixel data?
105
if
(buffidx >=
sizeof
(sdbuffer)) {
// Indeed
106
bmpFile.read(sdbuffer,
sizeof
(sdbuffer));
107
buffidx = 0;
// Set index to beginning
108
}
109
110
// Convert pixel from BMP to TFT format, push to display
111
b = sdbuffer[buffidx++];
112
g = sdbuffer[buffidx++];
113
r = sdbuffer[buffidx++];
114
115
myGLCD.setColor(r,g,b);
116
myGLCD.drawPixel(x+col, y+row);
117
// optimized!
118
//tft.pushColor(tft.Color565(r,g,b));
119
}
// end pixel
120
}
// end scanline
121
Serial
.print(
"Loaded in "
);
122
Serial
.print(millis() - startTime);
123
Serial
.println(
" ms"
);
124
}
// end goodBmp
125
}
126
}
127
128
bmpFile.close();
129
if
(!goodBmp)
Serial
.println(
"BMP format not recognized."
);
130
}
131
132
// These read 16- and 32-bit types from the SD card file.
133
// BMP data is stored little-endian, Arduino is little-endian too.
134
// May need to reverse subscript order if porting elsewhere.
135
136
uint16_t read16(File f) {
137
uint16_t result;
138
((uint8_t *)&result)[0] = f.read();
// LSB
139
((uint8_t *)&result)[1] = f.read();
// MSB
140
return
result;
141
}
142
143
uint32_t read32(File f) {
144
uint32_t result;
145
((uint8_t *)&result)[0] = f.read();
// LSB
146
((uint8_t *)&result)[1] = f.read();
147
((uint8_t *)&result)[2] = f.read();
148
((uint8_t *)&result)[3] = f.read();
// MSB
149
return
result;
150
}
151
152
153
//////////////////////
154
155
156
void
setup
()
157
{
158
Serial
.begin(9600);
159
160
pinMode(SD_CS, OUTPUT);
161
162
// пробуем обратиться к SD-карте памяти
163
Serial
.print(
"Initializing SD card..."
);
164
if
(!SD.begin(SD_CS)) {
165
Serial
.println(
"failed!"
);
166
return
;}
167
168
Serial
.println(
"OK!"
);
169
170
randomSeed(analogRead(0));
171
pinMode(A0, OUTPUT);
172
digitalWrite(A0, HIGH);
173
174
175
myGLCD.InitLCD();
176
177
myGLCD.clrScr();
178
bmpDraw(
"car1.bmp"
, 113, 15);
179
// myGLCD.setTextSize(5);
180
myGLCD.setBackColor(0,0,0);
181
182
183
}
184
185
void
loop
()
186
{
187
188
189
for
(
int
i=0; i<2; i++){
190
delay (1000);
191
FLdoorOPEN();
192
FRdoorOPEN();
193
RLdoorOPEN();
194
RRdoorOPEN();
195
delay (500);
196
FLdoorCLOSED();
197
delay (500);
198
FRdoorCLOSED();
199
delay (500);
200
RLdoorCLOSED();
201
delay (500);
202
RRdoorCLOSED();
203
delay (500);
204
myGLCD.setColor (0,255,0);
205
delay (500);
206
Drive();
207
delay (500);
208
Drive1();
209
delay (500);
210
Drive2();
211
delay (500);
212
Neutral();
213
delay (500);
214
Reverse();
215
delay (500);
216
Parking();}
217
218
myGLCD.clrScr();
// отобразим логотип форд, по задумке он будет появляться после выключения зажигания через 15 сек
219
Ford();
220
while
(1);
// тут пока тормозим скетч
221
222
223
224
}
225
226
void
Drive() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"D.bmp"
, 255, 10);}
227
void
Neutral() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"N.bmp"
, 255, 10);}
228
void
Reverse() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"R.bmp"
, 255, 10);}
229
void
Parking() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"P.bmp"
, 255, 10);}
230
void
Drive1() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"1.bmp"
, 255, 10);}
231
void
Drive2() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"2.bmp"
, 255, 10);}
232
void
Drive3() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"3.bmp"
, 255, 10);}
233
void
Drive4() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"4.bmp"
, 255, 10);}
234
void
FLdoorOPEN() {bmpDraw(
"doorFL.bmp"
, 59, 63);}
235
void
FRdoorOPEN() {bmpDraw(
"doorFR.bmp"
, 203, 68);}
236
void
RLdoorOPEN() {bmpDraw(
"doorRL.bmp"
, 63, 128);}
237
void
RRdoorOPEN() {bmpDraw(
"doorRR.bmp"
, 203, 128);}
238
void
FLdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (59,68,114,118);}
239
void
FRdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (203, 68,258,125);}
240
void
RLdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (63, 128,114,166);}
241
void
RRdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (203, 128,254,166);}
242
void
Ford() {bmpDraw(
"ford.bmp"
,10, 64);}
Библиотеки для этого корявого LCD https://yadi.sk/d/U4wMuhG03NJsKj
И забыл скакзать LCD у меня 320х240
https://ru.aliexpress.com/item/LCD-module-TFT-2-4-inch-TFT-LCD-screen-for-Arduino-UNO-R3-Board-and-support/32552043575.html?spm=a2g0s.9042311.0.0.I42CYz
не знаю как работать с этой библиотекой со сторонними шрифтами, вроде все делаешь, один фиг SmallFont[] включается .
короче сделал время и дату встроенным шрифтом. Корявенько конечно.
001
#include <SPI.h>
002
#include <SD.h>
003
#include <Adafruit_GFX.h>
004
#include <UTFTGLUE.h>
005
UTFTGLUE myGLCD(0x7783,A2,A1,A3,A4,A0);
// у меня почему то ещё канает адрес LCD 0х0154
006
#define SD_CS 10
007
File bmpFile;
008
int
bmpWidth, bmpHeight;
009
uint8_t bmpDepth, bmpImageoffset;
010
011
#if !defined(BigFont)
012
extern
uint8_t BigFont[];
013
#endif
014
015
//////////////// Ниже для считывания файла BMP с SD карты
016
017
#define BUFFPIXEL 20
018
019
void
bmpDraw(
char
*filename, uint8_t x, uint8_t y) {
020
021
File bmpFile;
022
int
bmpWidth, bmpHeight;
// W+H in pixels
023
uint8_t bmpDepth;
// Bit depth (currently must be 24)
024
uint32_t bmpImageoffset;
// Start of image data in file
025
uint32_t rowSize;
// Not always = bmpWidth; may have padding
026
uint8_t sdbuffer[3*BUFFPIXEL];
// pixel buffer (R+G+B per pixel)
027
uint8_t buffidx =
sizeof
(sdbuffer);
// Current position in sdbuffer
028
boolean goodBmp =
false
;
// Set to true on valid header parse
029
boolean flip =
true
;
// BMP is stored bottom-to-top
030
int
w, h, row, col;
031
uint8_t r, g, b;
032
uint32_t pos = 0, startTime = millis();
033
034
if
((x >= myGLCD.width()) || (y >= myGLCD.height()))
return
;
035
036
Serial
.println();
037
Serial
.print(
"Loading image '"
);
038
Serial
.print(filename);
039
Serial
.println(
'\''
);
040
041
// Open requested file on SD card
042
if
((bmpFile = SD.open(filename)) == NULL) {
043
Serial
.print(
"File not found"
);
044
return
;
045
}
046
047
// Parse BMP header
048
if
(read16(bmpFile) == 0x4D42) {
// BMP signature
049
Serial
.print(
"File size: "
);
Serial
.println(read32(bmpFile));
050
(
void
)read32(bmpFile);
// Read & ignore creator bytes
051
bmpImageoffset = read32(bmpFile);
// Start of image data
052
Serial
.print(
"Image Offset: "
);
Serial
.println(bmpImageoffset, DEC);
053
// Read DIB header
054
Serial
.print(
"Header size: "
);
Serial
.println(read32(bmpFile));
055
bmpWidth = read32(bmpFile);
056
bmpHeight = read32(bmpFile);
057
if
(read16(bmpFile) == 1) {
// # planes -- must be '1'
058
bmpDepth = read16(bmpFile);
// bits per pixel
059
Serial
.print(
"Bit Depth: "
);
Serial
.println(bmpDepth);
060
if
((bmpDepth == 24) && (read32(bmpFile) == 0)) {
// 0 = uncompressed
061
062
goodBmp =
true
;
// Supported BMP format -- proceed!
063
Serial
.print(
"Image size: "
);
064
Serial
.print(bmpWidth);
065
Serial
.print(
'x'
);
066
Serial
.println(bmpHeight);
067
068
// BMP rows are padded (if needed) to 4-byte boundary
069
rowSize = (bmpWidth * 3 + 3) & ~3;
070
071
// If bmpHeight is negative, image is in top-down order.
072
// This is not canon but has been observed in the wild.
073
if
(bmpHeight < 0) {
074
bmpHeight = -bmpHeight;
075
flip =
false
;
076
}
077
078
// Crop area to be loaded
079
w = bmpWidth;
080
h = bmpHeight;
081
if
((x+w-1) >= myGLCD.width()) w = myGLCD.width() - x;
082
if
((y+h-1) >= myGLCD.height()) h = myGLCD.height() - y;
083
084
for
(row=0; row<h; row++) {
// For each scanline...
085
myGLCD.setCursor(x, y+row);
086
087
// Seek to start of scan line. It might seem labor-
088
// intensive to be doing this on every line, but this
089
// method covers a lot of gritty details like cropping
090
// and scanline padding. Also, the seek only takes
091
// place if the file position actually needs to change
092
// (avoids a lot of cluster math in SD library).
093
if
(flip)
// Bitmap is stored bottom-to-top order (normal BMP)
094
pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
095
else
// Bitmap is stored top-to-bottom
096
pos = bmpImageoffset + row * rowSize;
097
if
(bmpFile.position() != pos) {
// Need seek?
098
bmpFile.seek(pos);
099
buffidx =
sizeof
(sdbuffer);
// Force buffer reload
100
}
101
102
// optimize by setting pins now
103
for
(col=0; col<w; col++) {
// For each pixel...
104
// Time to read more pixel data?
105
if
(buffidx >=
sizeof
(sdbuffer)) {
// Indeed
106
bmpFile.read(sdbuffer,
sizeof
(sdbuffer));
107
buffidx = 0;
// Set index to beginning
108
}
109
110
// Convert pixel from BMP to TFT format, push to display
111
b = sdbuffer[buffidx++];
112
g = sdbuffer[buffidx++];
113
r = sdbuffer[buffidx++];
114
115
myGLCD.setColor(r,g,b);
116
myGLCD.drawPixel(x+col, y+row);
117
// optimized!
118
//tft.pushColor(tft.Color565(r,g,b));
119
}
// end pixel
120
}
// end scanline
121
Serial
.print(
"Loaded in "
);
122
Serial
.print(millis() - startTime);
123
Serial
.println(
" ms"
);
124
}
// end goodBmp
125
}
126
}
127
128
bmpFile.close();
129
if
(!goodBmp)
Serial
.println(
"BMP format not recognized."
);
130
}
131
132
// These read 16- and 32-bit types from the SD card file.
133
// BMP data is stored little-endian, Arduino is little-endian too.
134
// May need to reverse subscript order if porting elsewhere.
135
136
uint16_t read16(File f) {
137
uint16_t result;
138
((uint8_t *)&result)[0] = f.read();
// LSB
139
((uint8_t *)&result)[1] = f.read();
// MSB
140
return
result;
141
}
142
143
uint32_t read32(File f) {
144
uint32_t result;
145
((uint8_t *)&result)[0] = f.read();
// LSB
146
((uint8_t *)&result)[1] = f.read();
147
((uint8_t *)&result)[2] = f.read();
148
((uint8_t *)&result)[3] = f.read();
// MSB
149
return
result;
150
}
151
152
153
//////////////////////
154
155
156
void
setup
()
157
{
158
Serial
.begin(9600);
159
160
pinMode(SD_CS, OUTPUT);
161
162
// пробуем обратиться к SD-карте памяти
163
Serial
.print(
"Initializing SD card..."
);
164
if
(!SD.begin(SD_CS)) {
165
Serial
.println(
"failed!"
);
166
return
;}
167
168
Serial
.println(
"OK!"
);
169
170
randomSeed(analogRead(0));
171
pinMode(A0, OUTPUT);
172
digitalWrite(A0, HIGH);
173
174
175
myGLCD.InitLCD();
176
177
myGLCD.setBackColor(0,0,0);
178
179
180
}
181
182
void
loop
()
183
{
184
185
186
myGLCD.clrScr();
187
bmpDraw(
"car1.bmp"
, 113, 15);
188
delay (1000);
189
FLdoorOPEN();
190
FRdoorOPEN();
191
RLdoorOPEN();
192
Drive();
193
delay (500);
194
RRdoorOPEN();
195
delay (500);
196
Neutral();
197
delay (500);
198
FLdoorCLOSED();
199
delay (500);
200
FRdoorCLOSED();
201
delay (500);
202
RLdoorCLOSED();
203
delay (500);
204
RRdoorCLOSED();
205
delay (500);
206
Drive1();
207
delay (500);
208
Drive2();
209
delay (500);
210
Reverse();
211
delay (500);
212
Parking();
213
delay (1000);
214
215
216
myGLCD.clrScr();
// отобразим логотип форд, по задумке он будет появляться после выключения зажигания через 15 сек
217
Ford();
218
myGLCD.setColor (255,255,255);
219
myGLCD.setBackColor(0,0,0);
220
myGLCD.setTextSize(4);
221
myGLCD.print (
"12:30"
,10,207);
// время
222
myGLCD.setTextSize(3);
223
myGLCD.print (
"29/09/2017"
,137,3);
// дата
224
delay (10000);
225
226
227
228
}
229
230
void
Drive() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"D.bmp"
, 255, 10);}
231
void
Neutral() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"N.bmp"
, 255, 10);}
232
void
Reverse() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"R.bmp"
, 255, 10);}
233
void
Parking() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"P.bmp"
, 255, 10);}
234
void
Drive1() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"1.bmp"
, 255, 10);}
235
void
Drive2() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"2.bmp"
, 255, 10);}
236
void
Drive3() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"3.bmp"
, 255, 10);}
237
void
Drive4() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw(
"4.bmp"
, 255, 10);}
238
void
FLdoorOPEN() {bmpDraw(
"doorFL.bmp"
, 59, 63);}
239
void
FRdoorOPEN() {bmpDraw(
"doorFR.bmp"
, 203, 68);}
240
void
RLdoorOPEN() {bmpDraw(
"doorRL.bmp"
, 63, 128);}
241
void
RRdoorOPEN() {bmpDraw(
"doorRR.bmp"
, 203, 128);}
242
void
FLdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (59,68,114,118);}
243
void
FRdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (203, 68,258,125);}
244
void
RLdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (63, 128,114,166);}
245
void
RRdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (203, 128,254,166);}
246
void
Ford() {bmpDraw(
"ford.bmp"
,10, 64);}