Rewrites the cursed Pico RGB Keypad code so that it can't hurt anyone else.
Turns out the whole loop could have been a bitwise operator.
The true lesson was the people we met along the way.
Removes all driver-specific SDA/SCL pin definitions and defaults.
Pin type is "uint" everywhere, but "PIN_UNUSED" is *int*_max for MicroPython compat. That's still a lot of pins!
Adds baudrate to the I2C class, and allows a driver (like Trackball) to check the baudrate is supported
This change adds a common I2C class, gathering various I2C functions into a single point of responsibility.
It's necessary for correctly managing the I2C bus pins and state across multiple devices.
* Add a common/pimoroni.hpp to list default pins for various add-ons
* Move the BG SPI Slot enum here for safe keeping
* Switch all GPIO pin references to "uint" to match Pico SDK and bring back PIN_UNUSED as UINT_MAX
Confused myself by plugging this into a BG base. It gave all the appearance of working, but the time was not counting up.
Turns out the library will happily talk to no device whatsoever and when you "set_time" it's stored in an C array and returned as if it came from the RTC.
* C driver for LTP305 breakout
* Micropython bindings for LTP305 breakout
* Micropython examples for dotmatrix
* C++ examples for dotmatrix
Co-authored-by: Phil Howard <phil@gadgetoid.com>
Move scroll_text into the C++ library and make it support std::string.
Move show_bitmap_1d to set_bitmap_1d in the C++ library. Use it as the basis for show_text and scroll_text.
Change show_text to set_text since it does not implicitly show the result.
Add a new pico-scroll demo to show off the scrolling text functionality.
Add IS31FL3731 driver
Add RGBMatrix5x5 library and example
Add Matrix11x7 library and example
Co-authored-by: ZodiusInfuser <christopher.parrott2@gmail.com>
A new constructor has been added which accepts a enum type BG_SPI_SLOT which can be either:
ST7789::BG_SPI_FRONT or ST7789::BG_SPI_BACK.
This selects the correct CS/BL pins for the respective breakout-garden SPI slot.
Additionally the PWM'd backlight is turned *on* by default to avoid any confusion when the user does not set a value.
This allows fonts to be hot-swapped out by calling `set_font`
Unfortunately the way fonts are currently stored limits the maximum height to 8 pixels, since that's the size of a uint8_t and the y dimension is bitwise encoded.
The width can be arbitrary, by specifying the widths and max_width (the multiplier for number of bytes per char).
Might be worth grabbing some more bits from 32blit to make this not terrible, but now a user-defined font is an .hpp and a `set_font` away.
* Switch to using AutoRepeat class to debounce buttons
* Read TOF sensor non-blocking to avoid stalling input
* Drop dead code
* Make mode_to_text const
* "Hold" text shows red when held
* typedef pen and constexpr create_pen for #6
* Prevent out of bounds clip permitting write outside buffer
* camelcase rect, point, and pen types
* added triangle(p1, p2, p3) and polygon(std::vector<Point> points) methods to graphics library
* change all uses of pen that were uint16_t into Pen type
* updated micropython modules to use new rect, point, pen naming
* added line(p1, p2) method to pico graphics library with faster vertical/horizontal special cases
Co-authored-by: Jonathan Williamson <jon@pimoroni.com>