Új hozzászólás Aktív témák

  • tonermagus

    aktív tag

    Ma egész szépen elhaladtam a GPS projektemmel. Felépítettem a Bázis állomást, NEO GPS 8 leszedi a GPS koordinátát, azt eltárolom egy floatban amit átküldök NRF24L01+PA+LNA-val a Rover eszköznek.

    float gpsadat=fix_data.latitude();
    float gpsadat1=fix_data.longitude();

    radio.write(&gpsadat, sizeof(gpsadat));
    radio.write(&gpsadat1, sizeof(gpsadat1));

    Tudom, ez nem túl elegáns, tömbként jobb lenne átküldeni, de még nem jöttem rá hogy kell lekódolni :D Na mindegy, a lényeg az, hogy ez meg is érkezik a Rover-hez, mindkét érték tökéletesen megjelenik Seriallal kiíratva a gpsadat és gpsadat1-et.

    A gond ott kezdődik, hogy ugyebár két dinamikusan változó GPS koordináta között akarok távolságot mérni. Így az alábbi parancsot használom:

    NeoGPS::Location_t base( gpsadat, gpsadat1 );
    float range = fix.location.DistanceKm(base);

    Ez tökéletesen működik ha fix számot írok be a :

    NeoGPS::Location_t base( 43.121212, 20.121212 );
    float range = fix.location.DistanceKm(base);

    De ha oda a gpsadat, gpsadat1 -t használom akkor nagyon hülye adatok jönnek ki.
    Hosszas nyomozás után rájöttem, hogy a Location_t elvileg int32_t változót vár paraméternek, én pedig ugye float-ot adok. Így a gyakorlatban ezt kapja:

    NeoGPS::Location_t base( 43, 20 );

    Hogy tudom azt megcsinálni, hogy a 43.121212-ból 43121212 legyen? Mert úgy is elfogadja. Tudom hogy nagyon alap dolog, de rajtam kifog :D

    Próbálkoztam az int32_t gpslat=gpsadat sorral is, de ekkor is csak 43 tárolódik el a gpslat változóban...

    Egyébként könnyen lehet hogy már a gps koordináták kiolvasásánál lehetne ilyen formátumra kérni az adatot, de ebben János250 kolléga lehet jobban képben van :D

    [ Szerkesztve ]

Új hozzászólás Aktív témák