1- import ssd1327
21import random
3- from pyb import Timer
2+ from time import sleep_ms , ticks_diff , ticks_ms
3+
4+ import ssd1327
45from bq27441 import BQ27441
5- from time import sleep_ms , ticks_ms , ticks_diff
66from machine import I2C , SPI , Pin
77from mcp23009e import MCP23009E
8- from apds9960 import uAPDS9960 as APDS9960
98from mcp23009e .const import (
109 MCP23009_BTN_DOWN ,
1110 MCP23009_BTN_LEFT ,
1615 MCP23009_LOGIC_LOW ,
1716 MCP23009_PULLUP ,
1817)
18+ from pyb import Timer
1919
2020# setup screen
2121spi = SPI (1 )
2424cs = Pin ("CS_DISPLAY" )
2525display = ssd1327 .WS_OLED_128X128_SPI (spi , dc , res , cs )
2626
27- #setup mcp23009e
27+ # setup mcp23009e
2828i2c = I2C (1 )
2929reset_expander = Pin ("RST_EXPANDER" , Pin .OUT )
3030mcp = MCP23009E (i2c , address = MCP23009_I2C_ADDR , reset_pin = reset_expander )
3131
32- #setup battery
32+ # setup battery
3333fg = BQ27441 (i2c )
3434
35- #sound
35+ # sound
3636buzzer_tim = Timer (1 , freq = 1000 )
3737buzzer_ch = buzzer_tim .channel (4 , Timer .PWM , pin = Pin ("SPEAKER" ))
3838buzzer_ch .pulse_width_percent (0 )
3939
40- # D-PAD button mapping
40+ # D-PAD button mapping
4141BUTTONS = {
4242 MCP23009_BTN_UP : "UP" ,
4343 MCP23009_BTN_DOWN : "DOWN" ,
4848ACTION = ["food" , "play" ]
4949NEED = ["I'm bored" , "i'm hungry" ]
5050
51- #position of button
51+ # position of button
5252X0 = 35
5353ITEM_Y = 100
5454ITEM_SPACING = 14
5555
56- #sprite
56+ # sprite
5757
5858SPRITE_BASE = [
5959 [ 0 , 0 ,15 ,15 , 0 , 0 , 0 , 0 , 0 ,15 ,15 , 0 , 0 ],
163163 [ 0 , 0 , 0 , 0 , 0 , 0 , 0 ,15 ,15 ,15 ,15 , 0 , 0 , 0 , 0 , 0 , 0 ],
164164]
165165
166- #------------------------------------SCREEN----------------------------------------------
166+ # ------------------------------------SCREEN----------------------------------------------
167167
168168def setup_buttons ():
169169 """Configure all D-PAD buttons as inputs with pull-ups."""
@@ -188,16 +188,15 @@ def draw_character(cx, cy, scale, sprite):
188188 for dy in range (scale ):
189189 for dx in range (scale ):
190190 fb .pixel (cx + x * scale + dx , cy + y * scale + dy , color )
191-
192-
193-
191+
192+
194193def creat_screen (selected_index , need , sprite , charge ):
195194 """displays the screen"""
196195 display .fill (0 )
197196 display .text (need , 25 , 20 )
198197 display .text (str (charge ), 50 , 10 )
199198
200- if charge > 70 :
199+ if charge > 70 :
201200 scale = 1
202201 x = 55
203202 y = 60
@@ -220,18 +219,18 @@ def creat_screen(selected_index, need, sprite, charge):
220219 display .show ()
221220
222221def creat_game_over_screen ():
223- display .fill (0 )
222+ display .fill (0 )
224223 display .text ("Game-Over" ,25 , 20 )
225224 draw_character (35 , 45 , 3 , SPRITE_DEAD )
226225 display .show ()
227- #------------------------------------gameplay----------------------------------------------
226+ # ------------------------------------gameplay----------------------------------------------
228227
229228def action_check (selected_index , need ,win ):
230229 name = ACTION [selected_index ]
231230 if need == "I'm bored" and name == "play" :
232231 win = True
233232 return win
234- if need == "i'm hungry" and name == "food" :
233+ if need == "i'm hungry" and name == "food" :
235234 win = True
236235 return win
237236 else :
@@ -241,9 +240,9 @@ def action_check(selected_index, need,win):
241240def soud_effect (name ):
242241 sound = {
243242 "start" : [
244- (523 , 120 ),
245- (659 , 120 ),
246- (784 , 120 ),
243+ (523 , 120 ),
244+ (659 , 120 ),
245+ (784 , 120 ),
247246 (1047 , 400 ),
248247 ],
249248
@@ -285,17 +284,17 @@ def soud_effect(name):
285284 buzzer_ch .pulse_width_percent (10 )
286285 sleep_ms (duration_ms )
287286 buzzer_ch .pulse_width_percent (0 )
288- sleep_ms (30 )
287+ sleep_ms (30 )
289288
290289
291- #------------------------------------main----------------------------------------------
290+ # ------------------------------------main----------------------------------------------
292291
293292def main ():
294- setup_buttons (
295- soud_effect ("start" )
293+ setup_buttons ()
294+ # soud_effect("start")
296295 is_alive = True
297296 nb_tour = 0
298-
297+
299298 while is_alive :
300299 selected_index = 0
301300 charge = fg .state_of_charge ()
@@ -308,45 +307,39 @@ def main():
308307 if need == "I'm bored" :
309308 sprite = SPRITE_SAD
310309 soud_effect ("bored" )
311- nb_tour = nb_tour + 1
312310 else :
313311 sprite = SPRITE_HUNGRY
314312 soud_effect ("hungry" )
315- nb_tour = nb_tour + 1
316313
317314 creat_screen (selected_index , need , sprite , charge )
318315
319316 start = ticks_ms ()
320317 win = None
321- make_action = False
322318
323319 while True :
324320 timer = ticks_diff (ticks_ms (), start )
325321 if timer >= 5000 :
326- break
322+ break
327323
328324
329325 button = wait_for_button ()
330- if button == "UP" :
326+ if button == "UP" :
331327 selected_index = (selected_index - 1 )% len (ACTION )
332328 creat_screen (selected_index , need , sprite , charge )
333- elif button == "DOWN" :
329+ elif button == "DOWN" :
334330 selected_index = (selected_index + 1 ) % len (ACTION )
335331 creat_screen (selected_index , need , sprite , charge )
336- elif button == "LEFT" :
332+ elif button == "LEFT" :
337333 win = action_check (selected_index , need , win )
338- make_action = True
339- break
334+ break
340335 sleep_ms (20 )
341336
342337 if win :
343338 creat_screen (selected_index , need , SPRITE_HAPPY , charge )
344339 soud_effect ("success" )
345- nb_tour = nb_tour + 1
346340 else :
347341 creat_screen (selected_index , need , SPRITE_HANGRY , charge )
348342 soud_effect ("fail" )
349- nb_tour = nb_tour + 1
350343 sleep_ms (1000 )
351344
352345 if charge < 10 :
0 commit comments