Kicsit elszakadnék a PHP-től és most áttérnék a node.js használatára. Azt gondolnánk hogy a node.js egy szerveroldali JavaScript. Ami annyira igaz, hogy akár az is lehet. De akár futhat kliens oldalon, vagy akár konzolból, de irányíthatunk vele más hardware eszközöket is. Ez utóbbiba fogunk egy kicsit belemélyedni. Első körben arduinoval és ahhoz kapcsolódó két gombbal fogom egy led fényerejét szabályozni.

Mi is fog kelleni nekünk ehhez?

Ha sikerült beszerezni az eszközöket és feltelepíteni a szoftvereket, akkor vágjunk bele.

Először is fel kell programoznunk az arduinonkat. Ehhez szükség lesz az arduino IDE-re, mert fel kell tölteni a kommunikációhoz szükséges alapprogramot. Ezt az arduino IDE menü File/Examples/Firmata/StandardFirmata alatt találjuk. Ezt csak simán fel kell tölteni az arduinora, amit összekötünk az USB-n keresztül a számítógépünkkel. Itt megemlítem hogy a tools/Port alatt ki kell választani az eszközt hogy használhassuk. Miután feltöltöttük az alap programot, már csak a megfelelő áramkör kialakítása van hátra:

Led szab. 2gombbal

Mint látható, van 2 gombunk melyek egy ellenálláson keresztül nyitják/zárják az 5V-os áramkört. Nem zárják rövidre, hiszen a 10KOhmos ellenálláson nem fog túl nagy áram átfolyni, viszont megjelenik az ellenállás és a gomb között az 5V-os feszültség, amit a 2 és 3-as lábakon tudunk érzékelni. A 11-as (analog) lábon pedig vezéreljük a ledet, amit egy 220Ohmos ellenállással kötünk sorba, mert nem szeretnénk, ha elégne, illetve túlterhelnénk az arduinonkat. Sok esetben látható más rajzokon hogy ellenállás nélkül kötik be a LED-et, ennek talán az lehet az oka, hogy azon a lábon nem is tud 20mA-nél több áram “kibújni”.  Viszont az az ellenállás semmiképp sem árt, és nem vág földhöz anyagilag sem.

Ezzel kész is vagyunk a hw kialakításával, most jöjjön a node.js-el a programozás. Hozzunk létre egy könyvtárat és lépjünk bele egy konzolból/ban. Majd adjuk ki a következő parancsokat:

[sourcecode language=”bash”]
npm init # most elég ha végigenterezzük…
npm install johnny-five –save
[/sourcecode]

Mit kell látnunk? Létrejött egy package.json file és egy node_modules könyvtár azon belül a johnny-five modulunkkal. Most már szerkeszthetjük is a node programunkat. Hozzunk létre egy index.js filet és írjuk bele a következőt:

[sourcecode language=”javascript”]
var five = require("johnny-five"),
board, button;

board = new five.Board();

board.on("ready", function() {

// Create a new `button` hardware instance.
// This example allows the button module to
// create a completely default instance
button1 = new five.Button({
board: board,
pin: 2,
holdtime: 500,
invert: false // Default: "false". Set to "true" if button is Active-Low
});
button2 = new five.Button({
board: board,
pin: 3,
holdtime: 500,
invert: false // Default: "false". Set to "true" if button is Active-Low
});

var led = new five.Led(11);
var brightness = 0; //start brightness

// Inject the `button` hardware into
// the Repl instance’s context;
// allows direct command line access
board.repl.inject({
button1: button1,
button2: button2,
});

// Button Event API

// "hold" the button is pressed for specified time.
// defaults to 500ms (1/2 second)
// set
button1.on("hold", function() {
brightness = brightness+10
if (brightness>255) brightness = 255;
led.brightness(brightness);
console.log(brightness);
});
button2.on("hold", function() {
brightness = brightness-10
if (brightness<0) brightness = 0;
led.brightness(brightness);
console.log(brightness);
});

});
[/sourcecode]

Mentsük el és indítsuk el:
[sourcecode language=”bash”]
node index.js
[/sourcecode]

Mint látható az egyik gombbal felfelé, a másikkal lefelé szabályozzuk a LED fényerejét. Sajnos én azt tapasztaltam hogy 100 felett már nem olyan dinamikusan növekszik a fényerő. A gombok lenyomásakor még nem történik semmi, csak ha fél másodpercig nyomva tartjuk. A gombnyomásra történő azonali működést már mindenkinek magának kell megvalósítani.

A project megtalálható a githubon is:
https://github.com/nova76/ArduinoTwoButtonLEDBrightness