Stap 7: Beschrijving van de code
Variabelen declareren:
Allereerst is het inbegrepen de bibliotheek op de manier die is beschreven voor. Dientengevolge is de volgende regel in de code opnemen.
#include "sensorflare/sensorflare.h"
Voor elke pin dat we verklaren willen als een PWM-uitgang en afstandsbediening via Sensorflare zal worden verwezen een "PWMout"-object en de specifieke pin verbonden. In het voorbeeld dat is aangesloten ontvangen een led op A0, dan het object aangeroepen pwm als parameter A0. De lichtsterkte wordt gecontroleerd op afstand door een generatie van een PWM-signaal met taakcyclus tussen 0 en 255.
SensorFlare::PWMOut pwm(A0);
Nu is het noodzakelijk om een object voor elke variabele declareren welke waarde die wij willen kunnen toegang via Sensorflare-platform. De variabelen kunnen worden gepubliceerd op de Spark Core wolk als privé (alleen u kundig voor toegang tot hun waarden zitten zal) of publiek (elk gebruiker van Spark toegang tot hun waarden uit de wolk). Klik vervolgens wordt in het voorbeeld verklaard 2 object varTem en varPin die zal verwijzen naar 2 variabelen die respectievelijk als openbare op vonk en toegang van uw account van de Sensorflare door de temperatuur van de namen en de pir zal worden gepubliceerd. Een andere varLight van één object dat verwijst naar een particuliere variabele op de wolk vonk en zal toegang vanuit uw Sensorflare account door het licht van de naam.
//Both methods initialized the variable that will be published as PUBLIC <br>SensorFlare::VarPublish varTem("temperature"); SensorFlare::VarPublish varPir("pir","PUBLIC"); //Initialized the variable that will be published as PRIVATE SensorFlare::VarPublish varLight("light","PRIVATE");
Moeten worden verklaard de variabelen, die later zal worden gepubliceerd.
float temperature; float light; int status;
Tot slot moet worden declareren alle andere die wilde in het programma worden gebruikt.
int tem_pin=A3; int light_pin=A4; int pir_pin=D0; int new_status; bool change;
Setup:
De setup-functie een alleen wordt uitgevoerd en wordt meestal gebruikt voor het initialiseren van de variabelen, pin modi en functies. Het is noodzakelijk om de methode "begin()" van elk object dat is gedefinieerd voor te roepen.
pwm.begin(); varTem.begin(temperature); varLight.begin(light); varPir.begin(status);
Extra pin dat niet zal afstandsbediening en zullen de digitale invoer Pin voor de PIR-sensor.
pinMode(pir_pin,INPUT);
Loop
De functie loop lus opeenvolgend, waardoor uw programma te wijzigen en te reageren.
De opgenomen analoge sensor (temperatuur en foto resistor) biedt, in hun respectieve analoge ingangen van een kern, een spanning tussen 0 tot 3,3 v die in verhouding staan tot de variatie van de temperatuur en licht in de omgeving. De kern gebruikt een analoog digitaal conversie 12 bits die een signaal van 0 tot en met 3, 3V in waarden van 0 tot en met 4095 kaart wanneer de "analodRead()"-functie wordt aangeroepen. Eerst en vooral, het moet worden berekend van de spanning die correspondeert met de waarde lezen.
De specifieke LM335 temperatuursensor geeft een spanning evenredig met de temperatuur in Kelvin met een gevoeligheid van 10mV/K. Dan is de temperatuur in Kelvin zal worden bereikt door de spanning te converteren naar de eenheden van de mV en verdeeld tussen de gevoeligheid. Aftrekken voor definitieve uitdrukking van de temperatuur in de verwachte eenheid (° C), die de conversie van Kelvin is gemaakt door de 273.15 (de bijbehorende 0 in graden Kelvin).
De helderheid, de intensiteit van het licht, kan worden berekend aan de hand van de betrekkingen van de sensor die is verstrekt in het vóór de sectie van de handleiding. Ten eerste is de foto-weerstand waarde in KΩ, waarna de gelijkwaardige helderheid in Lux.
// Temperature sensor float tem= analogRead(tem_pin); // read the value from the sensor // The returned value from the Core is going to be in the range from 0 to 4095 // Calculate the voltage from the sensor reading float voltage = (tem * 3.3) / 4095; float deg =voltage* 100; // multiply by 100 to get degrees in K temperature = deg - 273.15; // subtract absolute zero to get degrees Celsius //Luminosity float photocell= analogRead(light_pin); // read the value from the sensor // The returned value from the Core is going to be in the range from 0 to 4095 // Calculate the voltage from the sensor reading float Vphotocell = ((photocell * 3.3) / 4095); float rl=(Vphotocell*10)/(3.3-Vphotocell);//Photoresistor value in KΩ float value=500/rl;//luminosity light= (int) value;
De PIR verstrekt een digitaal signaal (1 wanneer wordt gedetecteerd dat een verhuizing en 0 als er geen bewegende presenteren) die wordt gelezen door de bijbehorende digitale ingang van de kern. De interessante gebeurtenis in dit geval is wanneer de sensor een beweging detecteert, vertegenwoordigen door een overgang van 0 naar 1 (de variabele status zal veranderen hun waarde 1) in de respectieve input wanneer start onderweg en een overgang van 1 naar 0 wanneer stop (de variabele status zullen 0). Vervolgens zal een evenement worden gepubliceerd elke keer dat een overgang in de specifieke pin is gebeurd. De code detecteert de PIR-overgang en publiceren elke keer dat dat gebeurde. Want dit is gebruikt de methode "Publish(Variable,period)" waarin de variabele te publiceren is de status en het is publiceren onmiddellijk wanneer de methode is opgeroepen door Selecteer een periode voor 0.
//Find the change of state of the PIR sensor. Recognize move new_status=digitalRead(pir_pin); if (status!=new_status){ status=new_status; change=TRUE; } //Publish every time that exist a change in the pin on which is connect the PIR output if (change==TRUE) { varPir.Publish(status,0);//Publish the variable at the called method time change=FALSE; }
De temperatuur en helderheid moeten worden gepubliceerd periodiek - in dit geval elke 15 seconden is genoeg. De "Publish(Variable,period)"-methode wordt aangeroepen voor elk object waarmee elke variabele die willen worden gepubliceerd door gekoppelde de respectieve variabele te publiceren en een periode van 15 seconden.
varTem.Publish(temperature,15); varLight.Publish(light,15);