Stap 3: codering
Intel heeft een zeer goede set van hardware, software en tools aan code IoT projecten ontwikkeld. De Intel XDK IoT editie is een IDE gemaakt om IoT projecten met Intel Edison vergemakkelijken, en met behulp van Node.js. Ook publiceerde Intel twee bibliotheken voor hun boards MRAA en UPM genoemd. MRAA is bedoeld als de low-level API voor Hardware communicatie met de sensoren. UPM is de high-level API en het is gebaseerd op de meeste Grove sensoren.
De code is zeer eenvoudig en gebeurt er het volgende:
- Wacht 2 minuten om te verwarmen van de sensor van de Alcohol (het Seeed Studio Wiki pagina zegt dat het beste Verwarm tijd voor de sensor 48 uur is!)
- RunAlcoholSensor() functie uitvoert elke tweede waar:
- Luistert naar de Touch sensor op
- Als iemand de sensor raakt, begint het verzamelen van 100 monsters van de Alcohol-sensor
- Vervolgens de code de gemiddelde waarde van de monsters neemt
- Als de waarde is tussen 200 en 500 (ik ben nog steeds bezig om te begrijpen waarom heb ik dat), dan draait het op de estafette.
De code staat hieronder:
<p>/*jslint node:true, vars:true, bitwise:true, unparam:true */<br>/*jshint unused:true */ // Leave the above lines for propper jshinting</p><p>// Load sensor modules var mq303a = require('jsupm_mq303a'); var lcd = require('jsupm_i2clcd'); var sensorModule = require('jsupm_ttp223'); var groveSensor = require('jsupm_grove');</p><p>// Instantiate an mq303a sensor on analog pin A0 // This device uses a heater powered from an analog I/O pin. // If using A0 as the data pin, then you need to use A1, as the heater // pin (if using a grove mq303a). For A1, we can use the D15 gpio, // setup as an output, and drive it low to power the heater. var myAlcoholObj = new mq303a.MQ303A(0, 15); var display = new lcd.Jhd1313m1(0, 0x3E, 0x62); var touch = new sensorModule.TTP223(3); var relay = new groveSensor.GroveRelay(2);</p><p>console.log("Enabling heater and waiting 2 minutes for warmup.");</p><p>// give time updates every 30 seconds until 2 minutes have passed // for the alcohol sensor to warm up statusMessage(1); statusMessage(2); statusMessage(3);</p><p>function statusMessage(amt) { setTimeout(function() { console.log((amt * 30) + " seconds have passed"); }, 30000 * amt); }</p><p>// run the alcohol sensor in 2 minutes setTimeout(runAlcoholSensor, 120000);</p><p>function runAlcoholSensor() { var notice = "This sensor may need to warm until the value drops below about 450." console.log(notice);</p><p> // Print the detected alcohol value every second setInterval(function() { if(touch.isPressed()) { var val = 0; for(i=0;i<100;i++) { val += myAlcoholObj.value(); } val = val / 100; var sensor_volt = val / 1024 * 5.0; var RS_air = sensor_volt / (5.0 - sensor_volt); var msg = "Alcohol: "; console.log(msg + val) + "sensor_volt = " + sensor_volt; display.setCursor(0,0); display.write(msg + val); if(val > 200 && val < 500) { relay.on(); } } else { relay.off(); } }, 1000); }</p><p>// Print message when exiting process.on('SIGINT', function() { console.log("Exiting..."); process.exit(0); });</p>