Skip to content

Johnny Five, receiving input from the device

This post is part of the Johnny Five series. See the first post here.

In this post I want to get information from an electronic device using Johnny Five.

In particular, I want to use a water level sensor. This will tell me if I got enough coffee or if I’m running out of it, and I need to re-fill the cup in order to be a working programmer.

This is the sensor:

We’re going to wire a little circuit to get this data, and we’re going to use Johnny Five to get this data into our Node.js app.

The sensor has 3 pins. One is GND (0V), one is VCC (5V) and the other is the analog data output.

Add the pin marked as - to GND, + to 5V, and connect S to the analog pin A0.

Here’s the circuit:

Now let’s create a sensor.js file with this content:

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)
  })
})

Whenever the data coming in through the sensor changes, we’ll see it being printed to the console:

I used the on() method on the sensor object to watch all changes.

All the methods are detailed here, but I’m in particular interested in the within() method, that lets me define a callback that’s fired when the value is in a particular range:

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!!")
  })
})

If I start running out of coffee, the program will print “Refill your coffee!!” a lot of times, because the value keeps changing while the sensor gets drier.

So, let’s create an outOfCoffee variable we can use to debounce the data gathering.

We also declare that under 70 we are out of coffee, and above 150 we have enough:

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!!")
    }
  })
})

That’s it, now if I try moving the sensor in/out the cup of coffee, I get some more useful warnings:


→ Get my JavaScript Beginner's Handbook

download all my books for free

  • javascript handbook
  • typescript handbook
  • css handbook
  • node.js handbook
  • astro handbook
  • html handbook
  • next.js pages router handbook
  • alpine.js handbook
  • htmx handbook
  • react handbook
  • sql handbook
  • git cheat sheet
  • laravel handbook
  • express handbook
  • swift handbook
  • go handbook
  • php handbook
  • python handbook
  • cli handbook
  • c handbook

subscribe to my newsletter to get them

Terms: by subscribing to the newsletter you agree the following terms and conditions and privacy policy. The aim of the newsletter is to keep you up to date about new tutorials, new book releases or courses organized by Flavio. If you wish to unsubscribe from the newsletter, you can click the unsubscribe link that's present at the bottom of each email, anytime. I will not communicate/spread/publish or otherwise give away your address. Your email address is the only personal information collected, and it's only collected for the primary purpose of keeping you informed through the newsletter. It's stored in a secure server based in the EU. You can contact Flavio by emailing [email protected]. These terms and conditions are governed by the laws in force in Italy and you unconditionally submit to the jurisdiction of the courts of Italy.

Related posts about js: