From 8bb17087d9b196e23c73eaa3262a32b0e86dc396 Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Wed, 26 Jul 2023 13:52:17 +0100 Subject: [PATCH] AS7343: Tufty 2040 spectrometer example. --- .../breakout_as7343/tufty_spectrometer.py | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 micropython/examples/breakout_as7343/tufty_spectrometer.py diff --git a/micropython/examples/breakout_as7343/tufty_spectrometer.py b/micropython/examples/breakout_as7343/tufty_spectrometer.py new file mode 100644 index 00000000..affcd493 --- /dev/null +++ b/micropython/examples/breakout_as7343/tufty_spectrometer.py @@ -0,0 +1,97 @@ +from picographics import PicoGraphics, DISPLAY_TUFTY_2040, PEN_P4 +from breakout_as7343 import BreakoutAS7343 +from pimoroni_i2c import PimoroniI2C + + +display = PicoGraphics(DISPLAY_TUFTY_2040, pen_type=PEN_P4, rotate=90) + +WIDTH, HEIGHT = display.get_bounds() + +BLACK = display.create_pen(0, 0, 0) + +FZ = display.create_pen(0, 0, 128) +FY = display.create_pen(0, 255, 0) +FXL = display.create_pen(255, 128, 0) +NIR = display.create_pen(128, 0, 0) +F2 = display.create_pen(128, 0, 128) +F3 = display.create_pen(0, 0, 255) +F4 = display.create_pen(0, 128, 255) +F6 = display.create_pen(128, 64, 0) + +F1 = display.create_pen(196, 0, 196) +F5 = display.create_pen(64, 255, 64) +F7 = display.create_pen(255, 0, 0) +F8 = display.create_pen(196, 0, 0) + +WHITE = display.create_pen(255, 255, 255) + +i2c = PimoroniI2C(sda=4, scl=5) +as7343 = BreakoutAS7343(i2c) + +as7343.set_channels(18) +as7343.set_gain(1024) +as7343.set_measurement_time(33) # Roughly 30fps at 16ms/measurement +as7343.set_integration_time(27800) + +as7343.set_illumination_current(4) +as7343.set_illumination_led(True) + + +BAR_WIDTH = 18 +BAR_SPACING = 4 +MARGIN = display.measure_text("NIR") + 2 +BAR_HEIGHT = WIDTH - MARGIN + +OFFSET_LEFT = int((HEIGHT - ((BAR_WIDTH + BAR_SPACING) * 12)) / 2) + +# Satrting max values for auto-ranging +# From figure 8 of the datasheet +MAX_VALUES = [ + 2711, + 4684, + 5970, + 13226, + 2371, + 962, + 3926, + 4170, + 7760, + 1967, + 6774, + 1166 +] + +LABELS = [ + "FZ", + "FY", + "FXL", + "NIR", + "F2", + "F3", + "F4", + "F6", + "F1", + "F5", + "F7", + "F8" +] + + +while True: + display.set_pen(0) + display.clear() + readings = as7343.read() + for i, reading in enumerate(readings): + MAX_VALUES[i] = max(reading, MAX_VALUES[i]) + scaled = int(reading / MAX_VALUES[i] * BAR_HEIGHT) + + y = i * (BAR_WIDTH + BAR_SPACING) + y += OFFSET_LEFT + + display.set_pen(i + 1) + display.rectangle(MARGIN, y, scaled, BAR_WIDTH) + + display.set_pen(WHITE) + display.text(LABELS[i], 0, y + 1) + + display.update()