Author Options:

How to reset arduino after pressing the pushbutton 16 times? Answered

Good afternoon,

I'm trying to reset my Arduino after pressing the pushbutton 16 times. What I'm currently experiencing is that it is not resetting. I'm trying to achieve this using the StateChangeDetection example. Could anyone give me tips on how to achieve this? I'm working on this using an Multi Function Shield or MFS.

My code is:

// this constant won't change:
const int  buttonPin = A1;    // the pin that the pushbutton is attached to
const int ledPin = 13;       // the pin that the LED is attached to

// Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button
int count = 0;

void setup() {
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:

void loop() {
  // read the pushbutton input pin:
  buttonState = !digitalRead(buttonPin);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == LOW) {
      // if the current state is HIGH then the button went from off to on:
      Serial.print("number of button pushes: ");
    } else {
      // if the current state is LOW then the button went from on to off:
    // Delay a little bit to avoid bouncing
  // save the current state as the last state, for next time through the loop
  lastButtonState = buttonState;

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

//Source: https://www.instructables.com/answers/Is-there-a-way-to-count-button-pushes-on-an-arduin/
if (buttonState == HIGH) {   
    // turn LED on:  
    digitalWrite(ledPin, HIGH);
    count++;               // add 1 to the count
    if (count >= 8) {
      count = 0;
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);


You will be MUCH better off if you write down (ideally as a flow chart) what your trying to do:


Get button press

Loop until pressed

Increment counter +1

IS counter = 16 - if = 16 reset.

if <16 loop to start

Then simply do each bit in order in your code.

All this does is count up to 8 and then starts again. What about the reset bit ?