Outils pour utilisateurs

Outils du site


raspberry_pi:controle_led_rgb

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision Les deux révisions suivantes
raspberry_pi:controle_led_rgb [22/02/2015 00:18]
sky99
raspberry_pi:controle_led_rgb [22/02/2015 05:14]
sky99
Ligne 30: Ligne 30:
 #​!/​usr/​bin/​python #​!/​usr/​bin/​python
 from Adafruit_I2C import Adafruit_I2C from Adafruit_I2C import Adafruit_I2C
 +from Adafruit_MCP230xx import Adafruit_MCP230XX
 import smbus import smbus
 import time import time
-MCP23017_IODIRA = 0x00 
-MCP23017_IODIRB = 0x01 
-MCP23017_GPIOA ​ = 0x12 
-MCP23017_GPIOB ​ = 0x13 
-MCP23017_GPPUA ​ = 0x0C 
-MCP23017_GPPUB ​ = 0x0D 
-MCP23017_OLATA ​ = 0x14 
-MCP23017_OLATB ​ = 0x15 
-MCP23008_GPIOA ​ = 0x09 
-MCP23008_GPPUA ​ = 0x06 
-MCP23008_OLATA ​ = 0x0A 
-class Adafruit_MCP230XX(object):​ 
- OUTPUT = 0 
- INPUT = 1 
- def __init__(self,​ address, num_gpios, busnum = 0): 
- assert num_gpios >= 0 and num_gpios <= 16, "​Number of GPIOs must be between 0 and 16" 
- self.i2c = Adafruit_I2C(address=address,​ bus=smbus.SMBus(busnum))  
- self.address = address 
- self.num_gpios = num_gpios 
- # set defaults 
- if num_gpios <= 8: 
- self.i2c.write8(MCP23017_IODIRA,​ 0xFF)  # all inputs on port A 
- self.direction = self.i2c.readU8(MCP23017_IODIRA) 
- self.i2c.write8(MCP23008_GPPUA,​ 0x00) 
- elif num_gpios > 8 and num_gpios <= 16: 
- self.i2c.write8(MCP23017_IODIRA,​ 0xFF)  # all inputs on port A 
- self.i2c.write8(MCP23017_IODIRB,​ 0xFF)  # all inputs on port B 
- self.direction = self.i2c.readU8(MCP23017_IODIRA) 
- self.direction |= self.i2c.readU8(MCP23017_IODIRB) << 8 
- self.i2c.write8(MCP23017_GPPUA,​ 0x00) 
- self.i2c.write8(MCP23017_GPPUB,​ 0x00) 
-  ​ 
- def _changebit(self,​ bitmap, bit, value): 
- assert value == 1 or value == 0, "Value is %s must be 1 or 0" % value 
- if value == 0: 
- return bitmap & ~(1 << bit) 
- elif value == 1: 
- return bitmap | (1 << bit) 
- def _readandchangepin(self,​ port, pin, value, currvalue = None): 
- assert pin >= 0 and pin < self.num_gpios,​ "Pin number %s is invalid, only 0-%s are valid" % (pin, self.num_gpios) 
- #assert self.direction & (1 << pin) == 0, "Pin %s not set to output"​ % pin 
- if not currvalue: 
- currvalue = self.i2c.readU8(port) 
- newvalue = self._changebit(currvalue,​ pin, value) 
- self.i2c.write8(port,​ newvalue) 
- return newvalue 
  
- def pullup(self,​ pin, value): 
- if self.num_gpios <= 8: 
- return self._readandchangepin(MCP23008_GPPUA,​ pin, value) 
- if self.num_gpios <= 16: 
- if (pin < : 
- return self._readandchangepin(MCP23017_GPPUA,​ pin, value) 
- else: 
- return self._readandchangepin(MCP23017_GPPUB,​ pin-8, value) 
- # Set pin to either input or output mode 
- def config(self,​ pin, mode):​   ​ 
- if self.num_gpios <= 8: 
- self.direction = self._readandchangepin(MCP23017_IODIRA,​ pin, mode) 
- if self.num_gpios <= 16: 
- if (pin < <img src='​http://​forum.pcinpact.com/​public/​style_emoticons/<#​EMO_DIR#>/​lunettes1.gif'​ class='​bbc_emoticon'​ alt='​8)'​ />/>/>/>/>/>/>:​ 
- self.direction = self._readandchangepin(MCP23017_IODIRA,​ pin, mode) 
- else: 
- self.direction = self._readandchangepin(MCP23017_IODIRB,​ pin-8, mode) 
- return self.direction 
- def output(self,​ pin, value): 
- # assert self.direction & (1 << pin) == 0, "Pin %s not set to output"​ % pin 
- if self.num_gpios <= 8: 
- self.outputvalue = self._readandchangepin(MCP23008_GPIOA,​ pin, value, self.i2c.readU8(MCP23008_OLATA)) 
- if self.num_gpios <= 16: 
- if (pin < <img src='​http://​forum.pcinpact.com/​public/​style_emoticons/<#​EMO_DIR#>/​lunettes1.gif'​ class='​bbc_emoticon'​ alt='​8)'​ />/>/>/>/>/>/>:​ 
- self.outputvalue = self._readandchangepin(MCP23017_GPIOA,​ pin, value, self.i2c.readU8(MCP23017_OLATA)) 
- else: 
- self.outputvalue = self._readandchangepin(MCP23017_GPIOB,​ pin-8, value, self.i2c.readU8(MCP23017_OLATB)) 
- return self.outputvalue 
- 
- self.outputvalue = self._readandchangepin(MCP23017_IODIRA,​ pin, value, self.outputvalue) 
- return self.outputvalue 
-   ​ 
- def input(self, pin): 
- assert pin >= 0 and pin < self.num_gpios,​ "Pin number %s is invalid, only 0-%s are valid" % (pin, self.num_gpios) 
- assert self.direction & (1 << pin) != 0, "Pin %s not set to input" % pin 
- if self.num_gpios <= 8: 
- value = self.i2c.readU8(MCP23008_GPIOA) 
- elif self.num_gpios > 8 and self.num_gpios <= 16: 
- value = self.i2c.readU16(MCP23017_GPIOA) 
- temp = value >> 8 
- value <<= 8 
- value |= temp 
- return value & (1 << pin) 
-def readU8(self):​ 
-  result = self.i2c.readU8(MCP23008_OLATA) 
-  return(result) 
-def readS8(self):​ 
-  result = self.i2c.readU8(MCP23008_OLATA) 
-  if (result > 127): result -= 256 
-  return result 
-def readU16(self):​ 
-  assert self.num_gpios >= 16, "​16bits required"​ 
-  lo = self.i2c.readU8(MCP23017_OLATA) 
-  hi = self.i2c.readU8(MCP23017_OLATB) 
-  return((hi << <img src='​http://​forum.pcinpact.com/​public/​style_emoticons/<#​EMO_DIR#>/​lunettes1.gif'​ class='​bbc_emoticon'​ alt='​8)'​ />/>/>/>/>/>/>​ | lo) 
-def readS16(self):​ 
-  assert self.num_gpios >= 16, "​16bits required"​ 
-  lo = self.i2c.readU8(MCP23017_OLATA) 
-  hi = self.i2c.readU8(MCP23017_OLATB) 
-  if (hi > 127): hi -= 256 
-  return((hi << <img src='​http://​forum.pcinpact.com/​public/​style_emoticons/<#​EMO_DIR#>/​lunettes1.gif'​ class='​bbc_emoticon'​ alt='​8)'​ />/>/>/>/>/>/>​ | lo) 
-def write8(self,​ value): 
-  self.i2c.write8(MCP23008_OLATA,​ value) 
-def write16(self,​ value): 
-  assert self.num_gpios >= 16, "​16bits required"​ 
-  self.i2c.write8(MCP23017_OLATA,​ value & 0xFF) 
-  self.i2c.write8(MCP23017_OLATB,​ (value >> ​ & 0xFF)   ​ 
-# RPi.GPIO compatible interface for MCP23017 and MCP23008 
-class MCP230XX_GPIO(object):​ 
- OUT = 0 
- IN = 1 
- BCM = 0 
- BOARD = 0 
- def __init__(self,​ busnum, address, num_gpios): 
- self.chip = Adafruit_MCP230XX(busnum,​ address, num_gpios) 
- def setmode(self,​ mode): 
- # do nothing 
- pass 
- def setup(self, pin, mode): 
- self.chip.config(pin,​ mode) 
- def input(self, pin): 
- return self.chip.input(pin) 
- def output(self,​ pin, value): 
- self.chip.output(pin,​ value) 
- def pullup(self,​ pin, value): 
- self.chip.pullup(pin,​ value) 
-   ​ 
 def lightRGBLed(rState,​gState,​bState,​rPin,​gPin,​bPin):​ def lightRGBLed(rState,​gState,​bState,​rPin,​gPin,​bPin):​
- mcp.output(rPin,​ rState) +    ​mcp.output(rPin,​ rState) 
- mcp.output(gPin,​ gState) +    mcp.output(gPin,​ gState) 
- mcp.output(bPin,​ bState) +    mcp.output(bPin,​ bState) 
 +
 def lightRGBLed2(color,​rPin,​gPin,​bPin):​ def lightRGBLed2(color,​rPin,​gPin,​bPin):​
- if color == '​red':​ +    ​if color == '​red':​ 
- lightRGBLed(1,0,0,​rPin,​gPin,​bPin) +        lightRGBLed(0,​1,1,​rPin,​gPin,​bPin) 
- elif color == '​green':​ +    elif color == '​green':​ 
- lightRGBLed(0,1,​0,​rPin,​gPin,​bPin) +        lightRGBLed(1,​0,1,​rPin,​gPin,​bPin) 
- elif color == '​blue':​ +    elif color == '​blue':​ 
- lightRGBLed(0,0,​1,​rPin,​gPin,​bPin) +        lightRGBLed(1,1,0,​rPin,​gPin,​bPin) 
- elif color == '​yellow':​ +    elif color == '​yellow':​ 
- lightRGBLed(1,1,​0,​rPin,​gPin,​bPin) +        lightRGBLed(0,0,1,​rPin,​gPin,​bPin) 
- elif color == '​magenta':​ +    elif color == '​magenta':​ 
- lightRGBLed(1,0,​1,​rPin,​gPin,​bPin) +        lightRGBLed(0,​1,0,​rPin,​gPin,​bPin) 
- elif color == '​cyan':​ +    elif color == '​cyan':​ 
- lightRGBLed(0,1,1,​rPin,​gPin,​bPin) +        lightRGBLed(1,​0,0,​rPin,​gPin,​bPin) 
- elif color == '​white':​ +    elif color == '​white':​ 
- lightRGBLed(1,1,1,​rPin,​gPin,​bPin) +        lightRGBLed(0,0,0,​rPin,​gPin,​bPin) 
-  +    
 if __name__ == '​__main__':​ if __name__ == '​__main__':​
- mcp = Adafruit_MCP230XX(busnum = 1, address = 0x20, num_gpios = 16) +    ​mcp = Adafruit_MCP230XX(busnum = 1, address = 0x20, num_gpios = 16) 
- r1=10 +    r1=7 
- g1=8 +    g1=6 
- b1=9 +    b1=5 
- mcp.config(b1,​ mcp.OUTPUT) +    mcp.config(b1,​ mcp.OUTPUT) 
- mcp.config(g1,​ mcp.OUTPUT) +    mcp.config(g1,​ mcp.OUTPUT) 
- mcp.config(r1,​ mcp.OUTPUT) +    mcp.config(r1,​ mcp.OUTPUT)
- while (True):+
  
-   print "​off"​ + # Set pin 3 to input with the pullup resistor enabled 
-   lightRGBLed(0,0,​0,​r1,​g1,​b1) +    #​mcp.pullup(3, 1) 
-   time.sleep(1) +    # Read pin 3 and display the results 
-   +    #print "%d: %x" ​(3mcp.input(3>> 3)
-   ​print "rouge" +
-   lightRGBLed(1,0,​0,​r1,​g1,​b1) +
-   time.sleep(1) +
-   +
-   print "​vert" ​  +
-   lightRGBLed(0,​1,​0,​r1,​g1,​b1) +
-   time.sleep(1)+
  
-   print "​bleu"​ 
-   lightRGBLed(0,​0,​1,​r1,​g1,​b1) 
-   time.sleep(1) 
  
-   ​print "vert+bleu" ​  +    while (True): 
-   lightRGBLed(0,​1,​1,​r1,​g1,​b1) +      ​print "off" 
-   time.sleep(1)+      lightRGBLed(1,​1,​1,​r1,​g1,​b1) 
 +      time.sleep(1) 
 +   ​ 
 +      print "​red"​ 
 +      ​lightRGBLed(0,​1,​1,​r1,​g1,​b1
 +      time.sleep(1
 +   ​ 
 +      print "​green"​  ​  
 +      lightRGBLed(1,​0,​1,​r1,​g1,​b1) 
 +      time.sleep(1) 
 +  
 +      print "​blue"​  
 +      lightRGBLed(1,​1,​0,​r1,​g1,​b1) 
 +      ​time.sleep(1)
  
-   ​print "rouge+bleu" ​  +      ​print "green+blue"​   ​ 
-   lightRGBLed(1,​0,​1,​r1,​g1,​b1) +      ​lightRGBLed(1,​0,​0,​r1,​g1,​b1) 
-   ​time.sleep(1)+      time.sleep(1)
  
-   ​print "rouge+vert" ​  +      ​print "red+blue"​   ​ 
-   lightRGBLed(1,​1,​0,​r1,​g1,​b1) +      ​lightRGBLed(0,​1,​0,​r1,​g1,​b1) 
-   ​time.sleep(1)+      time.sleep(1)
  
-   ​print "rouge+vert+bleu" ​  +      ​print "red+green"​   ​ 
-   lightRGBLed(1,1,​1,​r1,​g1,​b1) +      ​lightRGBLed(0,0,​1,​r1,​g1,​b1) 
-   time.sleep(1)+      ​time.sleep(1) 
 + 
 +      print "​red+green+blue"​   ​ 
 +      lightRGBLed(0,​0,​0,​r1,​g1,​b1) 
 +      ​time.sleep(1)
 </​file>​ </​file>​
  
Ligne 436: Ligne 310:
    time.sleep(1)    time.sleep(1)
 </​file>​ </​file>​
- 
  
  
raspberry_pi/controle_led_rgb.txt · Dernière modification: 22/02/2015 05:16 par sky99