Become a leader in the IoT community!
Join our community of embedded and IoT practitioners to contribute experience, learn new skills and collaborate with other developers with complementary skillsets.
Join our community of embedded and IoT practitioners to contribute experience, learn new skills and collaborate with other developers with complementary skillsets.
I’m using the STM32 NUCLEO-F401RE microcontroller and have programmed a speaker to change frequency when the joystick is pushed up or down. However, I’m encountering two issues:
1. The frequency sometimes changes multiple times when the joystick is pressed, suggesting the ISR is being triggered more than once.
2. Although the `InterruptIn` object is set to trigger on the rising edge, it sometimes also triggers on the falling edge when the joystick returns to neutral.
I haven’t implemented debouncing yet, and I’m using a digital joystick connected to pins A2 and A3 without external pull-up/down resistors. Here’s the code:
void upISR()
{
if (greenLED.getStatus())
{
myTicker.detach();
frequency += 200;
myTicker.attach(callback(&spkr, &Speaker::toggle), 0.5/frequency);
}
}
int main()
{
InterruptIn up(A2);
InterruptIn down(A3);
InterruptIn fire(D4);
up.rise(&upISR);
down.rise(&downISR);
fire.rise(&toggleISR);
redLED.on();
while (1) {}
}
Could these issues be due to the lack of debouncing? What’s the best way to handle this, and should I be using external pull-up/down resistors to improve reliability?
Any advice would be most appreciated guys 🙏🏽
CONTRIBUTE TO THIS THREAD