GPIO - Use GPIO Interrupt to Control LED

Materials

Example

Introduction

In this example, we use a button to trigger interrupt and control the LED. When we press and release the button, the LED dims, press and release the button again, and the LED lights up. Note that in the Arduino example “Button and LED”, LED only lights up when the button is pressed and hold, when we release the button, the LED dims.

Procedure

Open the example, “File” -> “Examples” -> “AmebaGPIO” -> “LED_InterruptCtrl”

Compile and upload the program, press the reset button on the Ameba.
The LED will light up at first. Press and release the button, then the LED should dim. Pressing the button again should light up the LED.

Code Reference

In

setup()

we set Pin 12 to:

INPUT_IRQ_RISE

This means that an interrupt occurs when the voltage of this pin changes from GND to 3V3. Therefore, we connect the other side of the button to 3V3, so as to trigger interrupt event when the button is pressed.

pinMode(button, INPUT_IRQ_RISE);

On the other hand, we can set pin 12 to:

INPUT_IRQ_FALL

This means that an interrupt occurs when the voltage of this pin changes from 3V3 to GND. In this case, the other side of the button is connected to GND. Next, we need to specify the function to be executed to handle the interrupt:

digitalSetIrqHandler(button, button_handler);

The second parameter is a function pointer, with prototype:

void button_handler(uint32_t id, uint32_t event)

In this handler, every time we press and release the button, we trigger an interrupt, and change the status of the LED.

Please confirm that QQ communication software is installed