Skip to content

Instantly share code, notes, and snippets.

@rahuldottech
Last active August 18, 2022 09:12
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rahuldottech/839cb13140f24debae8f72343115de4b to your computer and use it in GitHub Desktop.
Save rahuldottech/839cb13140f24debae8f72343115de4b to your computer and use it in GitHub Desktop.
[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
Copy link

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
Copy link

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

@rahuldottech
Copy link
Author

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?

@mexteele
Copy link

mexteele commented Aug 4, 2021

Hey, yes I figured out! Thank you

@oggysaud245
Copy link

how did you solve it?

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