Arduino UNO R3 cannot read digital input


I connected a button to my digital input (I tried multiple digital input ports). And I used one of the example programs (button), that i modified a bit so i could read the buttonState. When opening the serial monitor it gave something like this "000000111111110000111000111" whitout even touching the button.

const int buttonPin = 7;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);//serial voor het uitlezen van de schakelaar

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  Serial.print (buttonState);

So that is the code i used. Can anyone help with this?


That's called "floating", where an input changes becasue it's picking up stray emissions in the air.

Easiest way to fix that is to use the internal "pullup resistor" which forces the pin to be at 5V until you press the button, which must be from the pin to ground:

Unpressed: pin is at 5V through the internal resistor Pressed: pin is at 0v through the switch to ground.

Have a look here, about halfway down.

I used that. could it be that the resistance is too small?

It's waaaaay much easier to use the built-in pullup:

pinMode(myPin, INPUT_PULLUP);