47 lines
935 B
C++
47 lines
935 B
C++
#include <Arduino.h>
|
|
|
|
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;
|
|
}
|
|
*/
|