#include SAMDTimer BuzzerTimer(TIMER_TC5); bool attached = false; void initBuzzer() { pinMode(BUZZER_PIN, OUTPUT); } volatile bool buzzing = false; void buzzerISR() { digitalWrite(BUZZER_PIN, buzzing ? LOW : HIGH); buzzing = !buzzing; //digitalToggle(BUZZER_PIN); } void buzz() { if (attached) BuzzerTimer.enableTimer(); else BuzzerTimer.attachInterrupt(BUZZER_FREQ *2, buzzerISR); } void noBuzz() { BuzzerTimer.disableTimer(); } /* // https://forum.arduino.cc/t/adding-a-toggle-function-to-wiring-digital-c/975608 void digitalToggle(uint8_t pin) { uint8_t timer = digitalPinToTimer(pin); uint8_t bit = digitalPinToBitMask(pin); uint8_t port = digitalPinToPort(pin); volatile uint8_t *out; if (port == NOT_A_PIN) return; if (timer != NOT_ON_TIMER) turnOffPWM(timer); out = portOutputRegister(port); uint8_t oldSREG = SREG; cli(); *out ^= bit; SREG = oldSREG; } */