Project Started
Generated image
Table
| Net | GPIO | Use |
|---|---|---|
| ADC_POT1 | 1 | ADC input |
| ADC_POT2 | 2 | ADC input |
| I2C_SDA | 8 | TCA8418 SDA |
| I2C_SCL | 9 | TCA8418 SCL |
| KEYPAD_INT | 10 | active-low interrupt input |
| KEYPAD_RST | 11 | active-low reset output |
| LATCH1 | 13 | active-low input, external 10 kΩ pull-up |
| LATCH2 | 14 | active-low input, external 10 kΩ pull-up |
Cpp
#include <Wire.h> constexpr int PIN_SDA = 8; constexpr int PIN_SCL = 9; constexpr int PIN_INT = 10; constexpr int PIN_RST = 11; constexpr int PIN_POT1 = 1; constexpr int PIN_POT2 = 2; constexpr int PIN_LATCH1 = 13; constexpr int PIN_LATCH2 = 14; volatile bool keypadPending = false; void IRAM_ATTR keypadISR() { keypadPending = true; } void setup() { pinMode(PIN_RST, OUTPUT); digitalWrite(PIN_RST, LOW); delayMicroseconds(120); digitalWrite(PIN_RST, HIGH); delayMicroseconds(120); Wire.begin(PIN_SDA, PIN_SCL); pinMode(PIN_INT, INPUT); // external pull-up fitted pinMode(PIN_LATCH1, INPUT); // external pull-up fitted pinMode(PIN_LATCH2, INPUT); // external pull-up fitted attachInterrupt(PIN_INT, keypadISR, FALLING); analogReadResolution(12); // Configure TCA8418 keypad rows/columns, debounce, FIFO and interrupt registers here. } void loop() { if (keypadPending) { keypadPending = false; // Drain TCA8418 key-event FIFO and clear its interrupt status. } int pot1 = analogRead(PIN_POT1); int pot2 = analogRead(PIN_POT2); bool latch1Closed = digitalRead(PIN_LATCH1) == LOW; bool latch2Closed = digitalRead(PIN_LATCH2) == LOW; }
Toolchain
Pin Mapping
Startup Sequence
Keypad Behavior
Arduino-Style Skeleton