2016-07-21 9 views
1

私はPythonには新しく、ややこしいことをしようとしています。だから本質的に私は光の上にデータを送信しようとしています。ほんの少量のテキスト。だから私は、バイナリにASCIIをエンコードするためのコードの行を持って、それは正常に動作し、その上データ送信と受信コードのタイミングの問題

n=['0','b','1','0','1'] 

のような文字列やバイナリなどでリストを私に残します。私は1つのラズベリーpiを以下のコードで送信するように設定し、もう1つはさらにコードを受信するように設定しました。それはすべて動作するようですが、私はタイミングが2つの間にオフであり、受信側のリストがシフトされていると思うし、ときどきランダムな0があるはずはありません。 (私はそれが送信よりも速く読んでいると思う)。これを修正する方法はありますか?簡単に確認できますか? forループは、押しボタンで同時に開始します。

送信:

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) 

gpio.input(14)は、LEDからの信号を受信して​​いるphotodiodeに接続されています。私は受信コードが送信コードよりも速く実行され、タイミングがオフであると仮定していますが、修正方法はわかりません。

答えて

0

リストに書き込むと、GPIOピンを設定するよりも、アクションとして完了するのに少し時間がかかります。だから、ループのサイクルごとに、正しいことを読んでいないうちに同期がずれるようになる。私がやることは、もう1つのLEDともう1つのフォトダイオードを、最初のものよりも反対側のラズベリーパイに追加して、「受信した」信号を出力することです。だからあなたのコードは次のようになります。送信

を:

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 

をこれはそれを行うための最善の方法ではないかもしれないが、あなたのアイデアを得ます。基本的には、時間遅延をなくし、特定のパラメータが満たされるまで待つコードのビットに置き換えたいとします。

関連する問題