diff --git a/micropython/examples/pico_display/rainbow.py b/micropython/examples/pico_display/rainbow.py new file mode 100644 index 00000000..72b353c3 --- /dev/null +++ b/micropython/examples/pico_display/rainbow.py @@ -0,0 +1,45 @@ +## This example borrows a CircuitPython hsv_to_rgb function to cycle through some rainbows on Pico Display's screen and RGB LED . If you're into rainbows, HSV (Hue, Saturation, Value) is very useful! + +import utime +import picodisplay as display + +# Set up and initialise Pico Display +buf = bytearray(display.get_width() * display.get_height() * 2) +display.init(buf) +display.set_backlight(0.8) + +# From CPython Lib/colorsys.py +def hsv_to_rgb(h, s, v): + if s == 0.0: + return v, v, v + i = int(h*6.0) + f = (h*6.0) - i + p = v*(1.0 - s) + q = v*(1.0 - s*f) + t = v*(1.0 - s*(1.0-f)) + i = i%6 + if i == 0: + return v, t, p + if i == 1: + return q, v, p + if i == 2: + return p, v, t + if i == 3: + return p, q, v + if i == 4: + return t, p, v + if i == 5: + return v, p, q + +h = 0 + +while True: + h += 1 + r, g, b = [int(255 * c) for c in hsv_to_rgb(h / 360.0, 1.0, 1.0)] # rainbow magic + display.set_led(r, g, b) # Set LED to a converted HSV value + display.set_pen(r, g, b) # Set pen to a converted HSV value + display.clear() # Fill the screen with the colour + display.set_pen(0, 0, 0) # Set pen to black + display.text("pico disco!", 10, 10, 240, 6) # Add some text + display.update() # Update the display + utime.sleep(1.0 / 60) \ No newline at end of file diff --git a/micropython/examples/pico_display/thermometer.py b/micropython/examples/pico_display/thermometer.py new file mode 100644 index 00000000..22ca0ae8 --- /dev/null +++ b/micropython/examples/pico_display/thermometer.py @@ -0,0 +1,66 @@ +# This example takes the temperature from the Pico's onboard temperature sensor, and displays it on Pico Display Pack, along with a little pixelly graph. +# It's based on the thermometer example in the "Getting Started with MicroPython on the Raspberry Pi Pico" book, which is a great read if you're a beginner! + +import machine +import utime + +# Pico Display boilerplate +import picodisplay as display +width = display.get_width() +height = display.get_height() +display_buffer = bytearray(width * height * 2) +display.init(display_buffer) + +# reads from Pico's temp sensor and converts it into a more manageable number +sensor_temp = machine.ADC(4) +conversion_factor = 3.3 / (65535) + +# Set the display backlight to 50% +display.set_backlight(0.5) + +i = 0 + +while True: + # the following two lines do some maths to convert the number from the temp sensor into celsius + reading = sensor_temp.read_u16() * conversion_factor + temperature = round(27 - (reading - 0.706) / 0.001721) + + # this if statement clears the display once the graph reaches the right hand side of the display + if i >= (width + 1): + i = 0 + display.set_pen(0, 0, 0) + display.clear() + + # chooses a pen colour based on the temperature + display.set_pen(0, 255, 0) + if temperature > 20: + display.set_pen(255, 0, 0) + if temperature < 13: + display.set_pen(0, 0, 255) + + # heck lets also set the LED to match + display.set_led(0, 255, 0) + if temperature > 20: + display.set_led(255, 0, 0) + if temperature < 13: + display.set_led(0, 0, 255) + + # draws the reading as a tall, thin rectangle + display.rectangle(i, height - (temperature * 4), 5, height) + + # draws a white background for the text + display.set_pen(255, 255, 255) + display.rectangle(1, 1, 50, 25) + + # writes the reading as text in the white rectangle + display.set_pen(0, 0, 0) + display.text("{:.0f}".format(temperature) + "c", 3, 3, 0, 3) + + # time to update the display + display.update() + + # waits for 5 seconds + utime.sleep(5) + + # the next tall thin rectangle needs to be drawn 5 pixels to the right of the last one + i += 5