2017-12-22 3 views
0

GPI 핀을 통해 포텐셔미터에서 아날로그 판독 값을 보여주는 간단한 그래프를 만들기 위해 Raspberry Pi를 사용하고 있습니다. 필자는 RPi가 아날로그 신호를 읽을 수 없음을 극복 할 수있는 작은 회로를 만들었습니다. 플로팅 자체에는 약간의 문제가 있습니다. 내가 사용하는 코드는 아래와 같습니다.matplotlib plot() not working

# include RPi libraries in to Python code 
import RPi.GPIO as GPIO 
import time 
import matplotlib.pyplot as plt 
from drawnow import drawnow 

# instantiate GPIO as an object 
GPIO.setmode(GPIO.BCM) 

# define GPIO pins with variables a_pin and b_pin 
a_pin = 18 
b_pin = 23 
gainF = [] 
gainString = 0 
plt.ion() 
x_axis = 0 

def makeFig(): 
    plt.ylim(200,210) 
    plt.xlim(0,100) 
    plt.title('Readings') 
    plt.grid(True) 
    plt.ylabel('Gain') 
    print(gainString) 
    print(x_axis) 
    plt.plot(gainString, x_axis) 
    plt.show() 
    #plt.plot(gainString, 'ro-', label='Gain dBm') 


# create discharge function for reading capacitor data 
def discharge(): 
    GPIO.setup(a_pin, GPIO.IN) 
    GPIO.setup(b_pin, GPIO.OUT) 
    GPIO.output(b_pin, False) 
    time.sleep(0.005) 

# create time function for capturing analog count value 
def charge_time(): 
    GPIO.setup(b_pin, GPIO.IN) 
    GPIO.setup(a_pin, GPIO.OUT) 
    count = 0 
    GPIO.output(a_pin, True) 
    while not GPIO.input(b_pin): 
     count = count +1 
    return count 

# create analog read function for reading charging and discharging data 
def analog_read(): 
    discharge() 
    return charge_time() 

# provide a loop to display analog data count value on the screen 
while True: 
    print(analog_read()) 
    gainString = analog_read() 
    x_axis = x_axis + 1 
    #dataArray = gainString.split(',') 
    #gain = float(dataArray[0]) 
    #gainF.append(gain) 
    makeFig() 
    plt.pause(.000001) 
    time.sleep(1) 

    #GPIO.cleanup() 

이 코드는 증가하는 x 축 및 y 축 판독 값을 makeFig() 함수에서 표시하지만 열리는 그래프에는 아무 것도 표시되지 않습니다. 그것은 동일하게 유지됩니다. 코드에서 변경해야 할 사항은 무엇입니까? 감사.

+0

확인이 중 하나를 실행할 수 없습니다,하지만 당신은 가장 최근 읽고 저장하는? 'gainString' (실제로 문자열입니까?)라는 목록을'gainString = []'하고 루프에'read '값을'gainString.append (analog_read())'라고 덧붙입니다. 그러면 x_axis는'x_axis = range (len (gainString))'이 될 수 있습니다. 가능하다면 그 일이 어떻게 진행되고 잘못된 그래프의 스크린 샷을 게시하는지 알려주십시오. –

+0

지시 한대로 코드를 변경했습니다. 아래에 나와 있습니다. 동안 참 ': 인쇄 (analog_read()) #gainString analog_read =() gainString.append (analog_read()) = X_AXIS 범위 (LEN (gainString)) #x_axis X_AXIS = + 1 = #dataArray gainString.split ('') = #gain 플로트 (dataArray [0]) # 의 gainF.append (게인) makeFig() plt.pause (0.000001) time.sleep (1) '이 아래의 배열 출력을 생성했습니다. '90 [195, 189] 범위 (0, 2) [195, 189, 96] 그래도 그래프는 비어 있습니다. –

+0

@KenSyme이 오류는 코드 시작 부분에 표시됩니다. 방법? '아날로그 읽기 180 gainString = [183] ​​ X_AXIS = [1] /usr/lib/python3/dist-packages/matplotlib/backend_bases.py:2445 : MatplotlibDeprecationWarning이 특정 기능까지 기본 이벤트 루프를 사용 GUI가 구현되었습니다. warnings.warn (str, mplDeprecation)' –

답변

1

단일 값의 선 그림을 플롯하려고합니다. 라인이 적어도 라인이 될 점을 필요로하기 때문에, 표시되지 않습니다

plt.plot([1],[5]) 

과 동일합니다.

당신이이 필요하시면 경우 단일 지점을 표시하는 마커를 사용할 수 있습니다

plt.plot([1],[5], marker="o")