Controlador de estilo MIDI MPC casero (6 / 6 paso)

Paso 6: El código.

'****************************************************************
' * Nombre: UNTITLED. BAS                                      *
' * Autor: Matthew Reid *
' * Aviso: Copyright (c) 2012 [Seleccione Ver... OPCIONES DEL EDITOR] *
' *: Todos los derechos reservados *
'*  Date    : 9/5/2012                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
PAUSE 300
incluyen "modedefs.bas"

#CONFIG
__CONFIG _CONFIG1L, _PLLDIV_5_1L y _CPUDIV_OSC1_PLL2_1L y _USBDIV_2_1L
__CONFIG _CONFIG1H, _FOSC_HS_1H y _FCMEN_ON_1H y _IESO_ON_1H
__CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L & _BORV_3_2L & _VREGEN_OFF_2L
_WDTPS_256_2H, _WDT_ON_2H y _CONFIG2H __CONFIG
_PBADEN_OFF_3H, _MCLRE_OFF_3H y _CONFIG3H __CONFIG
__CONFIG _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
#endconfig
define OSC 20

OSCCON = % 00001000

' configurar el puerto serial hardware
definir HSER_RCSTA 90H
definir HSER_TXSTA 24H
definir HSER_BAUD 31250

' puertos i2c
SDA var PORTB.2
SCL var PORTB.1

' botón variables

' variables de columna 1
buttonval1 var byte
bouncecheck1 var byte
buttonstate1 var bit [4]
i var byte
valor1 var byte

' variables de columna 2
buttonval2 var byte
bouncecheck2 var byte
buttonstate2 var bit [4]
value2 var byte

' variables de columna 3
buttonval3 var byte
bouncecheck3 var byte
buttonstate3 var bit [4]
valor3 var byte

' columna 4variables
buttonval4 var byte
bouncecheck4 var byte
buttonstate4 var bit [4]
value4 var byte

' bankchange variable
norte del estado var bit
Downstate var bit
byte de var j: j = 1
c var byte

' variables para una a d (IC2)
un var byte [8]
dos var byte [8]
tres var word [8]: tres = 0
var palabra de umbral: umbral = 50
prevpotval var byte [8]

prevadval var word [8]
currentadval var word [8]

' variables para una a d (IC1)
ella.1 var byte [8]
two1 var byte [8]
three1 var word [8]: tres = 0

prevpotval1 var byte [8]

prevadval1 var word [8]
currentadval1 var word [8]

' dirección de Puerto
TRISA = % 00000000
TRISB = % 00000001
trisc = % 10110110

' habilitar RC4 y RC5
Ucon.3 = 0
ucfg.3 = 1

' desactivar la interna A D
adcon0 = % 00111100
adcon1 = % 00001111

' enciende el lcd y configurar el brillo al máximo
PAUSE 1000
serout PORTB.3, N9600, [$1b, $2a, $FF]

serout PORTB.3,N9600,[$1b,$30]
serout PORTB.3,N9600,[$1b,$2a,200]
serout PORTB.3,N9600,[$1b,$46]

serout PORTB.3,N9600,[$fe,$80]
serout v1_1 PORTB.3,N9600,["Midi Pad"]
serout PORTB.3,N9600,[$fe,$c0]
serout PORTB.3,N9600,["Matt Reid 2012"]

' intro flash

' rojo
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
PAUSE 400
' verde
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
PAUSE 400
' azul
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
PAUSE 400
' morado
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
PAUSE 400
' blanco
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
PAUSE 400
' cian
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
PAUSE 400

'_________________________

' leer Banco de eeprom
leer 5, j

mainloop:
GoSub bankchange
GoSub keypress
GoSub potread
GoSub RGB

Goto mainloop

bankchange:

' Banco para arriba
Si portc.2 = 1 & estado = 1 entonces
j = j + 1
Si j > 8 entonces
j = 1
endif

' borrar todas las notas
para i = 0 a 128
hserout [$92, i, 0]
siguiente
' escribir Banco cambio de eeprom
escribir 5, j
Norte = 0
endif
Si portc.2 = 0 & estado = 0 entonces
estado = 1
endif

' Banco de abajo
Si portc.1 = 1 & downstate = 1 entonces
j = j - 1
Si j < 1 entonces
j = 8
endif
' borrar todas las notas
para i = 0 a 128
hserout [$92, i, 0]
siguiente
' escribir Banco cambio de eeprom
escribir 5, j

Downstate = 0
endif
Si portc.1 = 0 & downstate = 0 entonces
Downstate = 1
endif

' Mostrar la Banco
serout PORTB.3, N9600, [$Fe, $c0]
serout PORTB.3, N9600, ["Banco", "", #j, ""]

Si j = 1 entonces
c = 0
endif

Si j = 2 entonces
c = 16
endif

Si j = 3 entonces
c = 32
endif

Si j = 4 entonces
c = 48
endif

Si j = 5 entonces
c = 64
endif

Si j = 6 entonces
c = 80
endif

Si j = 7 entonces
c = 96
endif

Si j = 8 entonces
c = 112
endif

volver

potread:
' cosas de potenciómetro adc---

' leer ic2
para i = 1 a 8
tres [i] = 0

Si i = 1 entonces
i2cwrite SDA, SCL, % 00010000, [% 10001100]
endif
Si i = 2 entonces
i2cwrite SDA, SCL, % 00010000, [% 11001100]
endif
Si i = 3 entonces
i2cwrite SDA, SCL, % 00010000, [% 10011100]
endif
Si i = 4 then
i2cwrite SDA, SCL, % 00010000, [% 11011100]
endif
Si i = 5 then
i2cwrite SDA, SCL, % 00010000, [% 10101100]
endif
Si i = 6 entonces
i2cwrite SDA, SCL, % 00010000, [% 11101100]
endif
Si i = 7 entonces
i2cwrite SDA, SCL, % 00010000, [% 10111100]
endif
Si i = 8 entonces
i2cwrite SDA, SCL, % 00010000, [% 11111100]
endif
"esta pausa es importante mantener el adc de saltando
pausa de 4

i2cread SDA, SCL, % 00010001, [[i], dos [i]]



tres [i] una [i] = | tres [i]


tres [i] = tres [i] << 4
dos [i] = dos [i] >> 4
tres [i] = dos [i] | tres [i]
currentadval [i] = tres [i]
' pausa de 10

tres [i] = tres [i] * 128
tres [i] = div32 4095

Si abs (currentadval [i] - prevadval[i]) > = umbral entonces
hserout [$B2, 13 + i, 3 [i]]
prevpotval [i] = tres [i]
prevadval [i] = currentadval [i]
' Mostrar un valor d
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#178, "", #(13+i), "", #three [i], ""]
endif
siguiente

' leer ic1
para i = 1 a 8
three1 [i] = 0

Si i = 1 entonces
i2cwrite SDA, SCL, % 00010100, [% 10001100]
endif
Si i = 2 entonces
i2cwrite SDA, SCL, % 00010100, [% 11001100]
endif
Si i = 3 entonces
i2cwrite SDA, SCL, % 00010100, [% 10011100]
endif
Si i = 4 then
i2cwrite SDA, SCL, % 00010100, [% 11011100]
endif
Si i = 5 then
i2cwrite SDA, SCL, % 00010100, [% 10101100]
endif
Si i = 6 entonces
i2cwrite SDA, SCL, % 00010100, [% 11101100]
endif
Si i = 7 entonces
i2cwrite SDA, SCL, % 00010100, [% 10111100]
endif
Si i = 8 entonces
i2cwrite SDA, SCL, % 00010100, [% 11111100]
endif

"esta pausa es importante mantener el adc de saltando
pausa de 4

i2cread SDA, SCL, % 00010101, [ella.1 [i], two1 [i]]



three1 [i] = ella.1 [i] | three1 [i]


three1 [i] = three1 [i] << 4
two1 [i] = two1 [i] >> 4
three1 [i] = two1 [i] | three1 [i]
currentadval1 [i] = three1 [i]
' pausa de 10

three1 [i] = three1 [i] * 128
three1 [i] = div32 4095

Si abs (currentadval1 [i] - prevadval1[i]) > = umbral entonces
hserout [$B2, 13 + i, three1 [i]]
prevpotval1 [i] = three1 [i]
prevadval1 [i] = currentadval1 [i]
' Mostrar un valor d
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#178, "", #(21+i), "", #three1 [i], ""]
endif
siguiente

volver

KeyPress:

' botón código
'set column 1--------------------------------------------------------------------
PORTB.4 = 0
PORTB.5 = 1
PORTB.6 = 1
PORTB.7 = 1

buttonval1 = 0
bouncecheck1 = 0

buttonval1.0 = portc.4
buttonval1.1 = portc.5
buttonval1.2 = portc.7
buttonval1.3 = portb.0

pausa 1

bouncecheck1.0 = portc.4
bouncecheck1.1 = portc.5
bouncecheck1.2 = portc.7
bouncecheck1.3 = portb.0

Si buttonval1 = bouncecheck1 entonces

para i = 0 a 3' cuenta de 0 a 3

valor1 = buttonval1 >> i
Si value1.0 = 1 & buttonstate1 [i] = 1 entonces
hserout [$92, c +, 0]
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#146,"", #(c + i), "", #0, ""]
buttonstate1 [i] = 0
endif

Si value1.0 = 0 & buttonstate1 [i] = 0 entonces
hserout [$92, c + i, 100]
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#146,"", #(c + i), "", #100, ""]
buttonstate1 [i] = 1
endif

siguiente

endif

'set column 2--------------------------------------------------------------------
PORTB.4 = 1
PORTB.5 = 0
PORTB.6 = 1
PORTB.7 = 1

buttonval2 = 0
bouncecheck2 = 0

buttonval2.0 = portc.4
buttonval2.1 = portc.5
buttonval2.2 = portc.7
buttonval2.3 = portb.0

pausa 1

bouncecheck2.0 = portc.4
bouncecheck2.1 = portc.5
bouncecheck2.2 = portc.7
bouncecheck2.3 = portb.0

Si buttonval2 = bouncecheck2 entonces

para i = 0 a 3' cuenta de 0 a 3

valor2 = buttonval2 >> i
Si value2.0 = 1 & buttonstate2 [i] = 1 entonces
hserout [$92, c + 4 + i, 0]
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#146,"", #(c + 4 + i), "", #0, ""]
buttonstate2 [i] = 0
endif

Si value2.0 = 0 & buttonstate2 [i] = 0 entonces
hserout [$92, c + 4 + i, 100]
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#146,"", #(c + 4 + i), "", #100, ""]
buttonstate2 [i] = 1
endif

siguiente

endif

'set column 3--------------------------------------------------------------------
PORTB.4 = 1
PORTB.5 = 1
PORTB.6 = 0
PORTB.7 = 1

buttonval3 = 0
bouncecheck3 = 0

buttonval3.0 = portc.4
buttonval3.1 = portc.5
buttonval3.2 = portc.7
buttonval3.3 = portb.0

pausa 1

bouncecheck3.0 = portc.4
bouncecheck3.1 = portc.5
bouncecheck3.2 = portc.7
bouncecheck3.3 = portb.0

Si buttonval3 = bouncecheck3 entonces

para i = 0 a 3' cuenta de 0 a 3

valor3 = buttonval3 >> i
Si value3.0 = 1 & buttonstate3 [i] = 1 entonces
hserout [92$ c + 8 + i, 0]
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#146,"", #(c + 8 + i), "", #0, ""]
buttonstate3 [i] = 0
endif

Si value3.0 = 0 & buttonstate3 [i] = 0 entonces
hserout [92$ c + 8 + i, 100]
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#146,"", #(c + 8 + i), "", #100, ""]
buttonstate3 [i] = 1
endif

siguiente

endif

'set column 4--------------------------------------------------------------------
PORTB.4 = 1
PORTB.5 = 1
PORTB.6 = 1
PORTB.7 = 0

buttonval4 = 0
bouncecheck4 = 0

buttonval4.0 = portc.4
buttonval4.1 = portc.5
buttonval4.2 = portc.7
buttonval4.3 = portb.0

pausa 1

bouncecheck4.0 = portc.4
bouncecheck4.1 = portc.5
bouncecheck4.2 = portc.7
bouncecheck4.3 = portb.0

Si buttonval4 = bouncecheck4 entonces

para i = 0 a 3' cuenta de 0 a 3

value4 = buttonval4 >> i
Si value4.0 = 1 & buttonstate4 [i] = 1 entonces
hserout [92$ c + 12 + i, 0]
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#146,"", #(c + 12 + i), "", #0, ""]
buttonstate4 [i] = 0
endif

Si value4.0 = 0 & buttonstate4 [i] = 0 entonces
hserout [92$ c + 12 + i, 100]
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#146,"", #(c + 12 + i), "", #100, ""]
buttonstate4 [i] = 1
endif

siguiente

endif

volver

RGB:

Si j = 1 entonces
' amarillo
Porta.1 = 0
pauseus 200

Porta.0 = 1
Porta.1 = 1
Porta.2 = 0
endif

Si j = 2 entonces
' rojo
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
endif

Si j = 3 entonces
' verde
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
endif

Si j = 4 entonces
' azul
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif

Si j = 5 entonces
' morado
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
endif

Si j = 6 entonces
' blanco
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
endif

Si j = 7 entonces
' cian
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
endif

Si j = 8 entonces
' azul
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif
volver

Artículos Relacionados

Controlador de DJ MIDI de estilo arcade

Controlador de DJ MIDI de estilo arcade

>>> esto no es muy acabado pero ya armado un poco del circuito. Voy a actualizar el instructivo y subir un video cuando se ordena <<<He sido DJ por cerca de 10 años, y para los últimos he intercambiado buena viejo vinilo moda vinilo virt
Cómo crear un controlador de Dj MIDI

Cómo crear un controlador de Dj MIDI

así que esto era un proyecto escolar. Acabo de terminarlo. El documento adjunto al final es todo el proyecto, como lo he escrito bien a mano. Si desea tratar esta build me avisas y te puedo dar algunas sugerencias. También un alza para este proyecto
Hackear Pads SNES a hacer controladores de estilo Arcade de Retropie

Hackear Pads SNES a hacer controladores de estilo Arcade de Retropie

Hi y gracias por tomarte un tiempo para leer mi tutorial increíble. El cumpleaños de mi hermanita es el 25 de febrero, está convirtiendo 29 y supongo que empezó a sentir un poco viejo porque ella me pidió dar una de mi Super Nintendo y un cartucho de
Rocksmith Pedal de Control (controlador de estilo Stompbox) para XBox 360

Rocksmith Pedal de Control (controlador de estilo Stompbox) para XBox 360

este es mi primer Instructable.  Me alegra que mi momento coincidirá con el plazo de inscripción para el Game.Life 2 Challenge! He intentado hacer instructables antes, pero parece que a medio camino a través de mis proyectos, dejar de tomar fotografí
Controlador de pie MIDI (Pedalera controladora MIDI) para Amplitube 3.

Controlador de pie MIDI (Pedalera controladora MIDI) para Amplitube 3.

Instrucciones de armado y puesta en funcionamiento del Midi pedal.(Pedalera controladora MIDI) para Amplitube 3.Hola, uso habitualmente el programa Amplitube 3 para practicar con mi Guitarra, realmente me gustan mucho los sonidos y posibilidades de c
Controlador Arduino personalizado MIDI

Controlador Arduino personalizado MIDI

Hola y Bienvenidos a este instructable sobre cómo construir un controlador USB MIDI personalizado, barato y fácil, basado en Arduino. La mejor noticia: sólo tiene que conectar sin problemas con interfaces USB a MIDI, o herramientas de software como M
Controlador de DJ MIDI PACMOD

Controlador de DJ MIDI PACMOD

para el cumpleaños de mi hijo le hice una controladora para DJ diseñado para parecerse a un viejo gabinete arcade de la máquina. Lo que sigue es un breve resumen del proceso para hacerlo, incluyendo el código.El Teensy fue elegido como el cerebro deb
Controlador de pie MIDI basados en Arduino DIY

Controlador de pie MIDI basados en Arduino DIY

Llevo muuuucho tiempo con intentar un lazador de guitarra durante un tiempo, pero no me gusta la idea de gastar dinero en un pedal específicos del lazador cuando puedo usar un ordenador para eso y desde que he estado aprendiendo arduino para divertir
Controlador de pie Midi Arduino para Ableton Live

Controlador de pie Midi Arduino para Ableton Live

Soy un geek. Yo lo sé. Me gustan las cosas DIY'ing. Compré una impresora 3d (que está sentado en mi oficina no funciona ahora mismo)... y como construir drones. Yo generalmente morder más de lo que puedo masticar y a menudo tiene que ir a otros para
Zeta Reticuli: MIDI control de ecualizador de 10 bandas y múltiples interfaz de efecto externo

Zeta Reticuli: MIDI control de ecualizador de 10 bandas y múltiples interfaz de efecto externo

aproximadamente la mitad mi vida (20 años) hace que solía tener literalmente drillions y drillions de ideas que todavía siento no es una completa pérdida de tiempo. Una de estas brillantes ideas debía ser capaz de controlar un pedal de wah-wah guitar
Dibujar-MIDI controller con tinta conductora

Dibujar-MIDI controller con tinta conductora

'Draw It Yourself' es un controlador MIDI que utiliza tinta conductora como botones. Está basado en Arduino y utiliza un sensor capacitivo (dos, en realidad) para determinar si los botones dibujados son ser tocados o no.http://sanidanz.tumblr.com/dra
Tambores de guante MIDI con Arduino y sensores de luz

Tambores de guante MIDI con Arduino y sensores de luz

voy a describir una divertida y fácil manera de construir su propia expresión sonido MIDI habilitado guante sin gastar mucho dinero en costosos sensores o Interfaces MIDI.Sienta libre de entrarme en contacto con directamente por correo si gusta o si
Pedal de Teensy USB MIDI para controlar Mobius Looper

Pedal de Teensy USB MIDI para controlar Mobius Looper

Motivación:Tocando en una banda de 2 piezas, con los tambores y un montón de otras muestras que se está reproduciendo como forro pistas, era necesario utilizar una lanzadera para agregar más elementos a las pistas. Un looper basado en hardware falla
Usar una caminadora DC Drive Motor y controlador de velocidad PWM para accionar herramientas

Usar una caminadora DC Drive Motor y controlador de velocidad PWM para accionar herramientas

pueden requerir herramientas eléctricas tales como molinos de corte de metales y tornos, taladros, sierras, lijadoras y más .5HP a 2HP motores con la capacidad de ajustar la velocidad manteniendo el esfuerzo de torsión.Coincidentemente la mayoría de