Trong dự án xBot này, chúng tay hãy thử viết chương trình cho xBot phát ra bài hát quen thuộc là “Kìa con bướm vàng” cùng với thực hành cho robot nhảy múa nhé!
Các nốt nhạc đầu tiên của bài hát này là:
Trong giai điệu trên, bạn thấy có 2 đoạn nhạc được lặp lại 2 lần. Ta sẽ dùng đến câu lệnh lặp lại để rút gọn chương trình nhé!
Sau khi lập trình xong, chương trình sẽ như sau:
for count in range(2): speaker.play(['C4:1'], wait=True) speaker.play(['D4:1'], wait=True) speaker.play(['E4:1'], wait=True) speaker.play(['C4:1'], wait=True) for count2 in range(2): speaker.play(['E4:1'], wait=True) speaker.play(['F4:1'], wait=True) speaker.play(['G5:1'], wait=True)
Chúng ta cần các nốt nhạc được phát theo thứ tự, vì vậy trong các dòng lệnh ta truyền vào tham số wait = True để chờ nốt nhạc trước phát xong mới thực hiện phát tiếp nốt nhạc tiếp theo.
Trong chương trình trên, có một điều khá khó chịu là thiếu thời gian nghỉ giữa các giai điệu, khiến bài hát được phát liên tục. Liệu có cách nào để chèn một nhịp nghỉ giữa các giai điệu của bài nhạc không?
Để giải quyết vấn đề này, ta sẽ dùng thêm lệnh sleep để chương trình tạm dừng. Hãy thử chèn thêm dòng lệnh time.sleep(0.25) như dưới đây và thử lại nhé.
for count in range(2): speaker.play(['C4:1'], wait=True) speaker.play(['D4:1'], wait=True) speaker.play(['E4:1'], wait=True) speaker.play(['C4:1'], wait=True) time.sleep(0.25) for count2 in range(2): speaker.play(['E4:1'], wait=True) speaker.play(['F4:1'], wait=True) speaker.play(['G5:1'], wait=True) time.sleep(0.25)
Bạn có thể tham khảo một kiểu nhảy múa mà xBot có sẵn, bằng cách nhấn vào nút Nhảy múa trong giao diện điều khiển của xBot (trên OhStem App – phần mềm đã được giới thiệu ở bài trước)
Bây giờ, chúng ta hãy cùng viết một chương trình để xBot nhảy múa giống như vậy nhé! xBot sẽ thực hiện như sau:
xBot vừa di chuyển vừa phát bài nhạc “WHEELS_ON_BUS”, đồng thời liên tục đổi màu đèn LED RGB. Cụ thể về cách di chuyển của xBot:
Chương trình code python lúc này sẽ như sau:
speaker.play(BIRTHDAY) for count in range(4): robot.forward(50,0.5) led_onboard.show(1, hex_to_rgb('#0000ff')) led_onboard.show(2, hex_to_rgb('#ffffff')) robot.backward(50,0.5) led_onboard.show(1, hex_to_rgb('#ff0000')) led_onboard.show(2, hex_to_rgb('#ffff00')) for count2 in range(4): robot.turn_left(50,0.5) robot.turn_right(50,1) led_onboard.show(1, hex_to_rgb('#4b0082')) led_onboard.show(2, hex_to_rgb('#ffffff')) robot.turn_left(50,0.5) for count3 in range(4): robot.forward(50,0.5) led_onboard.show(1, hex_to_rgb('#00ff00')) led_onboard.show(2, hex_to_rgb('#ffa500')) robot.backward(50,0.5) led_onboard.show(1, hex_to_rgb('#ff0000')) led_onboard.show(2, hex_to_rgb('#0000ff')) robot.turn_left(50,0.5) robot.turn_right(50,1) led_onboard.show(1, hex_to_rgb('#ffff00')) led_onboard.show(2, hex_to_rgb('#ffffff')) robot.turn_left(50,0.5)