Here’s a simple dice (ok, die) project for the Raspberry Pi SenseHAT – it senses a shake by measuring the G-force on the accelerometer. If the G-force goes above 1.4, it generates a random number between 1 and 6 and displays a dice (die) pattern. I chose 1.4 so it’s not too sensitive – you have to give it a decent shake, and I put in a small sleep statement so it doesn’t do multiple rolls in one go.
It’s inspired by this BBC Microbit project – but then I’m still waiting for my own Microbit…
Here’s the Python code:
from sense_hat import SenseHat import time import random sense = SenseHat() sense.clear() sense.show_message("Shake to roll!") b = [0, 0, 0] g = [0, 255, 0] r = [255, 0, 0] one = [ b,b,b,b,b,b,b,b, b,b,b,b,b,b,b,b, b,b,b,b,b,b,b,b, b,b,b,g,g,b,b,b, b,b,b,g,g,b,b,b, b,b,b,b,b,b,b,b, b,b,b,b,b,b,b,b, b,b,b,b,b,b,b,b, ] two = [ b,b,b,b,b,b,b,b, b,g,g,b,b,b,b,b, b,g,g,b,b,b,b,b, b,b,b,b,b,b,b,b, b,b,b,b,b,b,b,b, b,b,b,b,g,g,b,b, b,b,b,b,g,g,b,b, b,b,b,b,b,b,b,b, ] three = [ g,g,b,b,b,b,b,b, g,g,b,b,b,b,b,b, b,b,b,b,b,b,b,b, b,b,b,g,g,b,b,b, b,b,b,g,g,b,b,b, b,b,b,b,b,b,b,b, b,b,b,b,b,b,g,g, b,b,b,b,b,b,g,g, ] four = [ b,b,b,b,b,b,b,b, b,g,g,b,b,g,g,b, b,g,g,b,b,g,g,b, b,b,b,b,b,b,b,b, b,b,b,b,b,b,b,b, b,g,g,b,b,g,g,b, b,g,g,b,b,g,g,b, b,b,b,b,b,b,b,b, ] five = [ g,g,b,b,b,b,g,g, g,g,b,b,b,b,g,g, b,b,b,b,b,b,b,b, b,b,b,g,g,b,b,b, b,b,b,g,g,b,b,b, b,b,b,b,b,b,b,b, g,g,b,b,b,b,g,g, g,g,b,b,b,b,g,g, ] six = [ r,r,b,b,b,b,r,r, r,r,b,b,b,b,r,r, b,b,b,b,b,b,b,b, r,r,b,b,b,b,r,r, r,r,b,b,b,b,r,r, b,b,b,b,b,b,b,b, r,r,b,b,b,b,r,r, r,r,b,b,b,b,r,r, ] def roll_dice(): r = random.randint(1,6) if r == 1: sense.set_pixels(one) elif r == 2: sense.set_pixels(two) elif r == 3: sense.set_pixels(three) elif r == 4: sense.set_pixels(four) elif r == 5: sense.set_pixels(five) elif r == 6: sense.set_pixels(six) while True: x, y, z = sense.get_accelerometer_raw().values() x = abs(x) y = abs(y) z = abs(z) if x > 1.4 or y > 1.4 or z > 1.4: roll_dice() time.sleep(1)