Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
[Arduino] buttonWait - wait for button press before further execution.
buttonWait v0.1 by rahuldottech
---------------------------------
(pause a script till a button is, y'know, *pressed*...)
This code is in the public domain.
Proper schematic at https://arduino.stackexchange.com/a/56805/50258
--
Circuit Diagram:
[pin]----|--------------[button]
| |
[10k resistor] |
| |
[ground] [vcc]
--
Usage:
buttonWait(<pin_number>);
/* the function */
void buttonWait(int buttonPin){
int buttonState = 0;
while(1){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
return;
}
}
}
void loop() {
// put your main code here, to run repeatedly:
buttonWait(2); // wait for button press on pin 2
// do something
// ...
}
/* the function */
void buttonWait(int buttonPin){
int buttonState = 0;
while(1){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
return;
}
}
}
void setup() {
// put your setup code here, to run once:
pinMode(LED_BUILTIN, OUTPUT); // initialize digital pin LED_BUILTIN as an output.
}
void loop() {
// put your main code here, to run repeatedly:
buttonWait(2); // wait for button press on pin 2
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on
delay(1000); //wait for a second
buttonWait(2); // wait for another button press on pin 2
digitalWrite(LED_BUILTIN, LOW); // turn the LED off
delay(1000); //wait for a second
}
@mexteele

This comment has been minimized.

Copy link

@mexteele mexteele commented Jun 12, 2021

Hey there. I'm trying to use your function to enter an autocalibration program for a sensor.

I successfully made an LCD print some welcome text once the button was pressed.

buttonWait(8);

some code to initialize the calibration process.

However, when I enter another buttonWait(8) to continue (the user will keep pushing the button to continue the process), the first function executes.

Basically, it's as if I can't run 2 buttonWait functions simultaneously. Here is my code.

`void loop() {

while (digitalRead(buttonPin) == HIGH) {

Serial.println("Esperando");
lcd.setCursor(0, 0);
lcd.print("Esperando");

}
buttonWait(8);
lcd.setCursor(0,0);
lcd.print("Calibremos");
lcd.setCursor(0,1);
lcd.print("el sensor");
delay(10000);

buttonWait(8);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Sumerja");
lcd.setCursor(0,1);
lcd.print("en agua");
`

Any insights on why this happens?? Thank you.

@mexteele

This comment has been minimized.

Copy link

@mexteele mexteele commented Jun 12, 2021

What I'm trying to achieve is a sequential process that advances with each pressing of the same button.

@rahuldottech

This comment has been minimized.

Copy link
Owner Author

@rahuldottech rahuldottech commented Jul 9, 2021

Hey, I'm so sorry for the delayed response. I took a cursory glance, and your code looks okay to me, I don't know why that would be happening.

Did you manage to figure it out?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment