質問編集履歴

1 訂正

shuppi

shuppi score 43

2017/09/27 14:25  投稿

ラズパイ ADコンバータ 小数点以下の表示
[GitHub mcp3204.py](https://gist.github.com/yoggy/7096133)
```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
       a1 = 0  
       a2 = 0  
       a3 = 0  
       while True:
               count += 1
               a0 += spi.read(0)
               a1 += spi.read(1)  
               a2 += spi.read(2)  
               a3 += spi.read(3)  
               if count == 10:
                       print "ch0=%04d, ch1=%04d, ch2=%04d, ch3=%04d" % (a0/10, a1/10, a2/10, a3/10)
                       print "ch0=%04d" % (a0/10)
                       count = 0
                       a0 = 0
                       a1 = 0  
                       a2 = 0  
                       a3 = 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)
       a1 = spi.readAverage(1)  
       a2 = spi.readAverage(2)  
       a3 = spi.readAverage(3)  
       print('rawValues: {:7.2f} {:7.2f} {:7.2f} {:7.2f}'.format(a0, a1, a2, a3))
       print('rawValues: {:7.2f}'.format(a0))
       #time.sleep(0.5)
```
mainを修正しました。
このサイトのプログラムを使って、距離センサから受け取った値を表示してみています。
小数点第二位まで表示するようになっていると思ったのですが、小数点以下は全部0になっていました。
小数点以下も表示して欲しいのですが、プログラムを見てもよく分かりません。
どなたか分からないでしょうか。
  • Raspberry Pi

    2020 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る