digitalRead not working correctly

Hey guys,

After a few months not using arduino I decided to give it a try again, but it seems to be bugged now.

the digital read appears to be random. it changes from high to low whenever it contects with a wire, which is not connected to an energy source. I debugged it with a serialconnection and it indeed showed a random stream of 0 and 1's while only plain wire was connected. I have used different digital inputs but the bug remained.

Anyone knows what might be wrong?

Thanks in advance,


Before a digital input pin can be read reliably it must have either it's internal pull-up enabled, or an external pull up or pull down resistor wired up. If the digital input is wired to an external signal source that can actively sink or source current then no pull-up or down is required. The point is that a digital input pin not wired to anything is not seeing a valid logic level voltage, neither a high or low and should not be attempted to be read.

That make sense?


Yes, I used a 1M ohm resistor between the button and the input.

this is some of the code I used

global scope:
const int rotateInput = 31;
int b11;

pinMode(rotateInput, INPUT);

in the loop

b11 = digitalRead(rotateInput);
if(b11 == HIGH){
  other stuff;

Now when I checked, using a serial connection, what value b11 would get while I didn’t press the button, it would be something like: 101010110101010101010101010100110. If I actually pressed the button it would be all 1111’s.

I also tried it with the example button code, same story…

What did I do wrong?

Yes, I used a 1M ohm resistor between the button and the input.

That is not the same as having a pull-up or pull-down installed (not sure what you wired to the otherside of the button switch, +5 or ground?). It sounds like you need a pull-down, so wire a 10k ohm resistor from the input pin to ground.