from machine import Pin, I2C, PWM
import time
import random
from ssd1306 import SSD1306_I2C
import ds1307
scl_pin = 27
sda_pin = 26
rtc_scl_pin = 9
rtc_sda_pin = 8
pinEnabled = Pin(20, Pin.OUT, value=0)
pinStep = Pin(19, Pin.OUT)
pinDirection = Pin(18, Pin.OUT)
buttons = [Pin(0, Pin.IN, Pin.PULL_DOWN),
Pin(1, Pin.IN, Pin.PULL_DOWN),
Pin(2, Pin.IN, Pin.PULL_DOWN),
Pin(3, Pin.IN, Pin.PULL_DOWN)]
points = [0,0,0,0]
def init_i2c(scl_pin, sda_pin):
i2c_dev = I2C(1, scl=Pin(scl_pin), sda=Pin(sda_pin), freq=200000)
i2c_addr = [hex(ii) for ii in i2c_dev.scan()]
if not i2c_addr:
print('No I2C Display Found')
sys.exit()
else:
print("I2C Address : {}".format(i2c_addr[0]))
print("I2C Configuration: {}".format(i2c_dev))
return i2c_dev
def display_text(oled, text, x, y):
oled.fill(0)
oled.text(text, x, y)
oled.show()
def rotate_servo_random(rtc):
random.seed(rtc.datetime[5])
rotations = random.randint(5, 25)
print(rotations)
pinDirection.on()
for _ in range(rotations * 50):
pinStep.on()
time.sleep(0.001)
pinStep.off()
time.sleep(0.001)
player = rotations%4
return player
def gameStart(oled, rtc, buttons):
oled.fill(0)
oled.text("Welcome", 30, 30)
oled.show()
time.sleep(1)
oled.fill(0)
oled.text("A random player",5, 10)
oled.text("will be given",5, 20)
oled.text("10 seconds to",5, 30)
oled.text("answer a",5, 40)
oled.text("question",5,50)
oled.show()
time.sleep(7)
oled.fill(0)
oled.text("If they answer",5,5)
oled.text("truthfully,",5,15)
oled.text("they get a point",5,25)
oled.text("otherwise, all",5,35)
oled.text("other players",5,45)
oled.text("get a point",5,55)
oled.show()
time.sleep(7)
oled.fill(0)
oled.text("Let's Begin", 20, 30)
oled.show()
time.sleep(2)
player = rotate_servo_random(rtc)
game_function(oled,rtc,buttons,player)
def game_function(oled, rtc, buttons, player):
question = random.choice(["question1","question2"])
oled.fill(0)
oled.text(question,5,5)
oled.text("10",64,55)
oled.show()
num = 10
for x in range(10):
num = num - 1
oled.fill_rect(20,40,128,30,0)
oled.text(str(num),64,55)
oled.show()
time.sleep(1)
for _ in range(100):
pinStep.on()
time.sleep(0.001)
pinStep.off()
time.sleep(0.001)
decider = 0
decider = decider + 2
if decider > 3:
decider = decider - 4
num = 10
decision = False
for x in range(10):
num = num - 1
oled.fill_rect(0,30,128,40,0)
if decision:
oled.text("Yeah", 60, 40)
else:
oled.text("Nah", 60, 40)
oled.text(str(num),64,55)
oled.show()
print(buttons[decider].value())
if buttons[decider].value() == 1:
decision = not decision
time.sleep(1)
if decision:
add_point(player)
else:
add_all(player)
def add_point(player):
points[player] = points[player] + 1
print(points)
def add_all(player):
for x in range(4):
points[x] = points[x] + 1
points[player] = points[player] - 1
print(points)
def main():
i2c_dev = init_i2c(scl_pin, sda_pin)
oled = SSD1306_I2C(128, 64, i2c_dev)
i2c_rtc = I2C(0, scl=Pin(rtc_scl_pin), sda=Pin(rtc_sda_pin), freq=100000)
ds1307rtc = ds1307.DS1307(i2c_rtc, 0x68)
gameStart(oled, ds1307rtc, buttons)
main()