Crear una librería nueva basada en un código Contador

Hola amigos,

Me estoy iniciando en la creación de una librería nueva basada en un código recién creado que le llamaré Contador para luego utilizarla de manera redundante.

Investigué y debo crear dos archivos uno .h y otro .cpp; sin embargo no estoy seguro de estarlo haciendo bien.

Alguien podría hecharle un vistazo a este código para saber si voy por buen camino en crearlo como .h, pues de acuerdo al sitio oficial indica que el núcleo del archivo de cabecera consiste en una línea para cada función en la biblioteca, envuelto en una clase junto con las variables que usted necesita.

Estará correctamente creado el archivo como clase?

Saludos y gracias.

/*Contador.h - Library for counting holes trough a infrared sensor.
Created by Luis Roldán, December 8, 2019
*/
#ifndef Contador_h
#define Contador_h
#include "WConstants.h"

class Contador
{
  public: Contador(int pin); 
  void setup();
  void loop();
  private:
  int _pin;
};

#endif 

// this constant won't change:
const int  buttonPin = A2;    // el pin a donde está conectado el sensor
const int ledPin = 9;       // el pin a donde está conectado el LED

// Variables will change:
int Cantidad = 0;            // contador de agujeros
int buttonState = 0;         // estado actual del contador
int lastButtonState = 0;     // estado previo del contador

// Variable de tiempo.
unsigned long t=0;

void setup() {
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT_PULLUP);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:
  Serial.begin(115200);
}


void loop() {
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);
  if (buttonState != lastButtonState) {
  
    if (buttonState == LOW) {
      // Cada vez que pulses el botón guardas millis en t.
      t = millis();
      Cantidad++;
      }
      else {
    }
    delay(10);
  }
  lastButtonState = buttonState;
 
  // Si el temporizador es distinto 0, significa que has pulsado el botón.
  if ( t!=0 ) {
    // Restas el tiempo actual con el de t, si el tiempo transcurrido
    // es mayor del que tu fijes (aquí un diez mili segundos), muestras la cantidad
    // y reinicias el temporizador.
    if ( millis() - t > 100 ) {          
      // Debemos tratar la cantidad.
      if ( Cantidad%5==0 && cantidad!==0 ) {
        Serial.print("Has pasado una tarjeta válida de ");
        Serial.print(Cantidad);
        Serial.println(" ");
        digitalWrite(ledPin, HIGH);
      }
      else {
        Serial.print("Error en la tarjeta, hemos contado ");
        Serial.print(Cantidad);
        Serial.println(" ");
        digitalWrite(ledPin, LOW);
      }
      // Debemos iniciar la cantidad y el timer.
      Cantidad=0;
      t=0;
    }
  }
}

y este sería el archivo .cpp

/*
Contador.cpp - Library for counting holes with a infrared sensor.
Created by Luis R., December 8, 2019.
 */

 #include "WProgram.h"
 #include "Contador.h"

 Contador::Contador(int pin);
 {
    pinMode(pin, OUTPUT);
    _pin = pin;
 }

 void Contador::setup();
 {
  digitalRead(_pin, HIGH); delay(250);
  digitalRead(_pin, LOW); delay(250);
 }

 void Contador::loop();
 {
  digitalRead(ledPin, HIGH); delay(1000);
  digitalRead(ledPin, LOW); delay(250);
 }

// this constant won't change:
const int  buttonPin = A2;    // el pin a donde está conectado el sensor
const int ledPin = 9;       // el pin a donde está conectado el LED

// Variables will change:
int Cantidad = 0;            // contador de agujeros
int buttonState = 0;         // estado actual del contador
int lastButtonState = 0;     // estado previo del contador

// Variable de tiempo.
unsigned long t=0;

void setup() {
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT_PULLUP);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:
  Serial.begin(115200);
}


void loop() {
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);
  if (buttonState != lastButtonState) {
  
    if (buttonState == LOW) {
      // Cada vez que pulses el botón guardas millis en t.
      t = millis();
      Cantidad++;
      }
      else {
    }
    delay(10);
  }
  lastButtonState = buttonState;
 
  // Si el temporizador es distinto 0, significa que has pulsado el botón.
  if ( t!=0 ) {
    // Restas el tiempo actual con el de t, si el tiempo transcurrido
    // es mayor del que tu fijes (aquí un diez mili segundos), muestras la cantidad
    // y reinicias el temporizador.
    if ( millis() - t > 100 ) {          
      // Debemos tratar la cantidad.
      if ( Cantidad%5==0 && cantidad!==0 ) {
        Serial.print("Has pasado una tarjeta válida de ");
        Serial.print(Cantidad);
        Serial.println(" ");
        digitalWrite(ledPin, HIGH);
      }
      else {
        Serial.print("Error en la tarjeta, hemos contado ");
        Serial.print(Cantidad);
        Serial.println(" ");
        digitalWrite(ledPin, LOW);
      }
      // Debemos iniciar la cantidad y el timer.
      Cantidad=0;
      t=0;
    }
  }
}