Blog #3
I2C/Qwiic device tests
Motivation
With so many inexpensive I2C devices available, I felt motivated to develop small, custom-built controls for my layouts, just for the fun of it.
Whether it’s just a display or a combination of different I2C devices, the logic sits on the PC and enables interaction within and between these controls. RTB automatically detects the devices, tags them with a UID and creates an object representation in the central database. You don’t have to worry about I2C bus programming – it’s all hidden by the RTB abstraction layer. Therefore, developing a new custom control only takes a few minutes.
Input Devices
SparkFun Qwiic RGB Rotary Encoder
This device works very well and can be used as a universal incremental switch. In addition, it has a push button function when pressing down the rotating axis. The axis is illuminated with an RGB LED and enables status information to be displayed in color.
I find this module very useful.
SparkFun Qwiic Joystick
This device is certainly useful for controlling a model train. However, the resolution of the joystick position could be better, as only about 50% of the handle deflection is monitored and almost half of the physical deflection remains undetected.
I find this module useful but not perfect.
SparkFun Qwiic Button
This device is simply a push button that can be illuminated with a single color. Either red or green. It would have been much nicer with a multicolor LED. But it is not. So there will be plenty of space needed for just a small push button. Otherwise it works.
I find this module somewhat useful.
SparkFun Qwiic Keypad
The module allows train IDs to be entered by the operator but only has numbers. This could be a limitation if letters are also required. It would be better to have a keyboard allowing characters, as was the case with old cell phones.
Problem: One behavior of this device is annoying. It *must not* be queried too often, otherwise it will hang. Worse, it cannot participate on an I2C bus that has a lot of traffic to other devices. It will also hang. Therefore it should (must?) be on its own dedicated I2C bus. What a waste!
This module needs improvements.
