Stap 5: Een schets maken
Schets:
Mijn volledige schets is beschikbaar in het zip-bestand in de volgende stap, echter, is het nuttig om een idee van het algemeen plan om gemakkelijker aan te passen.
Onderbreken:
We moeten de radio Fly-by modulerende pin D5 hoog/laag met een snelheid van 50 baud. Dat wil zeggen, elke 20ms moeten we vertegenwoordigen een nieuwe bits van gegevens als een hoog of laag voor een 1 of 0 respectievelijk. We gebruiken deze gegevensstroom voor het coderen van een tekenreeks. Er zijn verschillende methoden om dit, maar 7-bits ASCII is het meest gebruikelijk. We houden een dubbele-buffer dat de tekenreeks voor de transmissie en een kopie die wij met bijgewerkte gegevens bereiden.
Om de meest efficiënte en betrouwbare transmissie en vooral om ons nauwkeurige timing, sturen we de tekenreeks onder interrupt. Dit vereist een korte en snelle stukje code eenvoudigweg om bij te houden welke bits van welke byte van de tekenreeks die we zijn momenteel doorgeven en gaan verder met de volgende bit telkens. Als we klaar bent met één tekenreeks schakelen we de tekenreeks buffers, verplaatsen naar de meest recente gegevens uit de andere buffer verzenden.
Hoofdlus:
In de hoofdlus circuleren we, het lezen van elk van de sensoren en de GPS wanneer ze klaar zijn. De meest recente waarden worden opgeslagen in variabelen. Wanneer de GPS klaar om te bieden op een nieuwe locatie is, we lezen dat, decoderen en bijwerken van het werkexemplaar van de tekenreeks. We moeten uitschakelen onderbreekt kort om bij te werken van de buffer, zodat we niet eindigen toezending van een tekenreeks half-gebouwd. Dientengevolge, updaten we de buffer alleen wanneer een nieuwe GPS-locatie klaar, is zodat wij geen interrupts uitschakelen voor te lang hebben.
Telkens wanneer wij overschakelen buffers die we ingesteld een vlag die de hoofdlus te vertellen dat een nieuwe transmissie wordt gestart. De oude tekenreeks die werd zopas is vervolgens naar de SD-kaart geschreven voordat de buffer tot worden bijgewerkt wordt geopend.
We moeten ook een oogje houden op de GPS om ervoor te zorgen dat het blijft in de Vluchtmodus. De reden waarom dat we gebruiken een Ublox GPS module is dat het tot de hoogten die we zullen worden bezoekt werken zal - vele GPSs niet werken boven ongeveer 14 km. Om de Ublox werken op grote hoogte, moeten we ervoor zorgen dat er in de juiste modus.
Sensoren & poorten:
De Raad van bestuur kan praten met de GPS-module door I2C of UART. Ik heb gekozen de I2C-interface gebruiken, zodat ik de UART gebruiken kunnen voor foutopsporing door aan de seriële poort van de PC te koppelen. We zullen ook de I2C gebruiken om te praten met de Honeywell druksensor, maar de twee lijken te bestaan op de I2C regels zonder conflict.
Het bestuur vindt twee DS18B20 temperatuursensoren. Ik gebruikte één interne en één externe. Deze zijn zeer gevoelig voor timing en ik moest interrupts uitschakelen voor een paar microseconden tijdens het lezen van hen. Ze zijn anders zeer makkelijk te gebruiken. Ik gebruikte een kopie van de draad bibliotheek die beweerde te hebben minder blijft hangen dan de oorspronkelijke Arduino een. Waar of niet, werkte het prima.
De SD kaart zit op de SPI pinnen en wordt afgehandeld door de SDfat-bibliotheek. SD-kaart schrijven neemt dat een lading van geheugen en een van de echte trucs om deze schets probeerde om te controleren hoeveel gratis SRAM was beschikbaar.