Skip to content

Adding 3x4 OLED demo #7

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Sep 19, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 93 additions & 0 deletions examples/tca8418_3x4_OLED.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# SPDX-FileCopyrightText: Copyright (c) 2022 Liz Clark for Adafruit Industries
#
# SPDX-License-Identifier: Unlicense

import time
import board
import displayio
import terminalio
from adafruit_display_text import label
import adafruit_displayio_ssd1306
from adafruit_tca8418 import TCA8418

displayio.release_displays()

oled_reset = board.D1

i2c = board.I2C() # uses board.SCL and board.SDA
tca = TCA8418(i2c)
display_bus = displayio.I2CDisplay(i2c, device_address=0x3D, reset=oled_reset)

keymap = (("*", "0", "#"), ("7", "8", "9"), ("4", "5", "6"), ("1", "2", "3"))

# set up all R0-R2 pins and C0-C3 pins as keypads
KEYPADPINS = (
TCA8418.R0,
TCA8418.R1,
TCA8418.R2,
TCA8418.C0,
TCA8418.C1,
TCA8418.C2,
TCA8418.C3,
)

# make them inputs with pullups
for pin in KEYPADPINS:
tca.keypad_mode[pin] = True
# make sure the key pins generate FIFO events
tca.enable_int[pin] = True
# we will stick events into the FIFO queue
tca.event_mode_fifo[pin] = True

# turn on INT output pin
tca.key_intenable = True

# display width and height setup
WIDTH = 128
HEIGHT = 64
BORDER = 5

# display setup
display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=WIDTH, height=HEIGHT)

splash = displayio.Group()
display.show(splash)

# text area setup
title_text = "TCA8418 Demo"
title_area = label.Label(
terminalio.FONT, text=title_text, color=0xFFFFFF, x=10, y=10 // 2 + 1
)
splash.append(title_area)

key_text = " "
key_area = label.Label(
terminalio.FONT, text=key_text, color=0xFFFFFF, x=10, y=HEIGHT // 2 + 1
)
splash.append(key_area)

while True:
if tca.key_int:
# first figure out how big the queue is
events = tca.events_count
# now print keyevent, row, column & key name
for _ in range(events):
keyevent = tca.next_event
# strip keyevent
event = keyevent & 0x7F
event -= 1
# figure out row
row = event // 10
# figure out column
col = event % 10
# print event type first
if keyevent & 0x80:
print("Key down")
# print each key pressed to display consecutively
key_area.text = key_area.text + keymap[col][row]
else:
print("Key up")
# use row & column coordinates to print key name
print("Row %d, Column %d, Key %s" % (row, col, keymap[col][row]))
tca.key_int = True # clear the IRQ by writing 1 to it
time.sleep(0.01)