#ifndef COINACCEPTOR_H #define COINACCEPTOR_H #include "Arduino.h" #include #include class CoinAcceptor { private: uint8_t pulsePin, enablePin; uint8_t accState = ACC_DISABLED; volatile uint16_t coinPulses = 0; volatile uint16_t allPulses = 0; uint16_t coinValue = 0; uint16_t sumValue = 0; std::string sumValueStr = ""; volatile bool coinDetected = false; volatile unsigned long currentMs = 0; volatile unsigned long lastPulseAtMs = 0; void IRAM_ATTR pulseIsrHandler(); public: const uint8_t ACC_DISABLED = LOW; const uint8_t ACC_ENABLED = HIGH; const unsigned int* pulseValues; unsigned int* coinNumbers; const size_t maxPulses = 0; const uint8_t pulseWidthMs = 0; const uint16_t maxAllowedCentToInsert = 0; uint8_t detectionError = 0; CoinAcceptor(uint8_t pulsePin, uint8_t enablePin, const unsigned int* pulseValues, const size_t maxPulses, const uint8_t pulseWidthMs, const uint16_t maxAllowedCentToInsert); ~CoinAcceptor(); void begin(); void disable(); void enable(); uint8_t state(); bool detectCoin(); uint16_t getCoinValue(); uint16_t getSumValue(); void resetSumValue(); std::string getSumValueStr(); std::string getCoinsNumStr() const; std::string getCoinsValStr() const; }; #endif