The script is very useful if you want to display humidity and temperature without scrolling.

The

*show_number*function accepts the number to be displayed and RGB values of the color to be used.

Here is the full script.

from sense_hat import SenseHat import time OFFSET_LEFT = 1 OFFSET_TOP = 2 NUMS =[1,1,1,1,0,1,1,0,1,1,0,1,1,1,1, # 0 0,1,0,0,1,0,0,1,0,0,1,0,0,1,0, # 1 1,1,1,0,0,1,0,1,0,1,0,0,1,1,1, # 2 1,1,1,0,0,1,1,1,1,0,0,1,1,1,1, # 3 1,0,0,1,0,1,1,1,1,0,0,1,0,0,1, # 4 1,1,1,1,0,0,1,1,1,0,0,1,1,1,1, # 5 1,1,1,1,0,0,1,1,1,1,0,1,1,1,1, # 6 1,1,1,0,0,1,0,1,0,1,0,0,1,0,0, # 7 1,1,1,1,0,1,1,1,1,1,0,1,1,1,1, # 8 1,1,1,1,0,1,1,1,1,0,0,1,0,0,1] # 9 # Displays a single digit (0-9) def show_digit(val, xd, yd, r, g, b): offset = val * 15 for p in range(offset, offset + 15): xt = p % 3 yt = (p-offset) // 3 sense.set_pixel(xt+xd, yt+yd, r*NUMS[p], g*NUMS[p], b*NUMS[p]) # Displays a two-digits positive number (0-99) def show_number(val, r, g, b): abs_val = abs(val) tens = abs_val // 10 units = abs_val % 10 if (abs_val > 9): show_digit(tens, OFFSET_LEFT, OFFSET_TOP, r, g, b) show_digit(units, OFFSET_LEFT+4, OFFSET_TOP, r, g, b) ################################################################################ # MAIN sense = SenseHat() sense.clear() for i in range(0, 100): show_number(i, 200, 0, 60) time.sleep(0.2) sense.clear()

This is amazing! Thank you so much for creating this. I was spinning my wheels for a little while trying to come up with my own solution but this looks great!

ReplyDeleteThanks again!

Dwayne

This comment has been removed by the author.

ReplyDeleteNew to the rpi and python. I'm at a loss as to how this is writing the numbers via the loop in show_digit and how NUMS is used. Any chance of some pseudocode to help in understanding?

ReplyDeleteDisplays digits in 3x5 grid

DeleteOFFSET_LEFT and OFF_SET_TOP provide padding to centre on 8x8 grid

Each digit 0-9 is represented in NUM list as 15 bits - a stack of five 3 bit sets

Zero is 111, 101, 101, 101, 111

Five is 111, 100, 111 001, 111

If you stack e.g five and replace the 0s with spaces, you get

111

1

111

1

111

def show_digit is responsible for drawing a single digit

- offset finds where this digit starts in NUMS list

- the for loop provides an index into NUMs for each of the 15 required bits

- xt/yt find the x/y position to plot this digit

- set_pixel plots the digit at the offsetted x/y position

- the r/g/b*NUMS[p] trick results in a zero or the selected colour

def_show_number is responsible for showing both digits

- the first digit is plotted according to OFFSET_LEFT, OFFSET_RIGHT

- the second digit is plotted 4 points to the right of that