2017-12-06 7 views
0

[코드] [1] 그루브 파이 진동 센서를 나무 딸기 파이에 연결하는 groovepi가 있습니다. 나는 follwing을 명령을 사용하여 내 라즈베리 파이의 홈 소프트웨어를 다운로드 한 : 다음 내 라즈베리 파이를 재부팅이 후그루브 진동 센서와 라즈베리 파이 사이의 통신

$cd /home/pi/Desktop 
$ sudo git clone https://github.com/DexterInd/GrovePi 
$ cd /home/pi/Desktop/GrovePi/Script 
$ sudo chmod +x install.sh 
$ sudo ./install.sh 
$ sudo pip install grovepi" 

을 때 폴더 내부 :

$cd/home/pi/Desktop/GrovePi/Software/Python 
$sudo python grove_piezo_vibration_sensor.py 

나는 다음과 같은 오류를 얻고있다 : 내가 사용하는 코드는

Trceback (most recent call last): 

File "grove_piezo_vibration_sensor.py", line 49, in <module> 
    print(grovepi.analogRead(piezo)) 
File "/home/pi/Desktop/GrovePi/Software/Python/grovepi.py", line 227, in analogRead 
    return number[1] * 256 +number[2] 
TypeError: 'int' object has no attribute '__getitem__' 

이었다

import time 
import grovepi 
# Connect the Grove Piezo Vibration Sensor to analog port A0 
# OUT,NC,VCC,GND 
piezo = 0 

grovepi.pinMode(piezo,"INPUT") 

while True: 
    try: 
     # When vibration is detected, the sensor outputs a logic high signal 
     print grovepi.analogRead(piezo) 
     time.sleep(.5) 

    except IOError: 
     print "Error" 

내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? 고맙습니다!

+0

오류에 언급 된 코드를 포함시킬 수 있습니까? 해당 오류와 관련하여 StackOverflow에 이미 몇 가지 기사가 있지만 코드를 보지 않아도 해당 상황에 해당하는지 여부는 알 수 없습니다. – Taegost

+0

안녕하세요, 회신 해 주셔서 감사합니다. 내 게시물에 코드를 추가하십시오. –

+0

그게 진전이지만 문제를 부각시키는 것은 아닙니다. 오류가 grovepi.py에 의해 생성 된 것 같습니다. 해당 소스에 액세스 할 수 있습니까? 특히 227 행을 포함하는 메서드입니까? – Taegost

답변

2

당신이 grovepi 코드를 보면,이 같은 analogRead 보이는 기능 : 당신은 그것을 다시 read_i2c_block에서 대신 순서의 어떤 종류를 기다리고 있었다 마지막 줄에 예외를보고있는

def analogRead(pin): 
    write_i2c_block(address, aRead_cmd + [pin, unused, unused]) 
    read_i2c_byte(address) 
    number = read_i2c_block(address) 
    return number[1] * 256 + number[2] 

을 하나의 정수를가집니다. 코드의 다른 곳에서 찾고, 우리는 read_i2c_block이 같다고 볼 :

def read_i2c_block(address): 
    for i in range(retries): 
     try: 
      return bus.read_i2c_block_data(address, 1) 
     except IOError: 
      if debug: 
       print ("IOError") 
    return -1 

지금, 그것은 read_i2c_block_data 것처럼합니다 (smbus 모듈에서) 보이는 항상 목록을 반환합니다. 즉 위의 함수에서 하나의 정수를 얻는 유일한 방법은 IOError 예외가 발생하는 것입니다. 이 블록은 exception IOError 블록으로 가려지며이 함수는 -1을 반환합니다.

grovepi 모듈에는이 코드에 여러 가지 문제가 있습니다. 먼저 (analogRead 함수와 같은)을 호출하는 모든 값은 -1 반환 값을 확인해야합니다. 둘째, 예외를 마스킹하는 것은 특히 도움이되지 않습니다. 예외에는 아마도 문제의 원인을 가리키는 정보가 포함되어 있기 때문입니다. 위의 코드를 다음으로 대체하는 것이 좋습니다.

for i in range(retries): 
     try: 
      return bus.read_i2c_block_data(address, 1) 
     except IOError: 
      if debug: 
       raise 

그런 다음 디버그 모드를 활성화하십시오. 다음과 같은 형식이어야합니다.

import grovepi 
grovepi.debug = 1 

이제 코드를 실행하면 예외가 표시됩니다. 오류에 대한 자세한 내용이 포함되어 있는지 확인하십시오.

+0

안녕하세요, 저는 당신이 저에게 한 말대로 "오류"가 무한대로 인쇄됩니다. 타임스. –

+0

여러분이 직접 코드에서 IOError를 잡기 때문입니다. while 루프에서 try/except를 제거하십시오. – larsks

+0

나는 여전히 동일한 오류를 받고있다. –