Button Status

Lab 7: Hardware Button Status

1. ΰΉ‚ΰΈ„ΰΈ£ΰΈ‡ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ΰΈ ΰΈ²ΰΈžΰΈ£ΰΈ§ΰΈ‘ΰΈ‚ΰΈ­ΰΈ‡ Lab

Why? - ΰΈ—ΰΈ³ΰΉ„ΰΈ‘ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΈ£ΰΈΉΰΉ‰ΰΉ€ΰΈ£ΰΈ·ΰΉˆΰΈ­ΰΈ‡ΰΈ™ΰΈ΅ΰΉ‰

ΰΈΰΈ²ΰΈ£ΰΈ­ΰΉˆΰΈ²ΰΈ™ΰΈͺΰΈ–ΰΈ²ΰΈ™ΰΈ°ΰΈ›ΰΈΈΰΉˆΰΈ‘ΰΈΰΈ”ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈžΰΈ·ΰΉ‰ΰΈ™ΰΈΰΈ²ΰΈ™ΰΈͺำคัญ:

  • User Input: รับ input ΰΈˆΰΈ²ΰΈΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΈœΰΉˆΰΈ²ΰΈ™ΰΈ›ΰΈΈΰΉˆΰΈ‘ΰΈšΰΈ™ΰΈšΰΈ­ΰΈ£ΰΉŒΰΈ”

  • Polling Pattern: ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΈ£ΰΈΉΰΉ‰ Timer-based polling

  • Debouncing: ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈˆΰΈΰΈ²ΰΈ£ΰΈΰΈ£ΰΈ­ΰΈ‡ΰΈͺัญญาณ bounce

  • Active Low: ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈˆ logic ΰΈ‚ΰΈ­ΰΈ‡ΰΈ›ΰΈΈΰΉˆΰΈ‘ΰΈΰΈ”

What? - ΰΈˆΰΈ°ΰΉ„ΰΈ”ΰΉ‰ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΈ£ΰΈΉΰΉ‰ΰΈ­ΰΈ°ΰΉ„ΰΈ£

  1. Button API: aic_gpio_button_read()

  2. Timer Polling: ΰΉƒΰΈŠΰΉ‰ lv_timer_create() ΰΈ­ΰΉˆΰΈ²ΰΈ™ΰΈͺΰΈ–ΰΈ²ΰΈ™ΰΈ°

  3. Active Low Logic: ΰΈ›ΰΈΈΰΉˆΰΈ‘ΰΈΰΈ” = 0, ΰΈ›ΰΈ₯่อฒ = 1

  4. UI Feedback: ΰΈ­ΰΈ±ΰΈžΰΉ€ΰΈ”ΰΈ— LED แΰΈ₯ΰΈ° Label ΰΈ•ΰΈ²ΰΈ‘ΰΈͺΰΈ–ΰΈ²ΰΈ™ΰΈ°

How? - ΰΈ—ΰΈ³ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ΰΉ„ΰΈ£

แΰΈͺΰΈ”ΰΈ‡ΰΈͺΰΈ–ΰΈ²ΰΈ™ΰΈ°ΰΈ›ΰΈΈΰΉˆΰΈ‘ USER 2 ΰΈ•ΰΈ±ΰΈ§ΰΈšΰΈ™ΰΈ«ΰΈ™ΰΉ‰ΰΈ²ΰΈˆΰΈ­ΰΉΰΈšΰΈš Real-time


2. ΰΈ«ΰΈ₯ักการทำงานแΰΈ₯ΰΈ° Flowchart

2.1 Button Hardware

2.2 Polling Architecture

2.3 UI Layout


3. ΰΈŸΰΈ±ΰΈ‡ΰΈΰΉŒΰΈŠΰΈ±ΰΈ™ΰΈͺำคัญ

3.1 Button API

Function
Description
Returns

aic_gpio_button_read(btn)

Read button with debounce

true = pressed

aic_gpio_button_read_raw(btn)

Read without debounce

true = pressed

aic_gpio_button_name(btn)

Get button name string

const char*

3.2 Button Types

3.3 LVGL Timer Functions

Function
Description

lv_timer_create(cb, period, user_data)

Create timer

lv_timer_del(timer)

Delete timer

lv_timer_pause(timer)

Pause timer

lv_timer_resume(timer)

Resume timer


4. Code Example

4.1 Timer Callback

4.2 Create Timer


5. ΰΈ­ΰΈ‡ΰΈ„ΰΉŒΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈ£ΰΈΉΰΉ‰ΰΉΰΈ₯ΰΈ°ΰΉ€ΰΈ—ΰΈ„ΰΈ™ΰΈ΄ΰΈ„

5.1 Why Polling Instead of Interrupt?

Method
Pros
Cons

Polling

Simple, safe with LVGL

CPU overhead

Interrupt

Efficient

LVGL not thread-safe

Recommendation: Use polling for LVGL integration.

5.2 Debouncing Explained

5.3 Edge Detection (Optional)


6. ΰΉΰΈšΰΈšΰΈΰΈΆΰΈΰΈ«ΰΈ±ΰΈ”

Exercise 1: Button Counter

ΰΈ™ΰΈ±ΰΈšΰΈˆΰΈ³ΰΈ™ΰΈ§ΰΈ™ΰΈ„ΰΈ£ΰΈ±ΰΉ‰ΰΈ‡ΰΈ—ΰΈ΅ΰΉˆΰΈΰΈ”ΰΈ›ΰΈΈΰΉˆΰΈ‘ USER ΰΉΰΈ•ΰΉˆΰΈ₯ΰΈ°ΰΈ›ΰΈΈΰΉˆΰΈ‘ แΰΈͺΰΈ”ΰΈ‡ΰΈœΰΈ₯ΰΈšΰΈ™ΰΈ«ΰΈ™ΰΉ‰ΰΈ²ΰΈˆΰΈ­

Exercise 2: Toggle LED with Button

ΰΈΰΈ”ΰΈ›ΰΈΈΰΉˆΰΈ‘ USER1 β†’ Toggle Red LED ΰΈΰΈ”ΰΈ›ΰΈΈΰΉˆΰΈ‘ USER2 β†’ Toggle Green LED

Hints:

  • ΰΉƒΰΈŠΰΉ‰ edge detection (กดแΰΈ₯ΰΉ‰ΰΈ§ΰΈ›ΰΈ₯ΰΉˆΰΈ­ΰΈ’ΰΈ–ΰΈΆΰΈ‡ΰΈˆΰΈ° toggle)

  • ΰΉ€ΰΈΰΉ‡ΰΈš previous state


7. References


Previous Lab: Lab 6: HW LED Control Next Lab: Lab 8: HW ADC Display

Last updated

Was this helpful?