本文是 Johnny Five 系列的一部分。 請參閱第一篇文章

在本文中,我將使用 Johnny Five 從電子設備獲取信息。

具體而言,我想使用水位傳感器來判斷咖啡的剩餘量,以便在程序設計師的工作中,當咖啡不足時能重新加滿杯子。

這是傳感器的圖片:

我們將連接一個小電路以獲取此數據,並使用 Johnny Five 將此數據傳送到我們的 Node.js 應用程序中。

該傳感器有 3 根引腳。一個是 GND(0V),一個是 VCC(5V),另一個是類比數據輸出。

將標記為 - 的引腳連接到 GND,+ 連接到 5V,並將 S 連接到類比引腳 A0

這是電路圖:

現在,我們創建一個名為 sensor.js 的文件,內容如下:

const { Board, Sensor } = require("johnny-five")
const board = new Board()

board.on("ready", () => {
 const sensor = new Sensor("A0")

 sensor.on("change", function () {
 console.log(this.value)
 })
})

每當通過傳感器傳來的數據變化時,我們將在控制台上看到打印出來:

我在 sensor 對象上使用了 on() 方法來監視所有更改。

這裡詳細介紹了所有方法,但我對 within() 方法特別感興趣,它允許我定義一個在特定範圍內的值變化時觸發的回調函數:

const { Board, Sensor } = require("johnny-five")
const board = new Board()

board.on("ready", () => {
 const sensor = new Sensor("A0")

 sensor.within([0, 70], function () {
 console.log("Refill your coffee!!")
 })
})

如果咖啡剩餘量快不夠時,該程序將多次打印“Refill your coffee!!”,因為傳感器變得更干燥,數據不斷變化。

因此,我們創建了一個 outOfCoffee 變量,用於防彈數據收集。

我們還宣布,在 70 以下表示咖啡不足,而在 150 以上表示咖啡充足:

const { Board, Sensor } = require("johnny-five")
const board = new Board()

board.on("ready", () => {
 const sensor = new Sensor("A0")
 let outOfCoffee = false

 sensor.within([0, 70], () => {
 if (!outOfCoffee) {
 outOfCoffee = true
 console.log("Refill your coffee!!")
 }
 })

 sensor.within([150, 500], () => {
 if (outOfCoffee) {
 outOfCoffee = false
 console.log("Ok, you can go on programming!!")
 }
 })
})

完成了,現在如果我試圖將傳感器放入或取出咖啡杯中,我會得到一些更有用的警告: