Спидометр на arduino uno и дисплее tft 2.4 LCD shield
- Войдите на сайт для отправки комментариев
Ср, 19/02/2020 - 13:59
Приветствую, . Загвоздка вот в чём, есть рабочий скетч спидометра на экран 128х64, всё работает всё хорошо, спутники ищет быстро отклик вроде удовлетворительный. есть экран 2.4 tft шилд на котором и нужно сделать спидометр. вроде всё собрал кроме одного момента обращение к дисплею с данных gps(в скетче закоментировано). освободил 2 пина А4(ресет припаял на ресет в uno) А5.чего должно хватить.
Рабочий скетч на экран 128х64
#include "U8glib.h" //U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI 1.3 U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // SCK=A5, SDA=A4 // I2C / TWI 0.96 //U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9, 8); // SCK=13, SDA=11, CS=10, DC=9, Reset=8 // SPI / TWI 0.96 #define u8g_logo_sat_width 20 #define u8g_logo_sat_height 20 //Satelliten Logo const unsigned char u8g_logo_sat[] = { 0x00, 0x01, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x06, 0x00, 0x60, 0x30, 0x00, 0x60, 0x78, 0x00, 0xc0, 0xfc, 0x00, 0x00, 0xfe, 0x01, 0x00, 0xff, 0x01, 0x80, 0xff, 0x00, 0xc0, 0x7f, 0x06, 0xc0, 0x3f, 0x06, 0x80, 0x1f, 0x0c, 0x80, 0x4f, 0x06, 0x19, 0xc6, 0x03, 0x1b, 0x80, 0x01, 0x73, 0x00, 0x00, 0x66, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x70, 0x00, 0x00 }; // Serielle Anschluß #include <SoftwareSerial.h> static const int RXPin = 12, TXPin = 13; // GPS RX -> Arduino D3 //GPS TX -> Arduino D2 static const uint32_t GPSS = 9600; SoftwareSerial ss(RXPin, TXPin); //GPS Library #include <TinyGPS++.h> TinyGPSPlus gps; //Program variables double Lat; double Long; int num_sat, gps_speed; String heading; void(*resetFunc)(void) = 0; // Автоматический сброс bei Fehler void setup() { ss.begin(GPSS); } void loop() { Get_GPS(); //Получить данные GPS //Display info in the OLED u8g.firstPage(); do { print_speed(); } while ( u8g.nextPage() ); } void print_speed() { //u8g.setFont(u8g_font_fur42n); u8g.setFont(u8g_font_helvR24r); u8g.setPrintPos(2, 50); u8g.print(gps_speed , DEC); u8g.setFont(u8g_font_9x18); u8g.setPrintPos(70, 50); u8g.print("km/h"); u8g.setFont(u8g_font_6x10); u8g.setPrintPos(10, 10); u8g.print("sputnic"); u8g.setFont(u8g_font_6x10); //колличество спутников u8g.setPrintPos(70, 10); // Позиция Количество Satelliten u8g.print( num_sat, 5); u8g.setPrintPos(0, 63); //широта долгота u8g.print("Lat:"); u8g.setPrintPos(26, 63); u8g.print( Lat, 3); u8g.setPrintPos(66, 63); u8g.print("Long:"); u8g.setPrintPos(97, 63); u8g.print( Long,3); u8g.setFont(u8g_font_unifont); u8g.drawXBM(107, 0, u8g_logo_sat_width, u8g_logo_sat_height, u8g_logo_sat); // Положение Значка СБ } // Datenzufur zu dem GPS static void smartDelay(unsigned long ms) { unsigned long start = millis(); do { while (ss.available()) gps.encode(ss.read()); } while (millis() - start < ms); } void Get_GPS() { num_sat = gps.satellites.value(); if (gps.location.isValid() == 1) { Lat = gps.location.lat(); Long = gps.location.lng(); gps_speed = gps.speed.kmph(); heading = gps.cardinal(gps.course.value()); } smartDelay(1000); if (millis() > 5000 && gps.charsProcessed() < 10) { // Serial.println(F("No GPS detected: Please check you wiring.")); resetFunc(); delay(1000); } }
Скетч на экран 2.8 tft
#include <Adafruit_GFX.h> // Libreria de graficos #include <Adafruit_TFTLCD.h> // Libreria de LCD #include <TinyGPS++.h> //memanggil library GPS Ublox Neo //#include "U8glib.h" // Pines de conexion del LCD #define LCD_CS A3 // Chip Select - Pin analogico 3 #define LCD_CD A2 // Command/Data - Pin Analogico 2 #define LCD_WR A1 // LCD Write - Pin Analogico 1 #define LCD_RD A0 // LCD Read - Pin Analogico 0 #define LCD_RESET A4 // LCD Reset - Pin Analogico 4 Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // Инстанции-дель-ЖК //Define Warna agar memudahkan saat melakukan coding #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF /* void setup() { //rtc.begin(); // Memulai RTC tft.begin(0x9341); // Нициализация адреса контроллера // Адреса контролеров: 0x9325, 0x9328,0x7575, 0x9341, 0x8357, // 0x0154,0x9488 tft.fillScreen(BLACK); // Очистка в черный цвет экран return; } */ // Serielle Anschluß #include <SoftwareSerial.h> static const int RXPin = 1, TXPin = 0; // GPS RX -> Arduino D1 //GPS TX -> Arduino D0 static const uint32_t GPSS = 9600; SoftwareSerial ss(RXPin, TXPin); //GPS Library #include <TinyGPS++.h> TinyGPSPlus gps; //Program variables double Lat; double Long; int num_sat, gps_speed; String heading; void(*resetFunc)(void) = 0; // Автоматический сброс bei Fehler void setup() { //rtc.begin(); // Memulai RTC tft.begin(0x9341); // Нициализация адреса контроллера // Адреса контролеров: 0x9325, 0x9328,0x7575, 0x9341, 0x8357, // 0x0154,0x9488 tft.fillScreen(BLACK); // Очистка в черный цвет экран //return; ss.begin(GPSS); } void loop() { //с экрана 128*64 /* */ /*{ Get_GPS(); //Получить данные GPS /* //Дисплей информация на дисплее u8g.firstPage(); do { print_speed(); } while ( u8g.nextPage() );*/ void print_speed() { //u8g.setFont(u8g_font_fur42n); // tft.setRotation(0); // tft.setCursor(2, 50); tft.setRotation(3); tft.setCursor(50, 50); tft.setTextSize(5); tft.setTextColor(CYAN); tft.print(gps_speed , DEC); tft.setRotation(3); // tft.setCursor(9, 18); tft.setTextSize(5); tft.setTextColor(CYAN); tft.setCursor(120, 50); tft.println("km/h"); /* u8g.setFont(u8g_font_6x10); u8g.setPrintPos(10, 10);*/ tft.setRotation(3); tft.setCursor(10, 10); tft.setTextSize(5); tft.setTextColor(CYAN); tft.print("sputnic"); /* u8g.setFont(u8g_font_6x10); //колличество спутников u8g.setPrintPos(70, 10); // Позиция Количество Satelliten */ tft.setRotation(3); tft.setCursor(70, 10); tft.setTextSize(5); tft.setTextColor(CYAN); tft.print( num_sat, 5); /* u8g.setPrintPos(0, 63); //широта долгота*/ tft.setRotation(3); tft.setCursor(0, 63); tft.setTextSize(5); tft.setTextColor(CYAN); tft.print("Lat:"); /*u8g.setPrintPos(26, 63);*/ tft.setRotation(3); tft.setCursor(26, 63); tft.setTextSize(5); tft.setTextColor(CYAN); tft.print( Lat, 3); /*u8g.setPrintPos(66, 63);*/ tft.setRotation(3); tft.setCursor(66, 63); tft.setTextSize(5); tft.setTextColor(CYAN); tft.print("Long:"); /* u8g.setPrintPos(97, 63);*/ tft.setRotation(3); tft.setCursor(97, 63); tft.setTextSize(5); tft.setTextColor(CYAN); tft.print( Long,3); } // Данные для GPS static void smartDelay(unsigned long ms) { unsigned long start = millis(); do { while (ss.available()) gps.encode(ss.read()); } while (millis() - start < ms); } void Get_GPS() { num_sat = gps.satellites.value(); if (gps.location.isValid() == 1) { Lat = gps.location.lat(); Long = gps.location.lng(); gps_speed = gps.speed.kmph(); heading = gps.cardinal(gps.course.value()); } smartDelay(1000); if (millis() > 5000 && gps.charsProcessed() < 10) { // Serial.println(F("No GPS detected: Please check you wiring.")); resetFunc(); delay(1000); } } }
в чем вопрос то?
в чем вопрос то?
Это он похвастаца.
не могу вывести на экран tft 2.4 код написанный для экрана 128х64, не совсем понимаю как в той или иной библиотеке для экранов обозначаются действия.
067
void
loop
() {
068
069
//с экрана 128*64 /* */
070
071
/*{
072
073
Get_GPS(); //Получить данные GPS
074
075
076
/* //Дисплей информация на дисплее
077
u8g.firstPage();
078
do {
079
print_speed();
080
} while ( u8g.nextPage() );*/
тут затык, библиотека для u8g и для tft, грубо говоря не могу перенести код жпс с рабочего скетча от экрана 128х64 на экран 2.4tft
не могу вывести на экран tft 2.4 код написанный для экрана 128х64
вы полагаете, кто-то станет это делать за вас?
Откройте обе библиотеки - для экрана 128х64 и для tft 2.4 - и сравнивая функции вывода и посматривая в примеры, переделайте вывод с одной либы на другую
Только для начала разберитесь с подключением, оно для этих экранов разное. Меня смутили ваши слова в первом посте о том, что "пинов А4 и А5 должно хватить"
Извиняюсь за краткость, торопился. пин 4 и 5 для gps модуля, 4 пин сброса на экране отвел на ресет в ардуинке тем самым освободив его.
я не прошу сделать за меня, просто направить куда копать
пост бы поправил только нет вкладки изменить(
Ну так тебе в #4 сказали, куда копать:
Откройте обе библиотеки - для экрана 128х64 и для tft 2.4 - и сравнивая функции вывода и посматривая в примеры, переделайте вывод с одной либы на другую
Ну так тебе в #4 сказали, куда копать:
Откройте обе библиотеки - для экрана 128х64 и для tft 2.4 - и сравнивая функции вывода и посматривая в примеры, переделайте вывод с одной либы на другую
а вы я смотрю набиваете бесполезные посты
а вы я смотрю набиваете бесполезные посты
Таки да. Мы тут по этому специализируемся, ибо больше ни на что не способны, увы :-(((.
А зачем, кстати, ресет экрана на ресет контроллера завели?
вы полагаете, кто-то станет это делать за вас?
Даже странно слышать. А для чего тогда ещё форум?
а вы я смотрю набиваете бесполезные посты
Таки да. Мы тут по этому специализируемся, ибо больше ни на что не способны, увы :-(((.
А зачем, кстати, ресет экрана на ресет контроллера завели?
вы полагаете, кто-то станет это делать за вас?
Даже странно слышать. А для чего тогда ещё форум?
освободить второй пин по датчик gps neo 6mv2
делал всё на примере скетча в котором не было коментариев (там и было выведен пин 4 на ресет) и по большей части всё методом тыка так как языка не знаю.
не понятна разница между библиотеками Adafruit_GFX и tft, на каждую находил скетчи которые работали на моём экране, но код вывода на экран разный
не понятна разница между библиотеками Adafruit_GFX и tft, на каждую находил скетчи которые работали на моём экране, но код вывода на экран разный
А ресурсы? Память, например?
не понятна разница между библиотеками Adafruit_GFX и tft, на каждую находил скетчи которые работали на моём экране, но код вывода на экран разный
вот у вас есть пиджак и свитер - каждый вам по размеру, а вид и материал разный.
Библиотек на один и тот же модуль может быть не одна и не две...
Подскажу Вам ход, удивляющей своей простотой. Вы подключаете только экран и берете примеры из библиотеки (какая понравится, хотя мне лично Adafruit нравится больше), разбираете их, пишете свою программу типа "Хэлло, Вася", потом размечаете экран и в простой программке выдаете текст, который потом будете получать динамически, на нужное ему место экрана. Получилось? Вставляйте функции вывода в свою программу и наслаждайтесь!