# -*- encoding: UTF-8 -*- #Exemple d'utilisation avec 1 74HC595 #utilisation : from shifter import register import RPi.GPIO as GPIO from time import sleep class register: """Utilisation d'un 74HC595""" dataBit=38 clk = 36 latchpin = 40 pause=0 nbits=8 def __init__(self,dataBit = 38,clk = 36,latchpin = 40,nbits=8): """Port par défaut sur un Raspberry pi databit: Port vers DS du 74HC595 clk : Port vers SH_CP du 74HC595 latch : port vers ST_CP du 74HC595""" self.dataBit,self.clk,self.latchpin,self.nbits = dataBit,clk,latchpin,nbits GPIO.setup(self.latchpin, GPIO.OUT) # P0 GPIO.setup(self.clk, GPIO.OUT) # P1 GPIO.setup(self.dataBit, GPIO.OUT) # P7 def clock(self): """Envoi le signal clock à l'état haut puis bas""" GPIO.output(self.clk,GPIO.HIGH) sleep(self.pause) GPIO.output(self.clk,GPIO.LOW) sleep(self.pause) def latch(self): """Envoi l'ensemble des données sur la sortie""" GPIO.output(self.latchpin, GPIO.HIGH) sleep(self.pause) GPIO.output(self.latchpin, GPIO.LOW) sleep(self.pause) def setValue(self,value): """Envoi la valeur en série sur le 74HC595""" dec=1<<(self.nbits-1) #pour 8bits 0x80 pour 16bits 0x8000 for i in range(self.nbits): #Pour 8 bits bitwise=dec>>i #0b10000000 décalage à  droite bit=bitwise&value if (bit==0): GPIO.output(self.dataBit,GPIO.LOW) #sleep(self.pause) else: GPIO.output(self.dataBit,GPIO.HIGH) #sleep(self.pause) self.clock() self.latch() # output byte def clear(self): """Met à zero les sorties sur le 74HC575""" self.setValue(0) def main(): """Test de la class register""" pause=1 GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) shift=register() running=True while running==True: try: shift.clear() print "sortie 0x0AA" shift.setValue(0x0AA) #0b10101010 sleep(pause) shift.clear() print "sortie 0x055" shift.setValue(0x055) #0b01010101 sleep(pause) shift.clear() print "sortie 0x055" shift.setValue(1) #0b01010101 sleep(pause) shift.clear() print "sortie 0x055" shift.setValue(2) #0b01010101 sleep(pause) shift.clear() print "sortie 0x055" shift.setValue(4) #0b01010101 sleep(pause) except KeyboardInterrupt: running=False shift.clear() if __name__=="__main__": main()