Ви не увійшли.
Сторінки 1
Доброго времени суток. Крик души вынуждает меня создать тут тему. Была куплена arduino Mega и 3.2 tft lcd, GPS модуль VK2828U7G5LF. Я новенький в ардуино. До этого делал на nano проект с авто поливом( отображал данные с DHT11 на экран. И в случае падения влажности включался полив). Постоянно заниматься нет возможности, но хочется . Немного отступил от темы. Эпопея началась почти неделю назад. Подключил все и начал танцы с бубном. Нашел код, залил, подключил - ничего. После разбора нашел что нужно поменять пины TX/RX местами.
Поменял. опять ничего. Начал крутить код и в итоге получил вывод на порт 57600.
#include <TinyGPS.h>
#include <UTFT.h>//библиотека для работы с дисплеем
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера управляющих пинов
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
// объявления встроенного шрифта
extern uint8_t BigFont[];
//long lat,lon; // create variable for latitude and longitude object
bool newdata = false;
float lat,lon;
TinyGPS gps; // create gps object
int gpsSpeedKm = 0;
char gpsSpeed[3];
int num_sat, gps_speed;
static const int RXPin = 19, TXPin = 18;
static const uint32_t GPSBaud = 9600;
String heading;
void setup(){
Serial.begin(57600); // connect serial
Serial.println("The GPS Received Signal:");
Serial1.begin(9600); // connect gps sensor
// инициализируем дисплей с вертикальной ориентацией
myGLCD.InitLCD();
// очищаем экран
myGLCD.clrScr();
myGLCD.setFont(BigFont);
// устанавливаем красный цвет «чернил» для печати и рисования
myGLCD.setColor(VGA_RED);
}
void loop(){
while(Serial1.available()){ // check for gps data
if(gps.encode(Serial1.read()))// encode gps data
{
gps.f_get_position(&lat,&lon); // get latitude and longitude
Serial.print("Position: ");
//Latitude
Serial.print("Latitude: ");
Serial.print(lat,6);
Serial.print(",");
//Longitude
Serial.print("Longitude: ");
Serial.println(lon,6);
delay (10000);
}
}
}
Прошу прощение за наличие мусора в коде вывода. После вывода данных GPS на порт решил вывести их на экран ( изначально была задумка сделать GPS спидометр для машины с возможность добавлять различные данные на экран. Типа остаток в бензобаке ( мой датчик не работает и на машину 78 года не так уж и просто найти его) и т.д. ). Но с чего-то нужно было начать. Было решено, что в целях обучения и примера будут выведены GPS данные на экран (широта, долгота). И тут меня ждала каменная стена, в которую моя не опытная голова уже бьется неделю безрезультатно. Люди в интернете выводят данные без проблем. Все просто и понятно. Мой же бубен так и не дал результатов чтобы я не пробовал( обычный текст вывести без проблем). Я не пишу потому-что проще узнать у кого-то чем напрягать свою голову. Я пишу потому-что неделю отпуска с утра до вечера сижу за кодом и не могу добиться результата.
Последний код, к которому я вернулся :
#include <UTFT.h>//библиотека для работы с дисплеем
#include <SoftwareSerial.h>
#include <TinyGPS.h>
float lat = 28.5458,lon = 77.1703; // создать переменную для объекта широты и долготы
SoftwareSerial gpsSerial(19, 18);//rx,tx
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
extern uint8_t BigFont[];// объявления встроенного шрифта
TinyGPS gps; // создать gps объект
void setup(){
Serial.begin(9600); // соединяем serial
gpsSerial.begin(9600); // подключаем gps датчик
myGLCD.InitLCD();
myGLCD.clrScr(); // очищаем экран
}
void loop(){
while(gpsSerial.available()){ // проверка gps данных
if(gps.encode(gpsSerial.read()))// шифровать gps данные
{
gps.f_get_position(&lat,&lon); // получить широту и долготу
// отобразить позицию
myGLCD.setFont(BigFont);
myGLCD.setColor(VGA_RED); // устанавливаем красный цвет «чернил» для печати и рисования
myGLCD.print("GPS Signal", LEFT, 0);
myGLCD.setFont(BigFont);
myGLCD.setColor(VGA_RED); // устанавливаем красный цвет «чернил» для печати и рисования
myGLCD.print("LAT:", LEFT, 50);
myGLCD.setFont(BigFont);
myGLCD.setColor(VGA_RED); // устанавливаем красный цвет «чернил» для печати и рисования
myGLCD.print(lat, LEFT, 100);
myGLCD.setFont(BigFont);
myGLCD.setColor(VGA_RED); // устанавливаем красный цвет «чернил» для печати и рисования
myGLCD.print(",LON:", LEFT, 150);
myGLCD.setFont(BigFont);
myGLCD.setColor(VGA_RED); // устанавливаем красный цвет «чернил» для печати и рисования
myGLCD.print(lon, LEFT, 200);
}
}
String latitude = String(lat,6);
String longitude = String(lon,6);
Serial.println(latitude+";"+longitude);
delay(1000);
}
Выбивает ошибку:
C:\Users\wtf\Documents\Arduino\test_drygoi\test_drygoi.ino: In function 'void loop()':
C:\Users\wtf\Documents\Arduino\test_drygoi\test_drygoi.ino:24:37: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
myGLCD.print("GPS Signal", LEFT, 0);
^
C:\Users\wtf\Documents\Arduino\test_drygoi\test_drygoi.ino:27:32: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
myGLCD.print("LAT:", LEFT, 50);
^
test_drygoi:30:30: error: no matching function for call to 'UTFT::print(float&, int, int)'
myGLCD.print(lat, LEFT, 100);
^
In file included from C:\Users\wtf\Documents\Arduino\test_drygoi\test_drygoi.ino:1:0:
C:\Users\wtf\Documents\Arduino\libraries\UTFT/UTFT.h:215:8: note: candidate: void UTFT::print(char*, int, int, int)
void print(char *st, int x, int y, int deg=0);
^
C:\Users\wtf\Documents\Arduino\libraries\UTFT/UTFT.h:215:8: note: no known conversion for argument 1 from 'float' to 'char*'
C:\Users\wtf\Documents\Arduino\libraries\UTFT/UTFT.h:216:8: note: candidate: void UTFT::print(String, int, int, int)
void print(String st, int x, int y, int deg=0);
^
C:\Users\wtf\Documents\Arduino\libraries\UTFT/UTFT.h:216:8: note: no known conversion for argument 1 from 'float' to 'String'
C:\Users\wtf\Documents\Arduino\test_drygoi\test_drygoi.ino:33:34: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
myGLCD.print(",LON:", LEFT, 150);
^
test_drygoi:36:30: error: no matching function for call to 'UTFT::print(float&, int, int)'
myGLCD.print(lon, LEFT, 200);
^
In file included from C:\Users\wtf\Documents\Arduino\test_drygoi\test_drygoi.ino:1:0:
C:\Users\wtf\Documents\Arduino\libraries\UTFT/UTFT.h:215:8: note: candidate: void UTFT::print(char*, int, int, int)
void print(char *st, int x, int y, int deg=0);
^
C:\Users\wtf\Documents\Arduino\libraries\UTFT/UTFT.h:215:8: note: no known conversion for argument 1 from 'float' to 'char*'
C:\Users\wtf\Documents\Arduino\libraries\UTFT/UTFT.h:216:8: note: candidate: void UTFT::print(String, int, int, int)
void print(String st, int x, int y, int deg=0);
^
C:\Users\wtf\Documents\Arduino\libraries\UTFT/UTFT.h:216:8: note: no known conversion for argument 1 from 'float' to 'String'
exit status 1
no matching function for call to 'UTFT::print(float&, int, int)'
Как-то так.
Неактивний
Почитайте про работу с библиотекой для экрана. Например, здесь https://habr.com/ru/post/196600/
Обратите внимание на вывод значений на экран командами print и printNumF.
Попробуйте определить константу LEFT или переустановить библиотеку, через менеджер. А так же, включите вывод всех сообщений компилятора, в настойках IDE. Станет понятнее.
Ну для начала да, разберитесь с типами переменных и выводом их на экран. А там может и еще что-то вылезет, а может и нет
посмотрите в примерах к библиотеке как выводятся на экран текст и переменные - целочисленные и с плавающей точкой
Здравствуйте еще раз . Вроде лед тронулся. Конечного результата еще не добился, но все же. Проблема с отображением, как по мне , решилась. Только теперь у меня сложилось впечатление что я не правильно прописал общение с GPS. Работает он так как на комп передает данные. Код проходит до if (!loc_valid) и просто мигают надписи "Waiting". Отображения позиции так и не дождался...
#include <UTFT.h>//библиотека для работы с дисплеем
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
static const int RXPin = 18, TXPin = 19;
static const uint32_t GPSBaud = 9600;
SoftwareSerial Serial_GPS(RXPin, TXPin);;//rx,tx
UTFT myGLCD(CTE32HR,38,39,40,41);
extern uint8_t SmallFont[];// объявления встроенного шрифта
TinyGPSPlus gps; // создать gps объект
void setup(){
Serial_GPS.begin(GPSBaud); // подключаем gps датчик
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
myGLCD.setColor(VGA_RED); // устанавливаем красный цвет
myGLCD.print("GPS Signal", 10, 10);
}
void loop(){
GPSDelay(1000);
unsigned long start;
double lat_val, lng_val;
bool loc_valid;
lat_val = gps.location.lat();
loc_valid = gps.location.isValid();
lng_val = gps.location.lng();
if (!loc_valid)
{
myGLCD.print("LAT:", LEFT, 50);
myGLCD.print("LON:", LEFT, 150);
myGLCD.print("Waiting", LEFT, 100);
myGLCD.print("Waiting", LEFT, 200);
delay(2000);
myGLCD.clrScr();
}
else
{
myGLCD.clrScr();
myGLCD.print("GPS Signal", 10, 10);
myGLCD.print("LAT:", LEFT, 50);
myGLCD.print("LON:", LEFT, 150);
myGLCD.printNumI(lat_val,3, LEFT, 100);
myGLCD.printNumI(lng_val,3, LEFT, 200);
delay(2000);
}
}
static void GPSDelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (Serial_GPS.available());
gps.encode(Serial_GPS.read());
} while (millis() - start < ms);
}
Неактивний
IsValid, видимо, означает готовность данных к чтению, а вы читаете их когда попало. Там, в библиотеке, должны быть примеры. Не работать может по разным причинам и по причине ошибок в монтаже также.
Сторінки 1