Stap 11: Met behulp van GPS
Helaas moesten we wachten op het verkrijgen van de drone naar een aangewezen lengtegraad en breedtegraad of waypoint te vliegen. Hoewel we slechts ongeveer een maand zijn of minder weg uit het voltooid. Op mijn eerste poging om het GPS-toestel op de parallax Lees kon ik slaan alles succesvol in meerdere arrays van bytes. Echter bleek het moeilijker om de arrays in een float-variabele, zodat ik een wegversperring geraakt. Hoewel ik kon toegang tot alle informatie die ik nodig had kon ik niet goed manipuleren als float mathfuncties wilt gebruiken. Het GPS-toestel gaf ons de gegevens byte voor byte, zodat we konden niet vinden een manier om te slaan onze aparte matrix in individuele float variabelen.
PUB readGPS | u, i, v, w, q, j, e, f, g, h, k, d, dec, finale, cntr, MN_AT [1], timestamp [5], datastatus [1], rmcE_W [1], rmcN_S [1], rmclong [10], rmclat [10], EPD [5], modus [2], lat [10], N_S [1], E_W [1], alti [10], longi [10], kwaliteit [2], nummer [2], indicator [10], tijd [10], adres, beginnen, eindigen , char
** Dit is waar we alle zullen we voor de functie van readGPS, variabelen hebt gedefinieerd voor het opslaan van waarden in de matrices van informatie zullen we van plan
Herhaal
Herhaal
Ik: = UARTS.rx(GPS)
GPS_IN [v]: = i
Als w == 0
indicator [q]: = GPS_IN [v]
' UARTS.tx (PC, indicator[q])
q ++
** Ik heb gemaakt twee herhalen lussen, de eerste is om te stellen de items terug naar nul ook telkens als er een komma een andere teller gaat tot bijhouden van de informatie die wij willen toegang tot in de NMEA-tekenreeks. De volgende herhaling gaat totdat er een komma is, zodat de w teller omhoog gaat. Anders herhalen de volgende lus maakt gebruik van de w teller te herkennen zijn plek langs de NMEA-tekenreeks en pak de informatie aan een bepaalde variabele op te slaan. Bijvoorbeeld w == 0, dus we zijn het opslaan van de indicator, deze manier kan ik een eenvoudige als-instructie gebruiken om te beseffen welke NMEA-tekenreeks is de computer lezen (zie hieronder).
als indicator [2] "G" en indicator [3] == == "G"
Als w == 1
tijd [j]: = GPS_IN [v]
' UARTS.tx (PC, time[j])
j ++
Als w == 2
lat [u]: = GPS_IN [v]
' UARTS.tx (PC, lat[u])
u ++
Als w == 3
N_S [g]: = GPS_IN [v]
' UARTS.tx (PC, N_S[g])
g ++
…….
Als w 7 ==
nummer [h]: = GPS_IN [v]
' UARTS.tx (PC, number[h])
h ++
Als w == 9
alti [k]: = GPS_IN [v]
' UARTS.tx (PC, alti[k])
k ++
als indicator [3] "S" en indicator [4] == == "A"
Als w == 1
MN_AT [j]: = GPS_IN [v]
' UARTS.tx (PC, MN_AT[j])
j ++
Als w == 2
modus [u]: = GPS_IN [v]
' UARTS.tx (PC, mode[u])
u ++
Als GPS_IN [v] == ","
w ++
Als GPS_IN [v] == "$"
q: w =: j =: = u: = g: = e: f =: = h: = d: = 0
v ++
totdat ik == ","
Helaas was ik niet in staat om de array naar een drijvende-kommawaarde dus ik moest wachten op deze aanpak voor nu. We besloten om het gebruik van een GPS-float-bibliotheek die precies wat ik probeerde doet te doen behalve ze vond een manier om dit te doen met één of andere assemblage. Zodat het lijkt alsof ik ben niet goed genoeg berijmd in de taal van de draai om de array is opgeslagen in praalwagens. Ze gebruikten hex decimalen en sommige zeer specifieke code die ik heb alleen gezien voor spin taal. Ongeacht het gebruik van de nieuwe bibliotheek ben mij kundig voor toegang tot alle vereiste informatie als float variabelen, dus ik was toen in staat om een dragende functie waar zullen wij onze waypoint in lengte- en breedtegraad. Met behulp van een wiskundige formule te vinden die kan ik gebruiken de GPS float math variabelen van lengte- en breedtegraad voor het berekenen van onze invloed. De volgende stap zal zijn om de drone haar koers op basis van wat te veranderen de peiling en de post leest. Helaas moesten we ronden van het project voor de competitie wegens en onverwachte verlof naar Nederland een week voor de competitie voorbij is. Geef ons een paar weken en we moeten een volledige vermogen om het hoofd van de drone naar specifieke waypoints.
PUB Bearing (lon, lat) | dlat, dlon, blon, blat, x, y, a, b, c, Beer
Blon: =-121.8576
blat: = 37.6967
dlon: = fm.fsub (lon, blon)
dlat: = fm.fsub (lat, blat)
een: = fm.fmul(fm.cos(lat), fm.sin(blat))
b: = fm.fmul(fm.fmul(fm.sin(lat), fm.cos(blat)), fm.cos(dlon))
y: = fm.fmul(fm.sin(dlon), fm.cos(blat))
x: = fm.fsub(a,b)
dragen: = fm.degrees(fm.atan2(y,x))
** Blon is onze laatste longitude en onze blat is onze laatste latitude te gebruiken voor onze lager. Dlon en dlat zijn onze verschil in lengte- en breedtegraad van onze rubriek en onze waypoints lengte- en breedtegraad. Anders gebruiken wij enkel een wiskundige formule met onze float math bibliotheek en het omzetten in alle graden om onze invloed.