GPIO Integration

ΰΈ§ΰΈ±ΰΈ•ΰΈ–ΰΈΈΰΈ›ΰΈ£ΰΈ°ΰΈͺΰΈ‡ΰΈ„ΰΉŒ

  • Integration: ΰΈ£ΰΈ§ΰΈ‘ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈ£ΰΈΉΰΉ‰ΰΈˆΰΈ²ΰΈ Lab 1-3 (LED, Button, ADC)

  • Real Application: ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ Interactive LED Controller

  • State Machine: ΰΈˆΰΈ±ΰΈ”ΰΈΰΈ²ΰΈ£ΰΈ«ΰΈ₯ΰΈ²ΰΈ’ input/output ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΈΰΈ±ΰΈ™

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

  • Multiple Inputs: ΰΈˆΰΈ±ΰΈ”ΰΈΰΈ²ΰΈ£ POT + Button ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΈΰΈ±ΰΈ™

  • Value Mapping: แปΰΈ₯ΰΈ‡ΰΈ„ΰΉˆΰΈ² POT ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ delay time

  • Mode Switching: ΰΈͺΰΈ₯ΰΈ±ΰΈšΰΉ‚ΰΈ«ΰΈ‘ΰΈ”ΰΈ”ΰΉ‰ΰΈ§ΰΈ’ button

  • Non-Blocking Design: ΰΈ—ΰΈ³ΰΈ«ΰΈ₯ΰΈ²ΰΈ’ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΈΰΈ±ΰΈ™


Application Design

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  Interactive LED Controller                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚   INPUTS:                                                       β”‚
β”‚   ════════                                                      β”‚
β”‚   POT (P15_1)     ────►  LED Blink Rate                         β”‚
β”‚   └─ 0%   = 1000ms (ΰΈŠΰΉ‰ΰΈ²ΰΈͺΰΈΈΰΈ”)                                       β”‚
β”‚   └─ 50%  = 525ms                                               β”‚
β”‚   └─ 100% = 50ms  (ΰΉ€ΰΈ£ΰΉ‡ΰΈ§ΰΈͺΰΈΈΰΈ”)                                       β”‚
β”‚                                                                 β”‚
β”‚   Button (USER_BTN1) ────►  Toggle Mode                         β”‚
β”‚   └─ Active LOW (กด = 0)                                        β”‚
β”‚   └─ Debounce 50ms                                              β”‚
β”‚                                                                 β”‚
β”‚   MODES:                                                        β”‚
β”‚   ═══════                                                       β”‚
β”‚   MODE_NORMAL:  LED blinks at POT-controlled speed              β”‚
β”‚   MODE_FAST:    LED blinks at 2x speed (delay / 2)              β”‚
β”‚                                                                 β”‚
β”‚   OUTPUT:                                                       β”‚
β”‚   ═══════                                                       β”‚
β”‚   LED (USER_LED1) ────►  Blinks based on calculated delay       β”‚
β”‚   Serial Terminal ────►  Real-time ASCII status bar             β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Lab 4.1 : Code Implementation

Step 1: Macros Configuration

Step 2: Mode Definition

Step 3: Helper Functions

read_button_with_debounce() - Delay-Based Debounce

ΰΈ«ΰΈ‘ΰΈ²ΰΈ’ΰΉ€ΰΈ«ΰΈ•ΰΈΈ: PSoC Edge ΰΉ„ΰΈ‘ΰΉˆΰΈ‘ΰΈ΅ Cy_SysLib_GetTimerTick() ΰΈˆΰΈΆΰΈ‡ΰΉƒΰΈŠΰΉ‰ Delay-Based Debounce แทน

map_pot_to_delay() - แปΰΈ₯ΰΈ‡ΰΈ„ΰΉˆΰΈ² POT ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ Delay

print_status_bar() - ASCII Status Bar

Step 4: Main Function (Non-Blocking Design)


4. Flowchart


5. State Diagram


6. ΰΈ•ΰΈ±ΰΈ§ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ Output


Program Code ΰΈ—ΰΈ±ΰΉ‰ΰΈ‡ΰΈ«ΰΈ‘ΰΈ”


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

Exercise 1: Three Modes (Triple Speed)

circle-info

Hint

Exercise 2: LED Brightness Pattern

circle-info

Hint

ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ pattern ΰΉ€ΰΈŠΰΉˆΰΈ™ heartbeat (ΰΈͺΰΈ±ΰΉ‰ΰΈ™-ΰΈͺΰΈ±ΰΉ‰ΰΈ™-ΰΈ’ΰΈ²ΰΈ§)



Last updated

Was this helpful?