Smart hölster: Hall Sensor och GPS sensor för geo plats (5 / 9 steg)
Steg 5: Redo koden
Nedan är en snipet för den kod som används. Observera att det också finns en LED och knappen som används i koden tillsammans med integration med FireBase.
Fullständiga koden för GPS, Hall sensor och lysdioder dess på 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 < sträng >
med hjälp av namnområdet upm; genom att använda namespace std;
CONST size_t bufferLength = 256;
definiera nod "localhost"
#define SERVICE "41234"
#define COMP_NAME "temperatur"
int main () {
Skapa den Grove LED objekt med GPIO stift 4
UPM::GroveLed * ledRed = ny upm::GroveLed(4);
UPM::GroveLed * ledGreen = ny upm::GroveLed(3);
skapa en analog ingång objekt från MRAA med hjälp av pin A0
mraa::AIO * a_pin = ny mraa::Aio(0);
Skapa den knappobjekt med GPIO stift 8
UPM::GroveButton-knappen = nya upm::GroveButton(8);
Instansiera en Ublox6 GPS-enhet på uart 0.
UPM::Ublox6 * nmea = nya upm::Ublox6(0);
int gunDrawn = 100;
int magFieldAvg = 0;
int magFieldCurrent = 0;
int magField [10].
int tempIndex = 0;
int numSamples = 2;
sträng tempData;
Kontrollera att vi kör på Galileo eller Edison
mraa_platform_t plattform = mraa_get_platform_type();
om ((plattform! = MRAA_INTEL_GALILEO_GEN1) & & (plattform! = MRAA_INTEL_GALILEO_GEN2) & & (plattform! = MRAA_INTEL_EDISON_FAB_C))
{std::cerr << "Plattform som inte stöds, spännande" << std::endl;
återvända MRAA_ERROR_INVALID_PLATFORM; }
Läs i hall sensordata
om (a_pin == NULL)
{std::cerr << "Kan inte skapa mraa::Aio objekt, spännande" << std::endl;
återvända MRAA_ERROR_UNSPECIFIED; }
GPS Setup
Kontrollera att porten initieras ordentligt. 9600 baud är standard.
om (! nmea -> setupTty(B9600))
{cerr << "Misslyckades med att inställningsparametrar tty port" << oä;
tillbaka 1. }
Curl setup
följde denna curl exempel: http://curl.haxx.se/libcurl/c/http-post.html
CURL * curl;
CURLcode res;
I windows, kommer detta att init winsock grejer
curl_global_init(CURL_GLOBAL_ALL);
få en curl handtag
curl = curl_easy_init();
Ange den URL som är på väg att få vår POST. Denna URL kan
lika bra vara en http://curl.haxx.se/libcurl/c/http-post.html om det är vad bör få den
data.
curl_easy_setopt (curl, CURLOPT_URL, "https://flickering-inferno-5440.firebaseio.com/data.json");
Detta är endast avsett att samla in NMEA data och inte behandla det
bör se ut på konsol
char nmeaBuffer [bufferLength];
While(1)
{uint16_t pin_value = a_pin -> read();
magFieldAvg = 0;
magField [magFieldCurrent ++] = pin_value;
om (magFieldCurrent > = numSamples)
{magFieldCurrent = 0;}
för (int jag = 0; jag < numSamples; i ++
{magFieldAvg += magField [i];}
magFieldAvg = numSamples;
Sleep(1);
IF(magFieldAvg < gunDrawn)
{ledRed -> off();
ledGreen -> on (); }
annat {
om (nmea -> dataAvailable()) {
int rv = nmea -> readData (nmeaBuffer, bufferLength);
om (rv > 0) {
skriva (1, nmeaBuffer, rv);
std::Cout << nmeaBuffer << std::endl; }
annat {
några läst slags fel uppstod
cerr << "Port läsa fel" << oä;
bryta;
}
curl_easy_setopt (curl, CURLOPT_POSTFIELDS, "{\"gunDrawn\":\"true\ "}");
Utföra begäran, res får returkod
Res = curl_easy_perform(curl);
Sök efter fel
om (res! = CURLE_OK)
fprintf (stderr, "curl_easy_perform() misslyckades: %s\n", curl_easy_strerror(res));
}
Lägg till några lysdioder
ledRed -> on ();
ledGreen -> off(); }
om (knapp -> value() == 1)
{bryta;}
}
Ta bort objektet Grove LED
ledGreen -> off();
ledRed -> off();
ta bort ledGreen;
ta bort ledRed;
ta bort a_pin;
ta bort knappen;
ta bort nmea;
återvända MRAA_SUCCESS; }