Skip to content

Instantly share code, notes, and snippets.

@jedie
Created February 12, 2026 20:22
Show Gist options
  • Select an option

  • Save jedie/0d90644f3fe00f51c3b23a9e86d723fa to your computer and use it in GitHub Desktop.

Select an option

Save jedie/0d90644f3fe00f51c3b23a9e86d723fa to your computer and use it in GitHub Desktop.
Hardkernel ODROID GO Crossbar test
"""Hardkernel ODROID GO Crossbar test"""
import time
from machine import ADC, Pin
from micropython import const
# The crossbar pin numbers:
CROSSBAR_X = const(34)
CROSSBAR_Y = const(35)
class CrossbarHandler:
# ADC values are around low: ~236 and high ~511
# So the mid value is around (236+511)/2 = 373.5
CROSSBAR_MIN_ADC_LOW = const(100)
CROSSBAR_MIN_ADC_MID = const(370)
def __init__(self, pin, high_callback, low_callback):
self.adc = ADC(Pin(pin, mode=Pin.IN))
self.adc.width(ADC.WIDTH_9BIT)
self.adc.atten(ADC.ATTN_11DB)
self.high_callback = high_callback
self.low_callback = low_callback
self.blocked = False
def poll(self):
value = self.adc.read()
if value < self.CROSSBAR_MIN_ADC_LOW:
# button released
self.blocked = False
elif not self.blocked:
print(f"Crossbar ADC value: {value}")
if value > self.CROSSBAR_MIN_ADC_MID:
self.blocked = True
self.high_callback()
elif value < self.CROSSBAR_MIN_ADC_MID:
self.blocked = True
self.low_callback()
class Crossbar:
def __init__(self):
self.joy_x = CrossbarHandler(
CROSSBAR_X, high_callback=self.left, low_callback=self.right
)
self.joy_y = CrossbarHandler(
CROSSBAR_Y, high_callback=self.up, low_callback=self.down
)
def poll(self):
self.joy_x.poll()
self.joy_y.poll()
def up(self):
print("up")
def down(self):
print("down")
def right(self):
print("right")
def left(self):
print("left")
if __name__ == "__main__":
print("Crossbar test...")
crossbar = Crossbar()
while True:
crossbar.poll()
time.sleep_ms(100)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment