0

这是我的代码:

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.pyiRobot Create 的 Python 接口编码的:

4

2 回答 2

1

playSongNumber检查一首歌曲当前是否正在播放,它会忽略新歌曲,直到第一首歌曲播放完毕。song-playing?您可以通过轮询传感器(编号 37)检查歌曲是否完成。

创建开放接口文档位于此处:

http://www.irobot.com/filelibrary/pdfs/hrd/create/create%20open%20interface_v2.pdf

从该文件中:

播放歌曲

此命令可让您从使用歌曲命令添加到 iRobot Create 的歌曲中选择要播放的歌曲。您必须使用 Song 命令将一首或多首歌曲添加到 Create 才能使 Play 命令起作用。此外,如果歌曲已经在播放,则此命令不起作用。等到当前播放的歌曲完成后再发送此命令。请注意,“歌曲播放”传感器数据包可用于检查 Create 是否准备好接受此命令。

歌曲播放

数据包 ID:37 数据字节:1 无符号

返回 OI 歌曲播放器的状态。1 = 当前播放的 OI 歌曲;0 = OI 歌曲未播放。

于 2014-12-08T20:16:27.533 回答
0

没有看到任何文档或源代码,这是一个疯狂的猜测,但是……</p>

我敢打赌,该playSongNumber功能只是向机器人发送播放命令,而无需等待它完成,并且当您在它已经在播放某些内容时向它发送播放命令时,它会忽略您。

如果我是对的,那么希望 API 提供一些方法来等待它完成。如果它没有提供,但它确实提供了一种轮询当前状态的方法,您可以在循环中执行此操作(在每次检查之间短暂休眠),直到完成。如果它甚至没有提供,那么您必须通过计算音符的数量(或添加持续时间,如果每对中的一个数字是持续时间)来计算歌曲需要多长时间并睡觉长。

于 2014-11-13T01:01:37.587 回答