From afd652bdabd7039d082c3a4e996dc54ac319b5f4 Mon Sep 17 00:00:00 2001 From: Hel Gibbons Date: Mon, 15 Jul 2024 15:23:22 +0100 Subject: [PATCH] Examples: update for Pico Display 2.8" --- .../examples/pico_display/balls_demo.py | 2 + .../examples/pico_display/basic_qrcode.py | 2 + .../examples/pico_display/button_test.py | 14 +++ .../examples/pico_display/coolvetica_rg.af | Bin 0 -> 6169 bytes .../pico_display/hello_world_bitmap.py | 26 ++++++ .../pico_display/hello_world_vector.py | 87 ++++++++++++++++++ .../examples/pico_display/next_sunday.af | Bin 0 -> 11925 bytes .../examples/pico_display/pride_stripes.py | 1 + micropython/examples/pico_display/rainbow.py | 48 +++++++--- .../examples/pico_display/rainbow_wheel.py | 38 ++++++++ micropython/examples/pico_display/ram_test.py | 46 +++------ .../examples/pico_display/spicy_soup.af | Bin 0 -> 11257 bytes .../examples/pico_display/starfield.py | 61 ++++++++++++ .../examples/pico_display/thermometer.py | 18 ++-- 14 files changed, 290 insertions(+), 53 deletions(-) create mode 100644 micropython/examples/pico_display/coolvetica_rg.af create mode 100644 micropython/examples/pico_display/hello_world_bitmap.py create mode 100644 micropython/examples/pico_display/hello_world_vector.py create mode 100644 micropython/examples/pico_display/next_sunday.af create mode 100644 micropython/examples/pico_display/rainbow_wheel.py create mode 100644 micropython/examples/pico_display/spicy_soup.af create mode 100644 micropython/examples/pico_display/starfield.py diff --git a/micropython/examples/pico_display/balls_demo.py b/micropython/examples/pico_display/balls_demo.py index 71c79a50..7b6ce682 100644 --- a/micropython/examples/pico_display/balls_demo.py +++ b/micropython/examples/pico_display/balls_demo.py @@ -1,3 +1,5 @@ +# If you have a Display Pack 2.0" or 2.8" use DISPLAY_PICO_DISPLAY_2 instead of DISPLAY_PICO_DISPLAY + import time import random from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY, PEN_P8 diff --git a/micropython/examples/pico_display/basic_qrcode.py b/micropython/examples/pico_display/basic_qrcode.py index 01025987..8183bcad 100644 --- a/micropython/examples/pico_display/basic_qrcode.py +++ b/micropython/examples/pico_display/basic_qrcode.py @@ -1,3 +1,5 @@ +# If you have a Display Pack 2.0" or 2.8" use DISPLAY_PICO_DISPLAY_2 instead of DISPLAY_PICO_DISPLAY + from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY import qrcode diff --git a/micropython/examples/pico_display/button_test.py b/micropython/examples/pico_display/button_test.py index d55d8efb..fe47ce08 100644 --- a/micropython/examples/pico_display/button_test.py +++ b/micropython/examples/pico_display/button_test.py @@ -1,8 +1,10 @@ # This example shows you a simple, non-interrupt way of reading Pico Display's buttons with a loop that checks to see if buttons are pressed. +# If you have a Display Pack 2.0" or 2.8" use DISPLAY_PICO_DISPLAY_2 instead of DISPLAY_PICO_DISPLAY import time from pimoroni import Button from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY, PEN_P4 +from pimoroni import RGBLED # We're only using a few colours so we can use a 4 bit/16 colour palette and save RAM! display = PicoGraphics(display=DISPLAY_PICO_DISPLAY, pen_type=PEN_P4, rotate=0) @@ -15,6 +17,12 @@ button_b = Button(13) button_x = Button(14) button_y = Button(15) +# Set up the RGB LED For Display Pack and Display Pack 2.0": +led = RGBLED(6, 7, 8) + +# For Display Pack 2.8" uncomment the line below and comment out the line above: +# led = RGBLED(26, 27, 28) + WHITE = display.create_pen(255, 255, 255) BLACK = display.create_pen(0, 0, 0) CYAN = display.create_pen(0, 255, 255) @@ -26,6 +34,7 @@ GREEN = display.create_pen(0, 255, 0) # sets up a handy function we can call to clear the screen def clear(): display.set_pen(BLACK) + led.set_rgb(0, 0, 0) display.clear() display.update() @@ -37,6 +46,7 @@ while True: if button_a.read(): # if a button press is detected then... clear() # clear to black display.set_pen(WHITE) # change the pen colour + led.set_rgb(255, 255, 255) # set the LED colour to match display.text("Button A pressed", 10, 10, 240, 4) # display some text on the screen display.update() # update the display time.sleep(1) # pause for a sec @@ -44,6 +54,7 @@ while True: elif button_b.read(): clear() display.set_pen(CYAN) + led.set_rgb(0, 255, 255) display.text("Button B pressed", 10, 10, 240, 4) display.update() time.sleep(1) @@ -51,6 +62,7 @@ while True: elif button_x.read(): clear() display.set_pen(MAGENTA) + led.set_rgb(255, 0, 255) display.text("Button X pressed", 10, 10, 240, 4) display.update() time.sleep(1) @@ -58,12 +70,14 @@ while True: elif button_y.read(): clear() display.set_pen(YELLOW) + led.set_rgb(255, 255, 0) display.text("Button Y pressed", 10, 10, 240, 4) display.update() time.sleep(1) clear() else: display.set_pen(GREEN) + led.set_rgb(0, 255, 0) display.text("Press any button!", 10, 10, 240, 4) display.update() time.sleep(0.1) # this number is how frequently the Pico checks for button presses diff --git a/micropython/examples/pico_display/coolvetica_rg.af b/micropython/examples/pico_display/coolvetica_rg.af new file mode 100644 index 0000000000000000000000000000000000000000..4a9d9ed3f50d9297b18d49e74f4e0f2e1f1b8dab GIT binary patch literal 6169 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 literal 0 HcmV?d00001 diff --git a/micropython/examples/pico_display/starfield.py b/micropython/examples/pico_display/starfield.py new file mode 100644 index 00000000..a314711e --- /dev/null +++ b/micropython/examples/pico_display/starfield.py @@ -0,0 +1,61 @@ +# Travel through a Windows 3.1-esque starfield, with stars growing as they get 'closer'. +# # If you have a Display Pack 2.0" or 2.8" use DISPLAY_PICO_DISPLAY_2 instead of DISPLAY_PICO_DISPLAY + +from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY +import random + +# Constants to play with +NUMBER_OF_STARS = 200 +TRAVEL_SPEED = 1.2 +STAR_GROWTH = 0.12 + +# Set up our display +graphics = PicoGraphics(display=DISPLAY_PICO_DISPLAY) + +WIDTH, HEIGHT = graphics.get_bounds() + +BLACK = graphics.create_pen(0, 0, 0) +WHITE = graphics.create_pen(255, 255, 255) + +stars = [] + + +def new_star(): + # Create a new star, with initial x, y, and size + # Initial x will fall between -WIDTH / 2 and +WIDTH / 2 and y between -HEIGHT/2 and +HEIGHT/2 + # These are relative values for now, treating (0, 0) as the centre of the screen. + star = [random.randint(0, WIDTH) - WIDTH // 2, random.randint(0, HEIGHT) - HEIGHT // 2, 0.5] + return star + + +for i in range(0, NUMBER_OF_STARS): + stars.append(new_star()) + +while True: + graphics.set_pen(BLACK) + graphics.clear() + graphics.set_pen(WHITE) + for i in range(0, NUMBER_OF_STARS): + # Load a star from the stars list + s = stars[i] + + # Update x + s[0] = s[0] * TRAVEL_SPEED + + # Update y + s[1] = s[1] * TRAVEL_SPEED + + if s[0] <= - WIDTH // 2 or s[0] >= WIDTH // 2 or s[1] <= - HEIGHT // 2 or s[1] >= HEIGHT // 2 or s[2] >= 5: + # This star has fallen off the screen (or rolled dead centre and grown too big!) + # Replace it with a new one + s = new_star() + + # Grow the star as it travels outward + s[2] += STAR_GROWTH + + # Save the updated star to the list + stars[i] = s + + # Draw star, adding offsets to our relative coordinates to allow for (0, 0) being in the top left corner. + graphics.circle(int(s[0]) + WIDTH // 2, int(s[1]) + HEIGHT // 2, int(s[2])) + graphics.update() diff --git a/micropython/examples/pico_display/thermometer.py b/micropython/examples/pico_display/thermometer.py index b3ffa0e5..cf831139 100644 --- a/micropython/examples/pico_display/thermometer.py +++ b/micropython/examples/pico_display/thermometer.py @@ -1,25 +1,31 @@ -# 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! +# This example takes the temperature from the Pico's onboard temperature sensor, and displays it on Pico Display Pack. +# It's based on the thermometer example in the "Getting Started with MicroPython on the Raspberry Pi Pico" book. import machine import time from pimoroni import RGBLED from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY -# set up the hardware +# set up the display and drawing constants display = PicoGraphics(display=DISPLAY_PICO_DISPLAY, rotate=0) -sensor_temp = machine.ADC(4) -led = RGBLED(6, 7, 8) # set the display backlight to 50% display.set_backlight(0.5) -# set up constants for drawing WIDTH, HEIGHT = display.get_bounds() BLACK = display.create_pen(0, 0, 0) WHITE = display.create_pen(255, 255, 255) +# set up the internal temperature sensor +sensor_temp = machine.ADC(4) + +# Set up the RGB LED For Display Pack and Display Pack 2.0": +led = RGBLED(6, 7, 8) + +# For Display Pack 2.8" uncomment the following line and comment out the line above: +# led = RGBLED(26, 27, 28) + conversion_factor = 3.3 / (65535) # used for calculating a temperature from the raw sensor reading temp_min = 10