Python code

import time

from adafruit_circuitplayground import cp

# Function map_range from library simpleio.
def map_range(
    x: float, in_min: float, in_max: float, out_min: float, out_max: float
) -> float:
    """
    Maps a number from one range to another.
    Note: This implementation handles values < in_min differently than arduino's map function does.

    :return: Returns value mapped to new range
    :rtype: float
    """
    in_range = in_max - in_min
    in_delta = x - in_min
    if in_range != 0:
        mapped = in_delta / in_range
    elif in_delta != 0:
        mapped = in_delta
    else:
        mapped = 0.5
    mapped *= out_max - out_min
    mapped += out_min
    if out_min <= out_max:
        return max(min(mapped, out_max), out_min)
    return min(max(mapped, out_max), out_min)

while True:
    # If button A is pressed, all NeoPixels are turned off.
    if cp.button_a:
        cp.pixels.fill((0, 0, 0))

    # If button B is pressed, the color will be detected.
    if cp.button_b:
        # Make sure that all NeoPixels are turned off.
        cp.pixels.fill((0, 0, 0))
        time.sleep(0.1)

        # Get red value.
        cp.pixels[1] = (255, 0, 0)
        red = cp.light
        cp.pixels.fill((0, 0, 0))
        time.sleep(0.1)

        # Get green value.
        cp.pixels[1] = (0, 255, 0)
        green = cp.light
        cp.pixels.fill((0, 0, 0))
        time.sleep(0.1)

        # Get blue value.
        cp.pixels[1] = (0, 0, 255)
        blue = cp.light
        cp.pixels.fill((0, 0, 0))
        time.sleep(0.1)

        # Determine the lowest and highest light readings.
        minimum = min(red, green, blue)
        maximum = max(red, green, blue)

        # Map light from between minimum and maximum reading to 0-255.
        red   = int(map_range(red,   minimum, maximum, 0, 255))
        green = int(map_range(green, minimum, maximum, 0, 255))
        blue  = int(map_range(blue,  minimum, maximum, 0, 255))

        # Reduce the range of detected colors. 
        if red < 30:
            red = 0
        if green < 30:
            green = 0
        if blue < 30:
            blue = 0

        # Depending on the switch, write to
        # * the serial console (if True, i.e. left), or to
        # * the CircuitPython storage (if False, i.e. right).
        if cp.switch:
            # Distinguish between a good reading and a bad reading.
            if maximum - minimum <= 30:
                cp.pixels.fill((0, 0, 0))
            else:
                cp.pixels.fill((red, green, blue))   
                print( "Output RGB is (", red, ",", green, ",", blue, ")")
                # Print the red, green and blue values to match the color lines on the Mu plotter.
                # The orange line represents red.
                print( (blue, green, red) )
        else:
            f = open("rgb.csv", "a")
            f.write(repr(red) + "," + repr(green) + "," + repr(blue) + "\n")
            f.close()
import storage

from adafruit_circuitplayground import cp

storage.remount("/", readonly=cp.switch)