Stap 2: Schrijf de Code!
Programmeren met de XDK verschilt een beetje van programmeren met Arduino. Arduino is in C, terwijl de XDK met JavaScript is. Enige ervaring met programmeren is noodzakelijk om te begrijpen wat er gaande is hier, hoewel geen is nodig om dit te laten werken. Persoonlijk heb ik ervaring in vele talen, dus alles wat ik in het algemeen moet een nieuwe pick-up is de sleutelwoorden. Ik probeerde het documenteren van wat ik voelde was nodig/nuttig, maar als je iets uitgelegd enkel nodig het mij vraagt!
/*jslint node:true,vars:true,bitwise:true,unparam:true */ /*jshint unused:true */ // Those above are required by javascript. var mraa = require("mraa"); // A new object of class "mraa" //Grove Temperature module, plugged into Analog pin 0 var temperature = new mraa.Aio(0); var B = 3975; var button = new mraa.Gpio(5); var buttonState = 0; var clearString = " "; // Will be called when we want to clear a line on the LCD var Screen = require('jsupm_i2clcd'); // A new object of class "jsupm_i2clcd" (lcd class) var Lcd = new Screen.Jhd1313m1 (0, 0x3E, 0x62); //Initialize Jhd1313m1 at 0x62 (RGB_ADDRESS) and 0x3E (LCD_ADDRESS) // These are the 2 methods of Lcd. setCursor(row,column) and write(string) Lcd.setCursor(0,0); Lcd.write("Temperature:"); // start the functions checkButton(); tempDisplay(); function tempDisplay() { // If the button is not being pressed, display the temperature... if(buttonState == 0) { var fahrenheit_temperature = getTemp(); // ask for the temperature Lcd.setCursor(1,0); Lcd.write(clearString); // clear the "HOLD" string, in case it was there Lcd.setCursor(1,0); Lcd.write("F: " + parseInt(fahrenheit_temperature*100,10)/100); // This shows the temperature to 2 decimal places } setTimeout(tempDisplay,1000); // ... every second } function getTemp() { var a = temperature.read(); var resistance = (1023 - a) * 10000 / a; // get the resistance of the sensor; var celsius_temperature = 1 / (Math.log(resistance / 10000) / B + 1 / 298.15) - 273.15; // convert to temperature, based on Grove's datasheet var fahrenheit_temperature = (celsius_temperature * (9 / 5)) + 32; // convert to fahrenheit return fahrenheit_temperature; // return the temperature } function checkButton() { buttonState = button.read(); // Let the user know the temperature display is being HELD if(buttonState == 1) { Lcd.setCursor(1,10); Lcd.write("HOLD"); } setTimeout(checkButton,10); // call this function every 10 milliseconds }
Ik schreef een paar andere Instructables met deze Temperatuurdisplay als de voorbeeld-setup. In hen had ik de knop activeren de achtergrondverlichting voor een paar seconden. Dit is iets anders, want ik heb de knop "bedrijf" de huidige temperatuur. Ik weet niet, en kan niet vinden alle verwijzingen op hoe, in-/ uitschakelen of wijzigen van de kleur van de RGB-achtergrondverlichting.