这是lib_robotis
的代码片段,值n
是我们输入的角度(旋转dimexel马达)。
根据电机内部芯片的结构,我们要求将目标位置的低位(由lo
标识)输入地址0x1e,将目标位置的高位(由hi
标识)输入地址0x1f。
def move_to_encoder(self,n);
n=min(max(n,0),self.settings['max_encoder'])
hi,lo=n/256, n%256
return self.write_address(0x1e, [hi,lo])
最佳答案
n是0<=n<256*256范围内的数字。表示这个数字需要两个字节,因为一个字节可以编码0到255之间的值。hi,lo=n/256, n%256
与
hi = n / 256
lo = n % 256
/
是除法运算符,%
是余数运算符,因此上面的代码将n
除以256,并将商存储在hi
中,余数存储在lo
中。hi
和lo
中的每一个都将在0到255的范围内,因此它们都将适合一个字节。n==(256*hi)+lo,因此没有丢失任何信息&马达控制器拥有执行所需操作所需的所有信息。我假设您文章中的代码是为Python2编写的;它在Python3上不能正常工作。您应该将
n / 256
替换为n // 256
以使代码在所有版本的Python上工作。FWIW,有很多更好的方法可以把一个数字分成高字节和低字节。一个使用内置的divmod功能:
hi, lo = divmod(n, 256)
关于python -/256和%256的用途是什么,地址如何分为高位和低位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28086076/