• 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
Problem z kompilacją własnej biblioteki
#1
Cześć.

Mam problem. Próbuję stworzyć swoją pierwszą bibliotekę do obsługi GPS. Zrobiłem więc dwa pliki GPS.h i GPS.cpp.

W GPS.h mam:


Kod:
class GPS
{
  // PRIVATE VARIABLES
  private:

    HardwareSerial        *_Serial;           
    uint8_t              _PinRx;             
    uint8_t              _PinTx;             

  // PUBLIC METHODS
  public:

    /// @brief Konstruktor klasy GPS.
    GPS(HardwareSerial &Interface, uint8_t PinRx, uint8_t PinTx);
   
    /// @brief Inicjalizacja portu UART do komunikacji z GPS.
    void begin(uint16_t Baudrate = 9600);

};


A w GPS.cpp mam:


Kod:
GPS::GPS(HardwareSerial &Interface, uint8_t PinRx, uint8_t PinTx)
{
  _Serial    = &Interface;                           
  _PinRx      = PinRx;                                 
  _PinTx      = PinTx;                                 
}

void GPS::begin(uint16_t Baudrate)
{
  // Otworzenie portu UART na wskazanych pinach.
  _Serial.end();
  _Serial.begin(Baudrate, SERIAL_8N1, _PinRx, _PinTx);
  while(!(*(_Serial)));
}


Oczywiście pomijam inne istatne kwestie jak dodanie "#ifndef GPS_h" czy #include z bliblioteką.
Stworzyłem sketch i w nim coś takiego:


Kod:
[...]
GPS GPS(Serial2, 23, 19);

void setup() {
  GPS.begin();
}

[...]


Podczas próby kompilacji mam błąd:

c:\Users\Adam\Desktop\LTSketchbook\libraries\GPS\src\GPS.cpp:51:11: error: request for member 'begin' in '((GPS*)this)->GPS::_Serial', which is of pointer type 'HardwareSerial*' (maybe you meant to use '->' ?)
  51 |  _Serial.begin(Baudrate, SERIAL_8N1, _PinRx, _PinTx);
      |          ^~~~~

O co chodzi?

Moja "biblioteka" na razie ma tylko tyle, bo próbuję czy w ogóle idę w dobrym kierunku, ale już na starcie poległem.
 
Odpowiedź
#2
Zobacz jak są robione inne biblioteki, sam nie pisałem ale kojarzę, że nie możesz tak zmieniać hardware serial, jak jest sprzętowy to po prostu podajesz który i on ma zafiksowane piny RX/TX, jak chcesz podać piny to musisz użyć jakiś SoftSerial.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
(15-01-2025, 15:36)kaczakat napisał(a): Zobacz jak są robione inne biblioteki, sam nie pisałem ale kojarzę, że nie możesz tak zmieniać hardware serial, jak jest sprzętowy to po prostu podajesz który i on ma zafiksowane piny RX/TX, jak chcesz podać piny to musisz użyć jakiś SoftSerial.


Zapomniałem dodać, że chodzi o ESP32. Tutaj da się zmieniać piny. Ale nie w tym problem raczej.
 
Odpowiedź
#4
(15-01-2025, 09:44)Adix3 napisał(a): Cześć.

Mam problem. Próbuję stworzyć swoją pierwszą bibliotekę do obsługi GPS. Zrobiłem więc dwa pliki GPS.h i GPS.cpp.

W GPS.h mam:


Kod:
class GPS
{
    HardwareSerial        *_Serial;           

A w GPS.cpp mam:


Kod:
  _Serial.end();
  _Serial.begin(Baudrate, SERIAL_8N1, _PinRx, _PinTx);

Podczas próby kompilacji mam błąd:

c:\Users\Adam\Desktop\LTSketchbook\libraries\GPS\src\GPS.cpp:51:11: error: request for member 'begin' in '((GPS*)this)->GPS::_Serial', which is of pointer type 'HardwareSerial*' (maybe you meant to use '->' ?)
  51 |  _Serial.begin(Baudrate, SERIAL_8N1, _PinRx, _PinTx);
      |          ^~~~~

Przecież kompilator wyraźnie napisał - masz dać -> a nie kropkę, _Serial masz jako wskaźnik a nie referencje.
_Serial->end();
_Serial->begin(...)
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości