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
the python scrip just scrolls from 1 to 100 and doesn't seem to show the actual temperature??
ReplyDeleteThis comment has been removed by the author.
Delete