• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
pozycja z gps na 1,8 tft lcd - dziwne znaki
#1
Witam
Potrzebuję wyświetlenia pozycji z GPS na wyświetlaczu tft lcd1,8.

Umiem wyświetlić pozycję GPS w serial port, umiem wyświetlić tekst na wyświetlaczu, nie umiem tego złożyć uzyskuję jedynie "krzaczki"Sad 

Jak przerobić pozycję GPS na daną do wyświetlacza, jakoś przerobić na daną liczbową? jak to zrobić??
próbuję znaleźć odpowiedź na zagranicznych forach ale nie mogę nic znaleźć.

Czy ktos mógłby mi wytłumaczyć jakie kroki muszę wykonać żeby wyświetlić daną z gps na tft lcd?
 
Odpowiedź
#2
(21-11-2017, 14:14)jack1987 napisał(a): Umiem wyświetlić pozycję GPS w serial port, umiem wyświetlić tekst na wyświetlaczu, nie umiem tego złożyć uzyskuję jedynie "krzaczki"Sad 

Jak przerobić pozycję GPS na daną do wyświetlacza, jakoś przerobić na daną liczbową? jak to zrobić??
próbuję znaleźć odpowiedź na zagranicznych forach ale nie mogę nic znaleźć.
Przypuszczam że nie rozumiesz co dany program robi a tylko korzystasz z gotowców które robią daną rzecz.
Przypuszczam że nie rozumiesz na jakich typach danych pracujesz.

Pokaż jak wyświetlasz pozycję GPS z użyciem portu szeregowego i jak wyświetlasz tekst na wyświetlaczu.
Pokaż też program który nie działa.

Cytat:Czy ktos mógłby mi wytłumaczyć jakie kroki muszę wykonać żeby wyświetlić daną z gps na tft lcd?
Musisz nauczyć się podstaw podstaw programowania w C++.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#3
Masz rację korzystam z gotowców i modyfikuję je częściowo metodą prób i błędów do własnych potrzeb.
Niestety nauka C++ wymaga czasu a tego nie mam wystarczającoSad nauczyciela tez nie,
Przerobiłem trochę wygooglanych "kursów" część projektu przy ich pomocy zrobiłem ale to mi nie pozwoliło zrealizować całości, dlatego szukam pomocy na forum.

Wiem że ten kod jest eeee "nie do końca idealny"  Rolleyes ale wyświetla pozycję, jednak tylko raz, żeby ja zaktualizować trzeba resetować arduinoSad jeszcze "tylko" odświeżanie live i będę zadowolony.
Kod:
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <TFT.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
#define cs   10
#define dc   9
#define rst  8
TFT TFTscreen = TFT(cs, dc, rst);

char latitude_c[15];
char latitude[15];
char longitude_c[15];
char longitude[15];
char lat_c[4];
char lat[4];
char lon_c[4];
char lon[4];
 
void setup() {
  TFTscreen.begin();
  ss.begin(GPSBaud);
  TFTscreen.background(0, 0, 0);
  TFTscreen.stroke(0, 255, 100);
  TFTscreen.setTextSize(2);
  TFTscreen.text("DANE GPS", 2, 2);
}
void loop()
{
{
 String latitude_b =String(gps.location.lat(),8);
 latitude_b.toCharArray(latitude_c,15);          // convert the reading to a char array
 String lat_b = String(gps.location.lat(),6);
 lat_b.toCharArray(lat_c, 10);                   // convert the reading to a char array
 latitude_b.toCharArray(latitude,25);            // convert the reading to a char array
 lat_b.toCharArray(lat, 10);                     // convert the reading to a char array
 
 while (ss.available() > 0)
 if (gps.encode(ss.read()))
 if (millis() > 5000 && gps.charsProcessed() < 10)
 {
 TFTscreen.stroke(255, 255, 0);
 TFTscreen.setTextSize(2);
 TFTscreen.text("BRAK POL Z GPS",2, 80);
 while(true);
 }
 TFTscreen.stroke(255, 255, 0);
 TFTscreen.setTextSize(2);
 if (gps.location.isValid())
 {
 TFTscreen.stroke(0, 0, 0);
 TFTscreen.text("BRAK SYGN. GPS",2, 75);
 TFTscreen.stroke(0, 255, 50);
 TFTscreen.text("GPS OK",2, 50);
 TFTscreen.text(lat,2, 90);

 delay(1500);
 
 TFTscreen.noStroke();
 TFTscreen.fill(0, 0, 0);
 TFTscreen.rect(0, 65, 160, 50);
 delay(5);
 }
 else
 {
 TFTscreen.text("BRAK SYGN",2, 75);
 }}}


Rozumiem że nauka C++ byłaby najlepsza, ale chodzi tu o wyłącznie jeden projekt, to trochę tak ja uczyć się języka żeby przeczytać jedną broszurę w oryginale.
 
Odpowiedź
#4
Poniżej Twój kod trochę bardziej czytelny.
Popatrz na strzałki i odpowiedz czy tak to ma wyglądać.

Kod:
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <TFT.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
#define cs   10
#define dc   9
#define rst  8
TFT TFTscreen = TFT(cs, dc, rst);

char latitude_c[15];
char latitude[15];
char longitude_c[15];
char longitude[15];
char lat_c[4];
char lat[4];
char lon_c[4];
char lon[4];

void setup() {
   TFTscreen.begin();
   ss.begin(GPSBaud);
   TFTscreen.background(0, 0, 0);
   TFTscreen.stroke(0, 255, 100);
   TFTscreen.setTextSize(2);
   TFTscreen.text("DANE GPS", 2, 2);
}
void loop()
{
   {
       String latitude_b =String(gps.location.lat(),8);
       latitude_b.toCharArray(latitude_c,15);          // convert the reading to a char array
       String lat_b = String(gps.location.lat(),6);
       lat_b.toCharArray(lat_c, 10);                   // convert the reading to a char array
       latitude_b.toCharArray(latitude,25);            // convert the reading to a char array
       lat_b.toCharArray(lat, 10);                     // convert the reading to a char array

 --->  while (ss.available() > 0)
 --->      if (gps.encode(ss.read()))
               if (millis() > 5000 && gps.charsProcessed() < 10)
               {
                   TFTscreen.stroke(255, 255, 0);
                   TFTscreen.setTextSize(2);
                   TFTscreen.text("BRAK POL Z GPS",2, 80);
                   while(true);
               }
       TFTscreen.stroke(255, 255, 0);
       TFTscreen.setTextSize(2);
       if (gps.location.isValid())
       {
           TFTscreen.stroke(0, 0, 0);
           TFTscreen.text("BRAK SYGN. GPS",2, 75);
           TFTscreen.stroke(0, 255, 50);
           TFTscreen.text("GPS OK",2, 50);
           TFTscreen.text(lat,2, 90);

           delay(1500);

           TFTscreen.noStroke();
           TFTscreen.fill(0, 0, 0);
           TFTscreen.rect(0, 65, 160, 50);
           delay(5);
       }
       else
       {
           TFTscreen.text("BRAK SYGN",2, 75);
       }
   }
}

Cytat:Rozumiem że nauka C++ byłaby najlepsza, ale chodzi tu o wyłącznie jeden projekt, to trochę tak ja uczyć się języka żeby przeczytać jedną broszurę w oryginale.
Albo się uczysz albo wystawiasz zlecenie na wykonanie programu.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#5
rozumiem że zaznaczone fragmenty są od portu szeregowego, i w sumie nie sa potrzebne, ale bez tego nie działało więc zostawiłemSmile miałem nadzieję że muszę już tylko zapewnić odświeżanie danych, w końcu pozycja się wyświetla,  w dodatku prawidłowoSmile
ok może inaczej, krok po kroku w taki sposób poradziłem sobie z innymi częściami projektu więc może i teraz zadziała, przynajmniej będe wiedział czego konkretnie mam się uczyć.

Potrzebuje pomocy w sprawdzeniu założeń (oczywistych tez nie pomijam żeby nic nie uciekło):
Muszę kolejno:
1 załączyć odpowiednie biblioteki gps i TFT lcd
2 zdefiniować piny itp
2A zdefiniować zmienne będące wybranymi i nieprzerobionymi danymi z gps pobranymi z pkt 3
2B zmienne z 2A przetłumacyzć na zmienne ktore będą mozliwe do wyświetlenia na ekranie?
2C zrobić pętlę która będzie powiedzmy co sekundę aktualizować dane 2A
3 wybrać z gps interesujące mnie dane (szerokosć i długośc) i teraz ... zapisac je jako zmienne 2A?
4 wyświetlić zmienne 2B na ekranie

od razu pytanie o to jakiego typu powinny być to zmienneSad
 
Odpowiedź
#6
(22-11-2017, 14:16)jack1987 napisał(a): rozumiem że zaznaczone fragmenty są od portu szeregowego, i w sumie nie sa potrzebne,
A niby jak odczytujesz dane z gps?
Cytat:ale bez tego nie działało więc zostawiłemSmile
Sklejasz coś na ślepo bez zrozumienia co i jak

Naucz się jak działają poszczególne funkcje, jak wygląda ich zapis(klamry).
Przeczytaj uważnie opis biblioteki gps, popracuj z przykładami, przetestuj różne przypadki.
Zostaw na razie wyświetlacz, dane wyświetlaj na terminalu - masz wolny port szeregowy.
Gdy będziesz rozumiał co i jak wyświetla sie na terminalu to dopiero dołącz wyświetlacz


Cytat:...
...
...
od razu pytanie o to jakiego typu powinny być to zmienneSad
Tego dowiesz się jak nauczysz się podstaw c++
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
  


Skocz do:


Przeglądający: 2 gości