Go Down

Topic: Get the push button sense once (Read 593 times) previous topic - next topic

zoom

I'm using the push button with the built in pull-up resistor;

pinMode(b1, INPUT_PULLUP);

and have such a main loop. Whenever I press the push button and hold, the empty string called "pass" takes dozens of "1", as expected :)
However I want to make it sense the push once until I release it and push again.
By that structure, it is not likely to implement I think.

What would your suggestions be ?

void loop()
{
  if(digitalRead(b1) == LOW)
  {
    pass += "1";
    counter += 1;
  }
}

robtillaart


You must make a variable that holds the state of the button. Only if the state changes there is action

something like this
Code: [Select]


int pressed = 0;

void loop()
{
  if (digitalRead(b1) == LOW && pressed == 0)
  {
    pressed = 1;
    pass += "1";
    counter++;
  }
  if (digitalRead(b1) == HIGH && pressed == 1)
  {
    pressed = 0;
  }
}

give it a try
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

zoom

Seems pretty logical but doesn't work.
I've implemented more or less a similar solution but it didn't work either. Strange



You must make a variable that holds the state of the button. Only if the state changes there is action

something like this
Code: [Select]


int pressed = 0;

void loop()
{
  if (digitalRead(b1) == LOW && pressed == 0)
  {
    pressed = 1;
    pass += "1";
    counter++;
  }
  if (digitalRead(b1) == HIGH && pressed == 1)
  {
    pressed = 0;
  }
}

give it a try


UKHeliBob

This code does what I would expect
Code: [Select]
String pass;
int counter =0;
int pressed = 0;
int b1 = 3;

void setup()
{
  pinMode(b1, INPUT_PULLUP);
  Serial.begin(9600);
}
void loop()
{
  if (digitalRead(b1) == LOW && pressed == 0)
  {
    pressed = 1;
    pass += "1";
    counter++;
    Serial.println(pass);
  }
  if (digitalRead(b1) == HIGH && pressed == 1)
  {
    pressed = 0;
  }
}

Sample output of 4 button presses
Code: [Select]
1
11
111
1111

NOTE - no debounce implemented but the button action seems relatively snappy so not a problem
Please do not send me PMs asking for help.  Post in the forum then everyone will benefit from seeing the questions and answers.

zoom

1
11
111

at 1 press. Very snappy :/
What can I do ?

UKHeliBob

Debounce the button by the look of it.
Please do not send me PMs asking for help.  Post in the forum then everyone will benefit from seeing the questions and answers.

HazardsMind

And maybe look for a button state change.
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

Go Up