美好的一天。
我正在使用Tinkerforge Java API进行一些编程。
我遇到了一个问题,我要创建一个简短的掩码,看起来像:
“0b11011011”
我正在使用以下代码将我的配置解析为需要的Mask: 我使用Char数组作为修改掩码的简单方法,并将其解析为String,并使用short.parseshort创建短掩码。
//Code Before...
log.debug("Calculating I Mask for Port A");
Mask = CalculateIMask(A);
log.debug("Recieved Mask: " + Mask);
//Applying Mask to the IOPort
IO.setPortConfiguration('a', Mask, 'i', true);
//...
public short CalculateIMask(List<IOPort> IOPL)
{
char[] Mask = {'0','0','0','0','0','0','0','0'};
for(IOPort IOP : IOPL)
{
if(IOP.isInput())
{
log.debug("Setting Pin: " + IOP.getPin() + " to 1");
Mask[Integer.valueOf(IOP.getPin())] = '1';
}
}
String SMask = String.valueOf(Mask);
log.debug("Returning Mask: " + SMask);
return Short.parseShort(SMask, 2);
}
日志看起来像这样。
[2016-09-16 13:06:48,252] DEBUG [IO16Register] Calculating I Mask for Port A
[2016-09-16 13:06:48,252] DEBUG [IO16Register] Setting Pin: 0 to 1
[2016-09-16 13:06:48,252] DEBUG [IO16Register] Setting Pin: 2 to 1
[2016-09-16 13:06:48,252] DEBUG [IO16Register] Returning Mask: 10100000
[2016-09-16 13:06:48,252] DEBUG [IO16Register] Recieved Mask: 160
IO.setPortConfiguration不会抛出错误,但也不会应用我的掩码,我想它与Short.parseShort有关。
分析后的第二个日志文件也没有显示正确的掩码。
我现在正在努力解决这个问题,我也尝试使用
short[] Mask = {'0','0','0','0','0','0','0','0'};
而不是char数组。并使用简单的
(short Piece : Mask)
将所有部分应用于一个短片,但日志显示:“48484948494848”。
我希望有人可以给我一些建议,我看了一些线索,但这些似乎没有帮助我解决我的问题。
谢谢
诚恳
Fabian95qw
//编辑:问题是由于在尝试修改设置之前缺少身份验证而导致的。
我事先这样做了,但是忘记了我没有将它应用到日志文件中吞下异常......
com.tinkerforge.TimeoutException:未及时收到函数ID -1的响应 在com.tinkerforge.DeviceBase.sendRequest(DeviceBase.java:169) 在com.tinkerforge.BrickletIO16.getIdentity(BrickletIO16.java:502) 在nucom.module.tinkerforge.bricklets.IO16.ReloadConfig(IO16.java:85)
一个问题仍然存在:Binary如何附加到Brick:
我正在生成以下内容:
二进制:== 0 0 0 0 0 0 0 0
港口号码:== 0 1 2 3 4 5 6 7
但是该计划在这个方向上附加:
二进制:== 0 0 0 0 0 0 0 0
港口号码:== 7 6 5 4 3 2 1 0
现在我只需修改代码就可以正确反转它......
//编辑:我已经完成了。
我正在使用此代码剪切来正确生成我的面具。
public short CalculateIMask(List<IOPort> IOPL)
{
char[] Mask = {'0','0','0','0','0','0','0','0'};
for(IOPort IOP : IOPL)
{
if(IOP.isInput())
{
log.debug("Setting Pin: " + IOP.getPin() + " to 1");
//Old Code Piece:
//Mask[Integer.valueOf(IOP.getPin())] = '1';
Mask[7-Integer.valueOf(IOP.getPin())] = '1';
}
}
String SMask = String.valueOf(Mask);
log.debug("Returning Mask: " + SMask);
return Short.parseShort(SMask, 2);
}