2016-10-25 7 views
0

光電池センサーからのデータをリアルタイムでプロットしようとしていますが、とにかくmatplotlibを使用してそれを行うのですか?私はそれを行う方法を見つけようとしていますが、txtファイルからデータを取得せずにGPIOビンから直接データをプロットする方法は見つけられませんでした。事前Photocellセンサーデータをリアルタイムでプロットする

多くのおかげでここに私のコードです:

#!/usr/local/bin/python 

## Reading data from a photocell sensor 

import RPi.GPIO as GPIO 
import time 

# Tell the GPIO library to use Broadcom GPIO references 
GPIO.setmode(GPIO.BOARD) 

#define the pin that goes to the circuit 
Pin = 7 

def RCtime (Pin): 
    measurement = 0 
    #Output on the pin for # Discharge capacitor 
    GPIO.setup(Pin, GPIO.OUT) 
    GPIO.output(Pin, GPIO.LOW) 
    time.sleep(0.0001) 

    GPIO.setup(Pin, GPIO.IN) 
    # Count loops until voltage across capacitor reads high on GPIO 

    while (GPIO.input(Pin) == GPIO.LOW): 
    measurement += 1 
    return measurement 

# Main program loop 
i = 1 
while True: 
    file1 = open("Data%i.txt" %i ,"w") 
    i += 1 
    c = 1 
    while c <= 50: 
     print RCtime (Pin)*1.000 
     c += 1 
     file1.write(str(RCtime (Pin))) 
     file1.write("\n") 

    else: 
     file1.close() 

私は今、私はこのエラーを取得しています、以下のようにコードを編集した:

File "/home/pi/Qt_Project/plot.py", line 43 
    for RCtime (Pin) in range(0, 500): 
SyntaxError: can't assign to function call 

新しいコード:

import RPi.GPIO as GPIO 
import time 

import matplotlib.pyplot as plt 

import threading 

GPIO.setmode(GPIO.BOARD) 

Pin = 7 

threading.Timer(2, RCtime (Pin)).start() 

def RCtime (Pin): 
    measurement = 0 
    GPIO.setup(Pin, GPIO.OUT) 
    GPIO.output(Pin, GPIO.LOW) 
    time.sleep(0.0001) 

    GPIO.setup(Pin, GPIO.IN) 

    while (GPIO.input(Pin) == GPIO.LOW): 
     measurement += 1 
    return measurement 


i = 1 
while True: 
    file1 = open("Data%i.txt" %i ,"w") 
    i += 1 
    c = 1 
    while c <= 50: 
     print RCtime (Pin)*1.000 
     c += 1 
     file1.write(str(RCtime (Pin))) 
     file1.write("\n") 

    else: 
     file1.close() 


figure, axis = plt.subplots(figsize=(9, 9)) 

for RCtime (Pin) in range(0, 500): 
    axis.plot(time.time(), RCtime (Pin), '0-') 


plt.show() 
+0

短い答えはイエスである挨拶しますmatplotlibでデータをプロットすることは可能です。しかし、データの「測定」がどのように見えているか、正確に何を描きたいのかわからないので、私たちはあなたを助けません。 matplotlibのデータをプロットする方法を少し読んで、それを実際に実行するコードを書いて、それでも問題が解決しない場合は質問を編集してください。 – ImportanceOfBeingErnest

答えて

0

なぜ(超過再帰の深さを回避しながら...)

import threading 
threading.Timer(2, RCtime (Pin)).start() #calls func "RCtime" every 2 sec 

または自己再帰を行うと組み合わせ

import matplotlib.pyplot as plt 

figure, axis = plt.subplots(figsize=(7.6, 6.1)) 

for x in range(0, 500): 
    axis.plot(x, x*2, 'o-') 

plt.show() 

好きではない何かが

、博士コブラ

+0

あなたの答えはDr. Cobraさんにありがとうございました。上記の「質問の編集後」のコードを編集しましたが、正常に数字を取得しましたが、更新されません。ありがとう、 - M. Lagha 6分前 –

+0

最初にすべてのあなたの投げて真のループアウト! –

+0

GPIO.outputの値を "axis.plot(time.time()、** GPIO出力値をここに追加**、 'o-')にプロットする必要があります。" –

関連する問題