rwaldron / johnny-five

JavaScript Robotics and IoT programming framework, developed at Bocoup.
http://johnny-five.io
Other
13.3k stars 1.77k forks source link

INPUT_PULLUP on digital input pin #1831

Open dsanso opened 1 year ago

dsanso commented 1 year ago

Hello,

I see all over the place to use pinMode(pinNumber, INPUT_PULLUP);

How do I activate INPUT_PULLUP with johnny-five?

I have an digital input that requires a resistor and arduinos usually contain built-in pull-up resistors.

Thank you.

dtex commented 1 year ago

Setting pin mode is something you would handle with the IO, so it's not a Johnny-Five thing really, but you can access the IO through the Johnny-Five Board instance:

import { board } from "johnny-five";

const board = new five.Board();

board.on("ready", function() {
  board.io.pinmode(3, board.io.MODES.PULLUP);
});

You say that you see that example all over the place. Can you point me to that? I've seen a few people ask questions like this, and I'm curious where it's all coming from.

dsanso commented 1 year ago

I tried your code, it does not seem to work.

I believe a lot of programmers use INPUT_PULLUP instead of regular INPUT mode, as to avoid the noise in having something similar to a floating pin.

Some examples:

dsanso commented 1 year ago

To clarify, I am not using it for a button. I am using it and almost all other digital pins to read from an external source.

dtex commented 1 year ago

Can you share your code?

dsanso commented 1 year ago

Can you share your code?

const five = require("johnny-five");

const board = new five.Board();

board.on("ready", function () {
  board.io.pinMode(31, board.io.MODES.PULLUP);

  const sensor = new five.Sensor.Digital({
    pin: 31,
  });

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

The thing is the wire connecting to that pin will sometimes have to be "loose" making it a floating pin. And I need the resistor to "filter out" all the noise.

dtex commented 1 year ago

I can't test (I'm at work), but I suspect initializing a sensor on that pin will reset it to a normal input. Have you tried setting the pin mode after instantiating the sensor?

dsanso commented 1 year ago

It doesn't seem to work even with just using pinInput.read()

ScreamZ commented 1 year ago

In my experience, I've been able to proceed using the Button library https://github.com/rwaldron/johnny-five/blob/main/docs/button-pullup.md

isPullup: true This has been working for some time on my codebase. I've been able to test it 2 days ago and it was working but when i switched back to the code related to this part, it now glitch

 button.on("up", function() {
    led.off();
  });

triggers constantly, so this is not fixed. The doc seems to write that yes, but when you read at the code, all it it doing is sending a write command to LOW on that pin…

tbaltrushaitis commented 1 year ago

I should mention that I had some problems that looks like similar to this one in the topic. But finally we're figured out that root cause of the problem was in failed arduino pin. I've rechecked this a couple of times and problem with pin is now confirmed

tbaltrushaitis commented 1 year ago

I suggest in case of any troubles to check all of the modes of a button: isPullup, isPulldown and invert and play with every of those modes to be sure.

ScreamZ commented 1 year ago

I should mention that I had some problems that looks like similar to this one in the topic. But finally we're figured out that root cause of the problem was in failed arduino pin. I've rechecked this a couple of times and problem with pin is now confirmed U mean your arduino is damaged ?

I suggest in case of any troubles to check all of the modes of a button: isPullup, isPulldown and invert and play with every of those modes to be sure.

What is is supposed to change ? Its only server code and if its related to the pin physically I'm not sure things will

tbaltrushaitis commented 1 year ago

U mean your arduino is damaged ?

Yes

What is is supposed to change ? Its only server code and if its related to the pin physically I'm not sure things will

What you mean in "server code"?