dポイントプレゼントキャンペーン実施中!

import wiringpi as pi
import time

class mcp3002:
def  init( self, ss, speed, vref ):
self.ss = ss
self.speed = speed
self.vref = vref

pi.wiringPiSPISetup( self.ss, self.speed )

def get_value( self, ch ):
senddata = 0x6800 | ( 0x1800 * ch )
buffer = senddata.to_bytes( 2, byteorder='big' )
pi.wiringPiSPIDataRW( self.ss , buffer )

value = (( buffer[0] << 8 ) + buffer[1] ) & 0x3ff

return value

def get_volt( self, value ):
return value * self.vref / float( 1023 )

SPI_CE = 0
SPI_SPEED = 1000000
READ_CH = 0
VREF = 3.3
DELAY = 0.5

adc = mcp3002( SPI_CE, SPI_SPEED, VREF )←ーーーーーーーーーーーーー
while True:
value = adc.get_value( READ_CH )
volt = adc.get_volt( value )
print ("Value:", value, " Volt:", volt )
time.sleep( DELAY )

とあるサイトを参考にしてこんな感じでコード書いているのですが、
「←」の部分でNameErrorが出てしまいます。
エラーの詳細は分かっているのですが、どう直せばいいのかがわかりません…

A 回答 (2件)

えーと、mcp3002( SPI_CE, SPI_SPEED, VREF )のmcp3002という名前を解決できなかったという話では?


クラスmcp3002は引数を(selfを除いて)3つ持った初期化関数__init__を持たないので、mcp3002( SPI_CE, SPI_SPEED, VREF )はクラスmcp3002のインスタンス生成にはマッチしない。かといってmcp3002という関数が定義されているわけでもない。だからmcp3002という名前が解決できなくてNameErrorになったのでは?
それともinitを__init__に修正してもNameErrorは直らなかった?

まずこのサイトの特徴として空白によるインデントは保持されないので、Pythonコードの質問をこのサイトでまともに読んでもらうには全角空白なりを使ってコードを書き換えて読めるようにしないといけません。Pythonはインデントが狂うと意味が変わってしまうからね。
ついでにいうとNameErrorならどの名前がエラーになったかは情報が出ているはずだから、それも質問に書かないと回答を書く側で推測しなければいけないことが増えて大変です。間違った回答をする原因にもなりえるので、質問は可能な限り適切にしましょう。
    • good
    • 0

> class mcp3002:


> def  init( self, ss, speed, vref ):
> self.ss = ss
> self.speed = speed
> self.vref = vref
このクラス定義だけど、初期化メソッドの名前はinitじゃなく__init__でないといけないよ。
    • good
    • 1
この回答へのお礼

ありがとうございます。
修正しました。
ですが、今知りたいのはNameErrorの部分です

お礼日時:2020/09/18 17:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!