Autor Tema: Mcp23017 modificar código  (Leído 444 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 9acca9

  • PIC10
  • *
  • Mensajes: 1
Mcp23017 modificar código
« en: 30 de Agosto de 2019, 18:48:35 »
Buenas a todos.
Estoy intentanto realizar este proyecto para luego meterme en uno más grande (que es el de hacer el del tablero de ajedrez).
http://chess.fortherapy.co.uk/home/beginners-start-here/raspberry-pi-naughts-crosses-tic-tac-toe/
https://github.com/mdobres/maxnox

Pues bien, para hacer el ta te ti, usan un sainsmart display que tiene botones, y usan la librería de Adafruit.
Esta librería no funciona con mi display que por otro lado no tiene botones. Ya modifiqué parte del código para poder usar mi display, pero no sé cómo modificarlo para poder agregarle botones. Quisiera hacer los cambios en este código, que es más pequeño, para luego meterme con el código mayor y más complejo https://github.com/mdobres/maxnox/blob/master/maxnox.py donde sí figuran los botones para seleccionar opciones, etc.

Entonces pensé en ponerle algunos botones al mcp23017.
Los primeros pins son para el tablero de tateti, y los siguientes serían para seleccionar, comenzar, abajo, arriba.
Ahora bien, por como está pensado el código todos los pines están como "dentro del tablero del ta te ti", pues cuando está verificando si los interruptores (reed switch) están cerrados, pasa por todos los pines.
A mi me gustaría entonces modificar esto para que cuente sólo hasta el pin 9, así puedo usar los últimos para otra cosa.
Cómo podría hacer esto? Gracias.
Este es el código.

Código: [Seleccionar]
import smbus
import time
import math
# Module for NOX : Noughts and crosses / Tic Tac Toe Game
# this program scans both registers one device, giving 2 x 8 = 16 inputs, only 9 of these are used in the NOX program
#bus = smbus.SMBus(0)  # Rev 1 Pi uses 0
bus = smbus.SMBus(1) # Rev 2 Pi uses 1
# this program scans both the A and B registers of one MCP23017 port exapander and returns changes
mbrd = [0xFF,0xFF]   # mbrd is the noughts and crosses board  this sets them to 11111111 : open w
chcol =["A","B","C"]  # column labels
i2cadd=0x21 # the I2c Device address of the MCP23017s (A0-A2)
GPIOn = [0x12, 0x13]
IODIRA = 0x00 # APin direction register for first 8 ie 1 = input or 2= output
IODIRB = 0x01 # B Pin direction register
GPIOA  = 0x12 # Register for inputs
GPIOB  = 0x13 # B Register for inputs
GPPUA= 0x0C  # Register for Pull ups A
GPPUB= 0x0D  # Register for Pull ups B

# Set all A 8 GPA pins as  input. ie set them to 1 oXFF = 11111111
bus.write_byte_data(i2cadd,IODIRA,0xFF)
# Set pull up on GPA pins .ie from default of 0 to 11111111
bus.write_byte_data(i2cadd,GPPUA,0xFF)
# Set all B 8 GPB pins as  input. ie set them to 1 oXFF = 11111111
bus.write_byte_data(i2cadd,IODIRB,0xFF)
# Set pull up on GPB pins .ie from default of 0 to 11111111
bus.write_byte_data(i2cadd,GPPUB,0xFF)


# now look for a change

# Loop until user presses CTRL-C
while True:
  # read the 8 registers

  for l in range(2):  #loops round both registers of MCP23017
    a = bus.read_byte_data(i2cadd,GPIOn[l])
    if a != mbrd[l]: # there has been a change
      c = a ^ mbrd[l]  # bitwise operation copies the bit if it is set in one operand but not both.
      dirx = "Close"
      if a > mbrd[l] : dirx = "Open"  # if the number gets bigger a 0 has changed to a 1
      y = math.frexp(c)[1]  # calculates integer part of log base 2, which is binary bit position
      w=y+l*8
      print "square", w, " Reed Switch " , dirx    # chcol[(w+2)%3], (int((w-1)/3))+1
     
      mbrd[l]=a  # update the current state of the board
      time.sleep(0.1)

post data: por ejemplo cuando se cierre el pin 10 que diga otra cosa en vez de "square" 10.