Stap 5: De code klaar
Hieronder is een snipet voor de code die wordt gebruikt. Let op: er is ook een LED en de knop wordt gebruikt in de code samen met de integratie met FireBase.
Volledige code voor de GPS, Hallsensor en LEDs zijn op https://github.com/tsmilesagain/safety_holster
#include "mraa.hpp"
#include "UdpClient.hpp"
#include < grove.h >
#include < signal.h >
#include < ublox6.h >
#include < a110x.h >
#include < stdio.h >
#include < curl/curl.h >
#include < iostream >
#include < sstream >
#include < tekenreeks >
met behulp van naamruimte upm; met behulp van namespace std;
Const size_t bufferLength = 256;
definiëren van knooppunt "localhost"
#define SERVICE "41234"
#define COMP_NAME "temperatuur"
int main() {}
De Grove LED object maken met GPIO pin 4
UPM::GroveLed * ledRed = nieuwe upm::GroveLed(4);
UPM::GroveLed * ledGreen = nieuwe upm::GroveLed(3);
een analoge input-object maken vanuit de MRAA met behulp van pin A0
mraa::AIO * a_pin = nieuwe mraa::Aio(0);
De knopobject maken met GPIO pin 8
UPM::GroveButton-knop = nieuwe upm::GroveButton(8);
Instantiëren van een Ublox6 GPS-apparaat op uart 0.
UPM::Ublox6 * nmea = nieuwe upm::Ublox6(0);
int gunDrawn = 100;
int magFieldAvg = 0;
int magFieldCurrent = 0;
int magField [10];
int tempIndex = 0;
int numSamples = 2;
string tempData;
Controleer of we op Galileo of Edison lopen
mraa_platform_t platform = mraa_get_platform_type();
Als ((platform! = MRAA_INTEL_GALILEO_GEN1) & & (platform! = MRAA_INTEL_GALILEO_GEN2) & & (platform! = MRAA_INTEL_EDISON_FAB_C))
{std::cerr << "Niet-ondersteund platform, verlaten" << std::endl;
Return MRAA_ERROR_INVALID_PLATFORM; }
Lees in hall sensorgegevens
Als (a_pin == NULL)
{std::cerr << "Kan geen mraa::Aio object, verlaten maken" << std::endl;
Return MRAA_ERROR_UNSPECIFIED; }
GPS-Setup
Zorg ervoor dat poort correct is geïnitialiseerd. 9600 baud is de standaardinstelling.
Als (! nmea -> setupTty(B9600))
{cerr << 'Failed to instellingsparameters tty poort' << endl;
return 1; }
Curl setup
volgde dit voorbeeld krul: http://curl.haxx.se/libcurl/c/http-post.html
CURL * krullen;
CURLcode res;
In windows zal dit init de winsock-spullen
curl_global_init(CURL_GLOBAL_ALL);
krijgen van een curl handle
curl = curl_easy_init();
Stel eerst de URL die is bezig met het ontvangen van onze POST. Deze URL kan
een http://curl.haxx.se/libcurl/c/http-post.html net zo goed worden als thats wat verdient het
gegevens.
curl_easy_setopt (krul, CURLOPT_URL, "https://flickering-inferno-5440.firebaseio.com/data.json");
Dit is alleen bedoeld voor NMEA-gegevens verzamelen en niet verwerkt
should see output zien op console
char nmeaBuffer [bufferLength];
while(1)
{uint16_t pin_value = a_pin -> read();
magFieldAvg = 0;
magField [magFieldCurrent ++] = pin_value;
Als (magFieldCurrent > = numSamples)
{magFieldCurrent = 0;}
for (int i = 0; ik < numSamples; i ++
{magFieldAvg += magField [i];}
magFieldAvg / = numSamples;
Sleep(1) daarvoor;
if(magFieldAvg < gunDrawn)
{ledRed -> off();
ledGreen -> on(); }
else {}
Als (nmea -> {dataAvailable())}
int rv = nmea -> readData (nmeaBuffer, bufferLength);
Als (rv > 0) {}
schrijven (1, nmeaBuffer, rv);
Std::Cout << nmeaBuffer << std::endl; }
else {}
enkele luiden soort vergissing voorvallen
cerr << "Poort Lees fout." << endl;
breken;
}
curl_easy_setopt (krul, CURLOPT_POSTFIELDS, "{\"gunDrawn\":\"true\ "}");
Uitvoeren van het verzoek, res krijgt de retourcode
res = curl_easy_perform(curl);
Controleren op fouten
Als (res! = CURLE_OK)
fprintf (stderr, "curl_easy_perform() is mislukt: %s\n", curl_easy_strerror(res));
}
Sommige LED's toevoegen
ledRed -> on();
ledGreen -> off(); }
Als (knop -> value() == 1)
{breken;}
}
De Grove LED-object verwijderen
ledGreen -> off();
ledRed -> off();
verwijderen van ledGreen;
verwijderen van ledRed;
verwijderen van a_pin;
verwijderen, knop;
verwijderen van nmea;
Return MRAA_SUCCESS; }