2016-07-21 5 views
1

Ich bin ziemlich neu in Python und versuche, etwas ein bisschen schwierig zu machen. Im Wesentlichen versuche ich Daten über das Licht zu senden. nur eine kleine Menge Text. So habe ich eine Zeile Code die ASCII-Binär zu kodieren, und das funktioniert gut und läßt mich mit einer Liste mit dem binären als Strings wieTiming-Problem zwischen dem Senden und Empfangen von Code

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

und so weiter. Ich habe eine Himbeere pi eingerichtet, um mit dem Code unten zu senden, und eine mit dem Code weiter unten erhalten. Es scheint alles zu funktionieren, aber ich denke, das Timing ist zwischen den beiden deaktiviert und die Liste am empfangenen Ende ist verschoben und hat manchmal zufällige 0, wo es nicht sein sollte. (Ich denke, es liest schneller als Senden). Gibt es eine Möglichkeit, dies zu beheben, die Sie leicht sehen können? Die for-Schleifen starten beide gleichzeitig über die Drucktaste.

gesendet:

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() 

Empfangen:

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) 

Die gpio.input(14) an einen photodiode verbunden ist, dass die Signale, die von einer LED empfängt. Ich nehme an, dass der Code zum Empfangen schneller läuft als der sendende Code und warum das Timing deaktiviert ist, aber ich weiß nicht, wie ich es beheben soll.

Antwort

0

Ich stelle mir vor das Problem ist, dass das Schreiben in eine Liste etwas mehr oder weniger Zeit als eine Aktion als das Festlegen eines GPIO-Pins dauern kann. So wird jeder Schleifenzyklus mehr und mehr aus dem Takt geraten, bis er nicht die richtigen Dinge liest. Was ich tun würde, ist eine andere LED und eine andere Photodiode hinzuzufügen, auf der gegenüberliegenden Raspberry Pi als die ersten sind, um ein "empfangenes" Signal auszugeben. So würde der Code wie folgt aussehen:

Senden:

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 

Dies kann nicht der beste Weg, es zu tun, aber Sie bekommen die Idee. Im Grunde möchten Sie die Zeitverzögerungen eliminieren und sie durch Code-Bits ersetzen, die warten, bis ein bestimmter Parameter erreicht ist.

Verwandte Themen