Спидометр на 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, не совсем понимаю как в той или иной библиотеке для экранов обозначаются действия.
067voidloop() {068069//с экрана 128*64 /* */070071/*{072073Get_GPS(); //Получить данные GPS074075076/* //Дисплей информация на дисплее077u8g.firstPage();078do {079print_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 нравится больше), разбираете их, пишете свою программу типа "Хэлло, Вася", потом размечаете экран и в простой программке выдаете текст, который потом будете получать динамически, на нужное ему место экрана. Получилось? Вставляйте функции вывода в свою программу и наслаждайтесь!