adafruit / Adafruit_CircuitPython_Bundle

A bundle of useful CircuitPython libraries ready to use from the filesystem.
MIT License
860 stars 185 forks source link

TypeError: object of type 'Pin' has no len() #459

Closed AbdElhalim12 closed 4 months ago

AbdElhalim12 commented 5 months ago

I'm trying to combine kmk firmware with oled screen the oled screen runs correctly but I get this error: `Auto-reload is on. Simply save files over USB to run them or enter REPL to disable. code.py output: Starting 1368894 kmk.keys: LCTRL: ModifierKey(code=1, has_modifiers=None) 1368898 kmk.keys: LSHIFT: ModifierKey(code=2, has_modifiers=None) 1368903 kmk.keys: U: Key(code=24, has_modifiers=None) 1368909 kmk.keys: RALT: ModifierKey(code=64, has_modifiers=None) 1368915 kmk.keys: ENTER: Key(code=40, has_modifiers=None) 1369186 kmk.keys: LCMD: ModifierKey(code=8, has_modifiers=None) 1369190 kmk.keys: MACRO_SLEEP_MS: 1369195 kmk.keys: F4: Key(code=61, has_modifiers=None) 1369201 kmk.keys: F5: Key(code=62, has_modifiers=None) 1369203 kmk.keyboard: Initialising KMKKeyboard 1369204 kmk.keyboard: unicode_mode=0 1369205 kmk.hid: use 6KRO 1369212 kmk.hid: use no pan 1369212 kmk.keyboard: hid=USBHID(REPORT_BYTES=9) Traceback (most recent call last): File "code.py", line 51, in File "kmk/kmk_keyboard.py", line 470, in go File "kmk/kmk_keyboard.py", line 497, in _init File "kmk/kmk_keyboard.py", line 334, in _init_matrix File "kmk/scanners/keypad.py", line 51, in init TypeError: object of type 'Pin' has no len()

Code done running.

Press any key to enter the REPL. Use CTRL-D to reload.`

The Code:

`print("Starting")

import board import busio import displayio, terminalio import adafruit_ssd1306 from adafruit_display_text import label from kmk.kmk_keyboard import KMKKeyboard from kmk.scanners import DiodeOrientation from kmk.keys import KC from kmk.extensions.media_keys import MediaKeys from kmk.handlers.sequences import simple_key_sequence

I2C Instance

i2c = busio.I2C(board.SCL, board.SDA)

i2c = busio.I2C(board.GP15, board.GP14) oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c)

KMK Setup

keyboard = KMKKeyboard() keyboard.extensions.append(MediaKeys()) keyboard.row_pins = (board.GP5) keyboard.col_pins = (board.GP2, board.GP3, board.GP4) keyboard.diode_orientation = DiodeOrientation.COL2ROW

Display

oled.fill(0) oled.text('h', 0, 0, 100) oled.show()

KMK

discord_Deafen = simple_key_sequence( ( KC.LCMD(no_release=True), KC.MACRO_SLEEP_MS(30), KC.F4 ) ) discord_mute = simple_key_sequence( ( KC.LCMD(no_release=True), KC.F5 ) )

keyboard.keymap = [ [KC.AUDIO_MUTE,discord_Deafen,discord_mute] ]

if name == 'main': keyboard.go() `

jepler commented 4 months ago
keyboard.row_pins = (board.GP5)

This needs to be keyboard.row_pins = (board.GP5,). To create a "tuple" containing just a single item, a trailing comma is required, as you can see in this example:

>>> (1,2,3) # a tuple with 3 items
(1, 2, 3)
>>> (1,)    # a tuple with 1 item
(1,)
>>> (1)     # Just the value "1" itself, not a tuple
1