This code is intentionally written in C++ to illustrate the basics of driving HUB75 without being overly complicated to read and understand.
Tested on a 32x32 panel and a 64x64 "FM6126A" panel, for which this code includes a magic pair of register settings.
Add the init required for the 320x240 2.0" LCD.
Add an option to set baudrate, 320x240 needs 74MHz for 60FPS
Add library and example for 320x240 2.0 LCD.
Library:
Includes classes for driving WS2812 and APA102 LEDs and defines for Plasma features.
Encoder Example:
Supports connecting a Rotary Encoder via the Qw'St connector.
Works with APA102 or WS281X pixels.
Pressing A will cycle between:
1. Colour change
2. Brightness change
3. Cycle delay
Pressing B will switch back into auto-cycle mode.
Turning the encoder at any time will switch out of auto cycle mode into parameter adjust mode.
Also includes a bugfix to Rotary Encoder for getting the interrupt correctly.
Rainbow Example:
Basic rainbow cycle, press B to speed up and A to slow down.
The BME68X library is *linked* against the MicroPython bindings, rather than compiled directly in.
This saves specifing the list of target files twice.
This changeset brings the BOSCH BME68X Sensor API library in as a submodule and makes it buildable with CMake.
A thin wrapper- the BME68X driver- provides simple init, configure, read_forced and read_parallel functions.
Two BME688 examples are available for forced-mode and parallel-mode operation.
The switch to common I2C and common definitions for SPI had broken an edge case in Pico Explorer where no backlight pin is used.
The backlight pin was inadvertently set to the front Breakout Garden SPI slot default, which is pin 20- this also happens to be the I2C SDA pin for Pico Explorer, breaking I2C comms.
This fix adds a new special case board "PICO_EXPLORER_ONBOARD" so that ST7789 can be initialised without the backlight pin.
This will be useful for anyone using ST7789 without the rest of the Pico Explorer library, although it feels a little contrived.
Also switches ST7735 over to the common defines.
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>