我对Python很陌生,我正在尝试做一些有点棘手的事情。所以基本上我试图通过光线发送数据;只是少量的文字。所以我有一行代码将ASCII编码为二进制,并且工作正常并留下一个列表,其中二进制文件为字符串,如
BluetoothDevice.ACTION_FOUND
等等。我有一个覆盆子n=['0','b','1','0','1']
设置为使用下面的代码发送,一个接收代码进一步下来。这一切似乎都有效,但我认为时间在两者之间是关闭的,并且接收端的列表会发生变化,有时会出现随机的0而不应该出现的情况。 (我认为它的阅读速度比发送速度快)。有没有办法解决这个问题,你很容易看到? for循环都是通过按钮同时启动的。
发送:
pi
接收:
For x in range(2,130):
If myList[x] != '1':
Led.off()
Sleep(.5)
Led.off()
Elif myList == '1':
Led.on()
Sleep(.5)
Led.off()
For x in range(2,130):
If gpio.input(14) == True:
myList[x] = '1'
Sleep(.5)
Elif gpio.input(14) ==False:
myList[x] = '0'
Sleep(.5)
连接到正在接收来自LED的信号的gpio.input(14)
。我假设接收代码的运行速度比发送代码快,为什么时间关闭,但我不知道如何修复它。
答案 0 :(得分:0)
我想问题是写入列表可能需要稍微多少时间才能完成动作而不是设置GPIO引脚。因此,每个循环周期都会越来越不同步,直到它没有读出正确的东西。我要做的是在相对的覆盆子pi上添加另一个LED和另一个光电二极管,而不是第一个,并输出一个"收到的"信号。所以你的代码看起来像这样:
发送:
For x in range(2,130):
If myList[x] != '1':
Led.off()
Sleep(.5)
Led.off()
Elif myList == '1':
Led.on()
Sleep(.5)
Led.off()
while GPIO.input(receivepin) == False: #wait until 'receive' pin reads a value
Sleep(0.1)
#here you might want to also add another
#pulse to let the reciever know that another piece of data is about to be sent
Recieving:
For x in range(2,130):
If gpio.input(14) == True:
myList[x] = '1'
Elif gpio.input(14) == False:
myList[x] = '0'
Led.on()
#wait until the sender puts out a pulse to signal the next piece of data
这可能不是最好的方法,但你明白了。基本上你想要消除时间延迟,并用等待某个参数的代码替换它们。