«

»

Nov 06

Raspberry Pi dan Input Analog

mcp3008

#!/usr/bin/env python

# Written by Limor "Ladyada" Fried for Adafruit Industries, (c) 2015
# This code is released into the public domain

import time
import os
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
DEBUG = 1

# read SPI data from MCP3008 chip, 8 possible adc's (0 thru 7)
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
   if ((adcnum > 7) or (adcnum < 0)):
           return -1
   GPIO.output(cspin, True)

   GPIO.output(clockpin, False) 
   GPIO.output(cspin, False)  

   commandout = adcnum
   commandout |= 0x18 
   commandout <<= 3   
   for i in range(5):
     if (commandout & 0x80):
       GPIO.output(mosipin, True)
     else:
       GPIO.output(mosipin, False)
     commandout <<= 1
     GPIO.output(clockpin, True)
     GPIO.output(clockpin, False)

   adcout = 0
   # read in one empty bit, one null bit and 10 ADC bits
   for i in range(12):
     GPIO.output(clockpin, True)
     GPIO.output(clockpin, False)
     adcout <<= 1
     if (GPIO.input(misopin)):
       adcout |= 0x1

   GPIO.output(cspin, True)
   
   adcout >>= 1       
   return adcout

SPICLK = 18
SPIMISO = 23
SPIMOSI = 24
SPICS = 25

# set up the SPI interface pins
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)

# 10k trim pot connected to adc #0
potentiometer_adc = 0;

last_read = 0       
tolerance = 5       

while True:
  # we'll assume that the pot didn't move
  trim_pot_changed = False

  # read the analog pin
  trim_pot = readadc(potentiometer_adc, SPICLK, SPIMOSI, SPIMISO, SPICS)
  # how much has it changed since the last read?
  pot_adjust = abs(trim_pot - last_read)

  if DEBUG:
    print "trim_pot:", trim_pot
    print "pot_adjust:", pot_adjust
    print "last_read", last_read

  if ( pot_adjust > tolerance ):
    trim_pot_changed = True

  if DEBUG:
    print "trim_pot_changed", trim_pot_changed

  if ( trim_pot_changed ):
    set_volume = trim_pot / 10.24
    set_volume = round(set_volume)
    set_volume = int(set_volume)

    print 'Volume = {volume}%' .format(volume = set_volume)
    set_vol_cmd = 'sudo amixer cset numid=1 -- {volume}% > /dev/null' .format(volume = set_volume)
    os.system(set_vol_cmd)  # set volume

    if DEBUG:
      print "set_volume", set_volume
      print "tri_pot_changed", set_volume

    # save the potentiometer reading for the next loop
    last_read = trim_pot

  # hang out and do nothing for a half second
  time.sleep(0.5)

Untuk informasi lebih lanjut mengenai pelatihan Raspberry Pi dan aplikasinya, silahkan menghubungi NEXT SYSTEM Robotics Learning Cernter Bandung, (022) 4222062 atau WA 082119977597 atau email info dot nextsys.web.id.