Noisy borders

Hi,

I just got the pico display 2.8 and I have been running some of the demo scripts in micropython using the firmware from GitHub - pimoroni/pimoroni-pico-rp2350: MicroPython builds for Pimoroni Pico 2 / RP2350 boards. Every demo seems to end up with this uninitialized border around roughly half of the screen. After a little bit of testing it seems like resetting the screen to some solid color and then running the demo script again will result in that fill color around the border instead of the noisy pixels in this example.

What might be causing this border behavior and why is it happening out of the box like this?

If you have a Display Pack 2.0" or 2.8" use DISPLAY_PICO_DISPLAY_2 instead of DISPLAY_PICO_DISPLAY

Did you do the above?

import time
import random
from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY_2, PEN_P8
from pimoroni import RGBLED, Button

display = PicoGraphics(display=DISPLAY_PICO_DISPLAY_2, pen_type=PEN_P8)
display.set_backlight(1.0)

WIDTH, HEIGHT = display.get_bounds()

led = RGBLED(26, 27, 28)
led.set_rgb(0, 0, 0)

from machine import Pin

button_a = Pin(12, Pin.IN, Pin.PULL_UP)
button_b = Pin(13, Pin.IN, Pin.PULL_UP)
button_x = Pin(14, Pin.IN, Pin.PULL_UP)
button_y = Pin(15, Pin.IN, Pin.PULL_UP)


# We're creating 100 balls with their own individual colour and 1 BG colour
# for a total of 101 colours, which will all fit in the custom 256 entry palette!


class Ball:
    def __init__(self, x, y, r, dx, dy, pen):
        self.x = x
        self.y = y
        self.r = r
        self.dx = dx
        self.dy = dy
        self.pen = pen


# initialise shapes
balls = []
for i in range(0, 100):
    r = random.randint(0, 10) + 3
    balls.append(
        Ball(
            random.randint(r, r + (WIDTH - 2 * r)),
            random.randint(r, r + (HEIGHT - 2 * r)),
            r,
            (14 - r) / 2,
            (14 - r) / 2,
            display.create_pen(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
        )
    )

BG = display.create_pen(40, 40, 40)

while True:
    
    if button_a.value() == 0:
        led.set_rgb(255, 0, 0)
    elif button_b.value() == 0:
        led.set_rgb(0, 255, 0)
    elif button_x.value() == 0:
        led.set_rgb(0, 0, 0)
    elif button_y.value() == 0:
        led.set_rgb(0, 0, 255)
    else:
        display.set_pen(BG)
        display.clear()        
    
        for ball in balls:
            ball.x += ball.dx
            ball.y += ball.dy

            xmax = WIDTH - ball.r
            xmin = ball.r
            ymax = HEIGHT - ball.r
            ymin = ball.r

            if ball.x < xmin or ball.x > xmax:
                ball.dx *= -1

            if ball.y < ymin or ball.y > ymax:
                ball.dy *= -1

            display.set_pen(ball.pen)
            display.circle(int(ball.x), int(ball.y), int(ball.r))

        display.update()
        time.sleep(0.01)

OMG, it was literally the first line of the script. Thank you.

1 Like

It’s an easy mistake to make, easy fix though. ;)