// C++ code

// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2;  // the number of the pushbutton pin
const int ledPin = 4;    // the number of the LED pin


// Variables will change:
int ledState = HIGH;        // the current state of the output pin
int buttonState;            // the current reading from the input pin
int lastButtonState = LOW;  // the previous reading from the input pin
int button_counter = 0;


// the following variables are unsigned longs because the time, measured in
// milliseconds, will quickly become a bigger number than can be stored in an int.
unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 50;    // the debounce time; increase if the output flickers


void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  // set initial LED state
  digitalWrite(ledPin, ledState);
  Serial.begin(9600);
  Serial.println("Contador pulsaciones: ");
  Serial.println(button_counter);
}

void loop() {
  int reading = digitalRead(buttonPin);
  // if the button state has changed:
  
  // If the switch changed, due to noise or pressing:
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }
  
  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer than the debounce
    // delay, so take it as the actual current state:
    
    // if the button state has changed:
    if (reading != buttonState) {
      buttonState = reading;        
      
      // only toggle the LED if the new button state is HIGH
      if (buttonState == HIGH) {        
        ledState = !ledState;
        button_counter++;
        Serial.println(button_counter);
      }
    }
  }
    
  // set the LED:
  digitalWrite(ledPin, ledState);
    
  // save the reading. Next time through the loop, it'll be the lastButtonState:
  lastButtonState = reading;
}
$abcdeabcde151015202530fghijfghij