这是我的代码:
import create
robot = create.Create(3)
robot.toFullMode()
robot.setSong(0,[(36,16),(36,16),(38,32),(36,32),(53,32),(52,32),\
(36,16),(36,16),(38,32),(36,32),(55,32),(41,32),\
(36,16),(36,16),(48,32),(33,32)])
robot.setSong(1,[(53,32),(40,32),(38,32),(34,16),(34,16),\
(33,32),(41,32),(43,32),(41,32)])
robot.playSongNumber(0)
robot.playSongNumber(1)
第一首歌播放,但第二首歌赢了......为什么会有任何想法?
这是使用create.py
Python接口编码到iRobot Create:
答案 0 :(得分:1)
playSongNumber
检查当前是否正在播放歌曲,并且在完成第一首歌曲播放之前,它将忽略新歌曲。您可以通过查询song-playing?
传感器(编号37)来检查歌曲是否完成。
Create open interface document位于:
http://www.irobot.com/filelibrary/pdfs/hrd/create/create%20open%20interface_v2.pdf
从该文件:
播放歌曲
此命令可让您选择一个 使用歌曲添加到iRobot创建的歌曲播放的歌曲 命令。您必须使用乐曲将一首或多首歌曲添加到“创建” 命令以使Play命令起作用。此外,这个命令也可以 如果一首歌已在播放,则无效。等到当前正在播放 歌曲在发送此命令之前完成。请注意“歌曲播放” 传感器数据包可用于检查Create是否已准备好接受 这个命令。
歌曲播放
数据包ID:37数据字节:1个无符号
OI的状态 歌曲播放器被退回。 1 =正在播放的OI歌曲; 0 = OI歌曲 不玩了。
答案 1 :(得分:0)
没有看到任何文档或源代码,这是一个疯狂的猜测,但是......
我打赌playSongNumber
函数只是向机器人发送播放命令,而不是等待它完成,当你发送一个播放命令时,它已经播放了一些东西,它无视你。
如果我是对的,那么希望API提供一些等待它完成的方法。如果它没有提供,但它确实提供了一种轮询当前状态的方法,你可以在一个循环中做到这一点(在每次检查之间暂时休息),直到它完成。如果它甚至没有提供,那么你必须通过计算音符的数量来计算歌曲需要多长时间(或者添加持续时间,如果每个对中的一个数字是持续时间)和睡了那么久。