Бортовой компьютер, хотя скорее информационный дисплей
- Войдите на сайт для отправки комментариев
Тут уже много таких было. Но мне приспичело. Разбил дружище 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
Скетч
#include <SPI.h>
#include <SD.h>
#include <Adafruit_GFX.h>
#include <UTFTGLUE.h>
UTFTGLUE myGLCD(0x7783,A2,A1,A3,A4,A0); // у меня почему то ещё канает адрес LCD 0х0154
#define SD_CS 10
File bmpFile;
int bmpWidth, bmpHeight;
uint8_t bmpDepth, bmpImageoffset;
//#if !defined(GroteskBold16x32)
//extern uint8_t GroteskBold16x32[];
//#endif
void setup()
{
Serial.begin(9600);
pinMode(SD_CS, OUTPUT);
// пробуем обратиться к SD-карте памяти
Serial.print("Initializing SD card...");
if (!SD.begin(SD_CS)) {
Serial.println("failed!");
return;}
Serial.println("OK!");
randomSeed(analogRead(0));
pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);
myGLCD.InitLCD();
myGLCD.clrScr();
bmpDraw("car1.bmp", 113, 15);
// myGLCD.setTextSize(5);
myGLCD.setBackColor(0,0,0);
}
void loop()
{
for (int i=0; i<2; i++){
delay (1000);
FLdoorOPEN();
FRdoorOPEN();
RLdoorOPEN();
RRdoorOPEN();
delay (500);
FLdoorCLOSED();
delay (500);
FRdoorCLOSED();
delay (500);
RLdoorCLOSED();
delay (500);
RRdoorCLOSED();
delay (500);
myGLCD.setColor (0,255,0);
delay (500);
Drive();
delay (500);
Drive1();
delay (500);
Drive2();
delay (500);
Neutral();
delay (500);
Reverse();
delay (500);
Parking();}
myGLCD.clrScr(); // отобразим логотип форд, по задумке он будет появляться после выключения зажигания через 15 сек
Ford();
while (1); // тут пока тормозим скетч
}
void Drive() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw("D.bmp", 255, 10);}
void Neutral() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw("N.bmp", 255, 10);}
void Reverse() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw("R.bmp", 255, 10);}
void Parking() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw("P.bmp", 255, 10);}
void Drive1() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw("1.bmp", 255, 10);}
void Drive2() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw("2.bmp", 255, 10);}
void Drive3() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw("3.bmp", 255, 10);}
void Drive4() {myGLCD.setColor (0,0,0); myGLCD.fillRect (255,10,320,60); bmpDraw("4.bmp", 255, 10);}
void FLdoorOPEN() {bmpDraw("doorFL.bmp", 59, 63);}
void FRdoorOPEN() {bmpDraw("doorFR.bmp", 203, 68);}
void RLdoorOPEN() {bmpDraw("doorRL.bmp", 63, 128);}
void RRdoorOPEN() {bmpDraw("doorRR.bmp", 203, 128);}
void FLdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (59,68,114,118);}
void FRdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (203, 68,258,125);}
void RLdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (63, 128,114,166);}
void RRdoorCLOSED() {myGLCD.setColor (0,0,0); myGLCD.fillRect (203, 128,254,166);}
void Ford() {bmpDraw("ford.bmp",10, 64);}
Пока в скетче просто отображаются (не зависят не от чего, так для демонстрации) элементы инф.дисплея
Хотелось бы добавить:
1. Отображение времени и даты в момент отображения логотипа
2. Слева внизу может температуру двигателя показывать
3. Слева вверху напряжение АКБ
4. При перегреве ДВС на весь экран предупреждение
5. При отсутствии давления масла и наличии оборотов ДВС на весь экран предупреждение
ну и ещё ченить.
блин в скетче выше ошибка вот этот надо
Библиотеки для этого корявого 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[] включается .
короче сделал время и дату встроенным шрифтом. Корявенько конечно.