Stap 7: Software: de Game schets
De verschillende modules in de schets:Setup:
De voor de hand liggende items zijn ingesteld en geïnitialiseerd: seriële monitor, GpsSerial naar de GPS-module, de Led drijvende shift register, alle spel variabelen.
De standaard 1Hz GPS bijwerken tijdens veld testen, tarief bleek te traag.
Ik moest graven in de ST22 toepassing Notities en nu een aantal binaire opstellingen te sturen naar de GPSmodule.
- Seriële poortinterface begint met 9600 baud, dan 38400 baud rat is ingesteld voor de module en de Gps-Arduino interface
- De vernieuwingsfrequentie van GPS wordt verhoogd naar 8 Hz
- De voetgangers navigatiemodus is ingesteld, aanpassing van de GPS-interne filters
- Alle overbodige NMEA zinnen uit de GPS zijn afgesloten, alleen GPRMC is gehouden
Tot mijn frustratie, ik kon niet op de GPS ACK en NACK berichten weergeven, maar ik heb bewijs dat mijn berichten wel ontvangen.
Hoewel het mogelijk is, heb ik de bovenstaande instellingen niet permanent opgeslagen in de GPS.
LED behandeling:
Het led display kunt meerdere berichten weergeven:
- Zelftest: leds verlicht zijn, verschijnen een voor een, in een langzame manier, terwijl de GPS-module probeert om een fix te krijgen.
- Volgende waypoint zoeken : led overeenkomt met de relatieve invloed naar waypoint brandt
- waypoint gevonden OK: de leds voeren 2 snel ' Mexicaanse ' golfbewegingen.
- NOK, waypoint nog niet bereikt: leds 'nee' zeggen tegen door afwisselend de 90 ° en-90 ° leds.
- Punished: reeks 10 snelle NOK berichten.
- Hoera, laatste waypoint gevonden & Game Over: aantal snel Mexicaanse golven tot uitgeschakeld.
De logica van het spel:
Bij het opstarten, wordt de zelftest weergegeven, wacht een moeilijke situatie.
Wanneer er een oplossing beschikbaar is, is search-modus ingevoerd; Als de speler bewegende krijgt, wordt het lager naar het volgende waypoint weergegeven.
Na het indrukken van de knop OK, zijn verschillende situaties mogelijk:
- de afstand naar het waypoint is binnen de grenzen en het laatste waypoint is niet te bereiken: OK wordt weergegeven, het volgende waypoint wordt geladen en zoekmodus ingevoerd
- de afstand naar het waypoint is binnen de grenzen en het laatste waypoint is bereikt: hoera is weergegeven, game is voorbij
- de afstand is nok en dit is de eerste of tweede fout voor dit waypoint: na NOK display, wordt de zoekopdracht voortgezet
- de afstand is nok voor de derde keer: Punished wordt weergegeven, de vorige waypoint wordt geladen en zoekmodus ingevoerd
GPS behandeling:
Allermeest naar de interface naar de GPS-module is behandeld door de nmea.h library
Drie uitgangen worden hier gebruikt:
- kop, gps.gprmc_course(), de richting van de beweging van de speler
- rekening houdend met, gps.gprmc_course_to(latitude_Wp,longitude_Wp), de richting naar het doel waypoint
- afstand, gps.gprmc_distance_to (latitude_Wp, longitude_Wp, MTR), de afstand tot het doel waypoint
De relatieve invloed, weergegeven op het led display, wordt berekend door de substracting dragen van kop, en brengen het resultaat tussen 0° en 180°.
Terwijl een zin NMEA gedecodeerde teken is door chracter door nmea.h, mag het niet worden onderbroken. Daarom deze actie is ingesloten in een "tijdje (! gedecodeerde)" lus.
Geheugen Handling:
Modules: getNextWaypoint, getPreviousWaypoint, integer en float lezen routines
getNextWaypoint berekent de volgende Waypoint adres vorm de verwijzing van het huidige waypoint, en geeft breedtegraad en lengtegraad van de volgende doel-waypoint. Het markeert ook het einde van de lijst van waypoint wanneer bereikt.
getPreviousWaypoint volgt de waypoint link keten, vanaf de onderkant. Opmerking dat de waypoints in het geheugen niet noodzakelijkerwijs opeenvolgende, zijn aangezien het spel meester kon hebt verwijderd of ingevoegd waypoints in de lijst.
De ophalen routines voor gehele getallen en praalwagens zijn hetzelfde als in de schets van het menu.
Zie schets hieronder.