from machine import Pin, ADC, PWM
from time import sleep, ticks_ms, ticks_diff
# 🎮 Game setup
score = 0
lastScoreTime = 0 # Track last time score was updated
cooldown = 1000 # Minimum time between scores in milliseconds
# 🛠️ Hardware configuration
servo1 = PWM(Pin(1))
servo2 = PWM(Pin(6))
servo1.freq(50)
servo2.freq(50)
potentiometer1 = ADC(Pin(26))
potentiometer2 = ADC(Pin(27))
Pin(20,Pin.IN,Pin.PULL_UP)
LDR = ADC(Pin(28)) # LDR connected via voltage divider to pin 28
buzzer = PWM(Pin(14)) # Buzzer on pin 14
# 🔊 Sound functions
def beep(numBeeps):
for _ in range(numBeeps):
buzzer.duty_u16(2000)
buzzer.freq(1000)
sleep(0.2)
buzzer.duty_u16(0)
sleep(0.1)
def winningSound():
print("🎉 Winner!")
beep(3)
for freq in range(1000, 2000, 100):
buzzer.freq(freq)
buzzer.duty_u16(3000)
sleep(0.1)
buzzer.duty_u16(0)
def reset():
global score
score = 0
beep(2)
print("🔄 Ready for new game")
# 🚀 Start the game
reset()
while True:
# 🎚️ Read potentiometers and control servos
servo1Value = int(3000 + potentiometer1.read_u16() * 4000 / 65536)
servo2Value = int(3000 + potentiometer2.read_u16() * 4000 / 65536)
servo1.duty_u16(servo1Value)
servo2.duty_u16(servo2Value)
# 🌞 Read LDR value
ldrValue = LDR.read_u16()
print("LDR value:", ldrValue)
# 🧠 Game logic with cooldown
currentTime = ticks_ms()
if ldrValue < 7400 and ticks_diff(currentTime, lastScoreTime) > cooldown:
score += 10
lastScoreTime = currentTime
buzzer.freq(score + 100)
buzzer.duty_u16(score + 1000)
print("Score:", score)
sleep(0.2)
buzzer.duty_u16(0)
if score >= 500:
winningSound()
reset()
else:
buzzer.duty_u16(0)
sleep(0.1)
Loading
pi-pico-w
pi-pico-w