Stap 7: De Code uit te leggen
Het Wetboek rechtsvordering is vrij eenvoudig. Initialiseren van de pinnen, initialiseren van de seriële poort voor GPS, de SD-kaart initialiseren en vervolgens een bestand maken. Zodra dat is voltooid als GPS heeft een slot die het zal treden lus cyclus en gegevens lezen van de TPS sensor, remlicht en GPS waarden en vervolgens die op de SD-kaart schrijven en lus starten. Vrij simpel toch? Er is een paar gotchas langs de weg, met name met de GPS en de compiler. Ik zal beschrijven hieronder.
// Can comment out this statement if it compiles. Bug on certain Arduino IDE versions. // Read here for more info: <a href="http://subethasoftware.com/2013/04/09/arduino-compiler-problem-with-ifdefs-solved/" rel="nofollow"> http://subethasoftware.com/2013/04/09/arduino-com...</a> #if 1 __asm volatile("nop"); #endif
Dit is een beetje een raar. Als u dit kunt commentaar en gecompileerd dan is dat goed. U hoeft niet zorgen over te maken. De kansen zijn dat u kunt commentaar dit uit omdat het vast door nieuwere versies van de Arduino, denk ik. Kun je naar de link in het commentaar als u wilt lezen over het probleem.
// Debug Condition #define DUEMILANOVE true // Set to true if using Duemilanove #define DEBUG false // Set to true if want to debug
Dit is voor het bepalen van wat voor soort Arduino u gebruikt en als u van plan over het gebruik van de seriële poort voor debug. De reden waarom is als gevolg van de seriële poort wordt bezet door de GPS tijdens normale werking voor de Duemilanove (oude Arduino ik weet het, zoals ik al zei heb ik dit project een tijdje terug :)). Hetzelfde doet zich voor de Uno, aangezien er slechts één seriële poort die is waarom wij liet het zoals die het was hier. Als u van plan over het gebruik van de seriële poort te debuggen, DEBUG ingesteld op true en de GPS RX en TX pinnen naar digitale pennen 3, 2 respectievelijk. Als u van de Mega heeft 4 seriële poorten DUEMILANOVE ingesteld op false en de GPS RX en TX pinnen respectievelijk ingesteld op digitale Pins 19 en 20 gebruikmaakt.
#define SERIAL_DEBUG if(DEBUG)Serial // If DEBUG is set to true then all SERIAL_DEBUG statements will work #if DUEMILANOVE #if DEBUG //If debugging on Duemilanove set GPS to 3,2 and use SoftwareSerial #include <SoftwareSerial.h> #define RX_GPS_PIN 3 #define TX_GPS_PIN 2 SoftwareSerial SERIAL_GPS(3,2); #else //If not debugging on Duemilanove put GPS pins on 0,1 #define RX_GPS_PIN 0 #define TX_GPS_PIN 1 #define SERIAL_GPS Serial #endif #else // If using Mega 2560 set GPS pins to Serial1 #define RX_GPS_PIN 19 #define TX_GPS_PIN 20 #define SERIAL_GPS Serial1 #endif
Dit is de logica voor de Debug-voorwaarde. Je meestal niet hoeft te raken van dit, maar zoals je zien kunt als we bent foutopsporing op de interne seriële Arduino moet u de SoftwareSerial bibliotheek gebruiken voor de GPS, die eigenlijk de resolutie van uw gegevens aanzienlijk vertraagt.
// Initialize GPS and Debugging // iTeadStudio GPS Shield set at 38400 bps @ 1 Hz by default (on my unit) // GPS Shield uses NEO-6M GPS Module which can be configured by downloading uBlox uCenter on computer. // Go to uBlox uCenter > Edit > Messages > NMEA > PUBX to change Baud Rate and get Hex. // Go to uBlox uCenter > Edit > Messages > UBX > CFG > Rate to change Measurement Period and get Hex. // Best results at 38400 bps @ 5 Hz on Arduino Hardware Serial. // If using SoftwareSerial MUST set GPS Module to 4800 bps @ 1 Hz. void setSerial() { char baudRate[] = {0x24, 0x50, 0x55, 0x42, 0x58, 0x2C, 0x34, 0x31, 0x2C, 0x31, 0x2C, 0x30, 0x30, 0x30, 0x37, 0x2C, 0x30, 0x30, 0x30, 0x33, 0x2C, 0x34, 0x38, 0x30, 0x30, 0x2C, 0x30, 0x2A, 0x31, 0x33, 0x0D, 0x0A}; // Hex to change to 4800 bps char fiveHz[] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0xC8, 0x00, 0x01, 0x00, 0x01, 0x00, 0xDE, 0x6A}; //Hex to change to 5Hz char tenHz[] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0x64, 0x00, 0x01, 0x00, 0x01, 0x00, 0x7A, 0x12}; // Hex to change to 10Hz #if DUEMILANOVE #if DEBUG SERIAL_DEBUG.begin(115200); SERIAL_GPS.begin(38400); delay(1000); SERIAL_GPS.write(baudRate,sizeof(baudRate)); SERIAL_GPS.begin(4800); // Set SoftwareSerial to 4800 #else SERIAL_GPS.begin(38400); delay(5000); SERIAL_GPS.write(tenHz,sizeof(tenHz)); SERIAL_GPS.flush(); #endif #else SERIAL_DEBUG.begin(115200); SERIAL_GPS.begin(38400); delay(5000); SERIAL_GPS.write(tenHz,sizeof(tenHz)); SERIAL_GPS.flush(); #endif }
Dit wordt de periode van de baudrate en waardering voor de GPS. Hoe sneller hoe beter voor ons. De NEO - 6M ondersteunt een meetperiode maximaal 5Hz, maar ik heb in geslaagd om 10Hz en het werkt, maar ik denk dat het zou worden interpoleren van de gegevens. Ik heb niet de data sheet grondig over dit al gelezen. Anyway, 10Hz vertaalt één monster om de 0,1 seconden. Dit is eigenlijk niet dat goed als het gaat om te racen, maar de snelste GPS-eenheden kunt u de plank ik denk dat zijn 20Hz. Dus hoe dan ook, zult u moeten doen sommige interpoleren aangezien de Arduino van een stuk sneller dan dat genieten kunt. Ik heb niet in deze code, maar het zal wel een goede toevoegen op voor u!
Als u van plan over het gebruik van debug-modus op één seriële poort Arduino (Duemilanove, Uno, Pro Mini, Nano, enz.), zult u merken dat u moet de baudrate instellen met 4800 bps en de periode van de meting tot 1 Hz. moraal van het verhaal? Een Mega gebruiken voor het ontwikkelen van.
Je kan de vraag, waar de hel heb je die Hex-codes? Goede vraag. Veel googlen leidde me naar de uBlox center programma, Documentatie, en leren hoe om te praten met het.
Alles, ik commentaar zo veel als ik kon dus hopelijk zijn zelf verklarend.