Simple test¶
Ensure your device works with this simple test.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | # Simple test for an RGB encoder.
# Author: Ben Shockley
# imports
import time
import struct
import busio
import board
import digitalio
import i2cencoderlibv21
# Setup the Inturrpt Pin from the encoder.
INT = digitalio.DigitalInOut(board.A3)
INT.direction = digitalio.Direction.INPUT
INT.pull = digitalio.Pull.UP
# Initialize the device.
i2c = busio.I2C(board.SCL, board.SDA)
encoder = i2cencoderlibv21.I2CEncoderLibV21(i2c, 0x21)
def EncoderChange():
encoder.write_rgb_code(0x00FF00)
valBytes = struct.unpack('>i', encoder.readCounter32())
print ('Changed: {}'.format(valBytes[0]))
def EncoderIncrement():
print ('Incrementing...')
def EncoderPush():
encoder.write_rgb_code(0x0000FF)
print ('Encoder Pushed!')
def EncoderRelease():
encoder.write_rgb_code(0x00FFFF)
print ('Encoder Released!')
def EncoderDoublePush():
encoder.write_rgb_code(0xFF00FF)
print ('Encoder Double Push!')
def EncoderMax():
encoder.write_rgb_code(0xFF0000)
print ('Encoder max!')
def EncoderMin():
encoder.write_rgb_code(0xFF0000)
print ('Encoder min!')
def EncoderFade():
encoder.write_rgb_code(0x000000)
def Encoder_INT():
encoder.update_status()
# Start by resetting the encoder. Reset takes 400us , so let us give it time to settle.
encoder.reset()
time.sleep(.1)
# When the board was initialized, the default config was loaded.
# Here we can override that config if we want.
encconfig = (i2cencoderlibv21.INT_DATA | i2cencoderlibv21.WRAP_DISABLE
| i2cencoderlibv21.DIRE_RIGHT | i2cencoderlibv21.IPUP_DISABLE
| i2cencoderlibv21.RMOD_X1 | i2cencoderlibv21.RGB_ENCODER)
encoder.begin(encconfig)
# Setup other varibles
encoder.write_counter(0)
encoder.write_max(10)
encoder.write_min(-10)
encoder.write_step_size(1)
encoder.write_antibounce_period(25)
encoder.write_double_push_period(50)
encoder.write_fade_rgb(5)
# Declare callbacks
encoder.onChange = EncoderChange
encoder.onIncrement = EncoderIncrement
encoder.onButtonRelease = EncoderRelease
encoder.onButtonPush = EncoderPush
encoder.onButtonDoublePush = EncoderDoublePush
encoder.onMax = EncoderMax
encoder.onMin = EncoderMin
encoder.onFadeProcess = EncoderFade
# Autoconfigure the interrupt register according to the callbacks declared.
# Must be called after declaring callbacks.
encoder.autoconfig_interrupt()
while True:
if not INT.value: #If INT pin goes LOW - we know the encoder status changed.
Encoder_INT()
|