質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • Raspberry Pi

    714questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

ラズパイ ADコンバータ 小数点以下の表示

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 339

shuppi

score 35

GitHub mcp3204.py

#!/usr/bin/python
#
#       MCP3204/MCP3208 sample program for Raspberry Pi
#
#       how to setup /dev/spidev?.?
#               $ suod modprobe spi_bcm2708
#
#       how to setup spidev
#               $ sudo apt-get install python-dev python-pip
#               $ sudo pip install spidev
#
import spidev
import time

class MCP3208:
        def __init__(self, spi_channel=0):
                self.spi_channel = spi_channel
                self.conn = spidev.SpiDev(0, spi_channel)
                self.conn.max_speed_hz = 1000000 # 1MHz

        def __del__( self ):
                self.close

        def close(self):
                if self.conn != None:
                        self.conn.close
                        self.conn = None

        def bitstring(self, n):
                s = bin(n)[2:]
                return '0'*(8-len(s)) + s

        def read(self, adc_channel=0):
                # build command
                cmd  = 128 # start bit
                cmd +=  64 # single end / diff
                if adc_channel % 2 == 1:
                        cmd += 8
                if (adc_channel/2) % 2 == 1:
                        cmd += 16
                if (adc_channel/4) % 2 == 1:
                        cmd += 32

                # send & receive data
                reply_bytes = self.conn.xfer2([cmd, 0, 0, 0])

                #
                reply_bitstring = ''.join(self.bitstring(n) for n in reply_bytes)
                # print reply_bitstring

                # see also... http://akizukidenshi.com/download/MCP3204.pdf (page.20)
                reply = reply_bitstring[5:19]
                return int(reply, 2)

if __name__ == '__main__':
        spi = MCP3208(0)

        count = 0
        a0 = 0

        while True:
                count += 1
                a0 += spi.read(0)

                if count == 10:
                        print "ch0=%04d" % (a0/10)
                        count = 0
                        a0 = 0

下のコメントの

    def readAverage(self, adc_channel=0, nAverage=128, bDebug=0):
        raw = 0
        for i in range(nAverage):
            raw += self.read(adc_channel)
        fMean = raw / nAverage

        if bDebug:
            print('nAverage={:d}: mean value={:7.2f}ticks'.format(nAverage, fMean))
        return fMean


を追加し、

if __name__ == '__main__':
    spi = MCP3208(spi_channel=0)

    while True:
        a0 = spi.readAverage(0, nAverage=256)

        print('rawValues: {:7.2f}'.format(a0))
        #time.sleep(0.5)


mainを修正しました。

このサイトのプログラムを使って、距離センサから受け取った値を表示してみています。
小数点第二位まで表示するようになっていると思ったのですが、小数点以下は全部0になっていました。
小数点以下も表示して欲しいのですが、プログラムを見てもよく分かりません。

どなたか分からないでしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

Python2.xでは整数同士の除算において、結果値(商)の小数点以下は切り捨てられ整数が返ります。
float(raw)などのように浮動小数点値に変換して演算することで、結果も浮動小数点数で得られます。

raw = 1234
nAverage = 128

fMean = raw / nAverage # 整数。商の小数点以下は切り捨てられる
print type(fMean)
print fMean

fMean = float(raw) / nAverage # 浮動小数点にして演算
print type(fMean)
print fMean

"""
<type 'int'>
9
<type 'float'>
9.640625
"""

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/28 09:29

    すみません。助かりました。
    ありがとうございました!

    キャンセル

  • 2017/09/28 09:31

    そういえばAD変換できているということは
    この質問(https://teratail.com/questions/93491)解決したんですか?

    キャンセル

  • 2017/09/28 09:38

    はい。解決しました~
    最初からAD変換出来ていたみたいでした。
    この質問で使用したプログラムでうまくいったので大丈夫です。

    キャンセル

  • 2017/09/28 09:40

    では自己解決なりなんなりで質問閉じといてください

    キャンセル

  • 2017/09/28 09:42

    あいー

    キャンセル

0

python2では整数型を整数型で割ると整数になります。
どちらかを浮動小数点数型に直しましょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    railsでのコメント返信機能について

    前提・実現したいこと railsでコメント機能つきブログを作成しています。 コメントには返信機能もつけようと思っているのですが、実装方法で悩んでいます。 コメント1

  • 受付中

    FuelPHP で 暗号化した文字列を Rubyで復号化

     前提 FuelPHP 1.8 PHP 5.6.26 Amazon Linux Ruby 2.1.5  実行した内容 FuelPHPで顧客名を暗号化してDBに登録

  • 解決済

    AttributeError: 'Cifar10Reader' object has no attr...

    AttributeError: 'Cifar10Reader' object has no attribute 'bytestream'  のエラー が出ました。 reader.

  • 解決済

    Python メソッド間の変数の呼び出しについて

    Pythonを勉強しておりまして、現在は主にオブジェクト指向の考え方を学んでおります(オブジェクト指向はほとんど初学です)。これまでに書いたシンプルなプログラムをクラスとメソッドで

  • 解決済

    Pythonのループ操作

    Python超初心者です。 以下のような計算を行いたいときにはどのようなコードを書けばいいでしょうか? ある原子の座標があったとして、それらのステップ毎の計算を一気に行いたいで

  • 解決済

    【pyqy5】画像の表示方法を工夫したい

    python3を使っています。pyqt5で下のようなウィジットを作りたいです 黄色いボタンを押すと前後の画像が真ん中に来るようにしたいです。しかし、どうすればいいのかよく分か

  • 受付中

    ○○ is not definedが解決できない

    前提・実現したいこと Pythonの理解を深める為にjavaのコードを Pythonに書き換えております。 javaでは下記の関数はprivate関数でしたので __diges

  • 解決済

    C言語でファイルを読み込み、一部の要素を取り出すコードのエラー

    前提・実現したいこと c言語でテキストファイルを読み込み、行としてではなく、各要素を読み込んで3列目と4列目だけ出力しようとしています。以下がコード作成のために参考にしているサイト

同じタグがついた質問を見る

  • Raspberry Pi

    714questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。