Zelfgemaakte MPC-stijl MIDI controller (6 / 6 stap)

Stap 6: De Code.

'****************************************************************
' * Naam: UNTITLED. BAS                                      *
' * Auteur: Matthew Reid *
' * Aankondiging: Copyright (c) 2012 [Selecteer weergave... EDITOROPTIES] *
' *: Alle rechten voorbehouden *
'*  Date    : 9/5/2012                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
onderbreken van 300
omvatten "modedefs.bas"

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

OSCCON = % 00001000

' hardware seriële poort instellen
HSER_RCSTA 90H definiëren
HSER_TXSTA 24H definiëren
HSER_BAUD 31250 definiëren

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

' knop variabelen

' kolom 1 variabelen
buttonval1 var byte
bouncecheck1 var byte
buttonstate1 var bits [4]
Ik var byte
waarde1 var byte

' kolom 2 variabelen
buttonval2 var byte
bouncecheck2 var byte
buttonstate2 var bits [4]
waarde2 var byte

' kolom 3 variabelen
buttonval3 var byte
bouncecheck3 var byte
buttonstate3 var bits [4]
Waarde3 var byte

' kolom 4variables
buttonval4 var byte
bouncecheck4 var byte
buttonstate4 var bits [4]
Waarde4 var byte

' bankchange variabele
Upstate var bits
Downstate var bits
j var byte: j = 1
c var byte

' variabelen voor een tot en met d (IC2)
een var byte [8]
twee var byte [8]
drie var woord [8]: drie = 0
drempel var woord: drempel = 50
prevpotval var byte [8]

prevadval var woord [8]
currentadval var woord [8]

' variabelen voor een tot en met d (IC1)
one1 var byte [8]
two1 var byte [8]
three1 var woord [8]: drie = 0

prevpotval1 var byte [8]

prevadval1 var woord [8]
currentadval1 var woord [8]

' poort van richting
trisa = % 00000000
trisb = % 00000001
trisc = % 10110110

' RC4 en RC5 inschakelen
Ucon.3 = 0
ucfg.3 = 1

' uitschakelen interne A tot en met D
adcon0 = % 00111100
adcon1 = % 00001111

' zet lcd en selecteer helderheid tot max
onderbreken van 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 PORTB.3,N9600,["Midi Pad v1_1"]
serout PORTB.3,N9600,[$fe,$c0]
serout PORTB.3,N9600,["Matt Reid 2012"]

' flash intro

' rood
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
onderbreken van 400
' groen
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
onderbreken van 400
' blauw
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
onderbreken van 400
' paars
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
onderbreken van 400
' witte
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
onderbreken van 400
' cyaan
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
onderbreken van 400

'_________________________

' bank van de eeprom leest
Lees 5, j

mainloop:
GOSUB bankchange
GOSUB ToetsIndrukken (KeyPress)
GOSUB potread
GOSUB RGB

goto mainloop

bankchange:

' bank omhoog
Als portc.2 = 1 & upstate = 1 then
j = j + 1
als j > 8 dan
j = 1
endif

' Schakel alle notities
voor i = 0 tot 128
hserout [$92, ik, 0]
volgende ik
' schrijven van bank veranderen naar eeprom
schrijven van 5, j
Upstate = 0
endif
Als portc.2 = 0 & upstate = 0 then
Upstate = 1
endif

' bank neer
Als portc.1 = 1 & downstate = 1 then
j = j - 1
als j < 1 dan
j = 8
endif
' Schakel alle notities
voor i = 0 tot 128
hserout [$92, ik, 0]
volgende ik
' schrijven van bank veranderen naar eeprom
schrijven van 5, j

Downstate = 0
endif
Als portc.1 = 0 & downstate = 0 then
Downstate = 1
endif

' bank weergeven
serout PORTB.3, N9600, [$Fe, $c0]
serout PORTB.3, N9600, ["BANK", "", #j, ""]

als j = 1 then
c = 0
endif

als j = 2 then
c = 16
endif

als j = 3 then
c = 32
endif

als j = 4 then
c = 48
endif

als j = 5 then
c = 64
endif

als j = 6 then
c = 80
endif

als j = 7 then
c = 96
endif

als j = 8 then
c = 112
endif

terugkeer

potread:
"adc potentiometer spullen---

' Lees ic2
voor i = 1 tot en met 8
drie [i] = 0

Als ik = 1 then
i2cwrite SDA, SCL, % 00010000, [10001100%]
endif
Als ik = 2 then
i2cwrite SDA, SCL, % 00010000, [11001100%]
endif
Als ik dan 3 =
i2cwrite SDA, SCL, % 00010000, [10011100%]
endif
Als ik dan 4 =
i2cwrite SDA, SCL, % 00010000, [11011100%]
endif
Als ik vervolgens 5 =
i2cwrite SDA, SCL, % 00010000, [10101100%]
endif
Als ik vervolgens 6 =
i2cwrite SDA, SCL, % 00010000, [11101100%]
endif
Als ik vervolgens 7 =
i2cwrite SDA, SCL, % 00010000, [10111100%]
endif
Als ik = 8 then
i2cwrite SDA, SCL, % 00010000, [11111100%]
endif
' deze pauze is belangrijk om te voorkomen dat de adc springen rond
onderbreken van 4

i2cread SDA, SCL, % 00010001, [een [i], twee [i]]



drie [i] = één [i] | drie [i]


drie [i] = drie [i] << 4
twee [i] = twee [i] >> 4
drie [i] = twee [i] | drie [i]
currentadval [i] = drie [i]
' onderbreken van 10

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

Als abs (currentadval [i] - prevadval[i]) > = drempel then
hserout [$B2, 13 + i, drie [i]]
prevpotval [i] = drie [i]
prevadval [i] = currentadval [i]
' weer een d waarde
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#178, "", #(13+i), "", #three [i], ""]
endif
volgende ik

' Lees ic1
voor i = 1 tot en met 8
three1 [i] = 0

Als ik = 1 then
i2cwrite SDA, SCL, % 00010100, [10001100%]
endif
Als ik = 2 then
i2cwrite SDA, SCL, % 00010100, [11001100%]
endif
Als ik dan 3 =
i2cwrite SDA, SCL, % 00010100, [10011100%]
endif
Als ik dan 4 =
i2cwrite SDA, SCL, % 00010100, [11011100%]
endif
Als ik vervolgens 5 =
i2cwrite SDA, SCL, % 00010100, [10101100%]
endif
Als ik vervolgens 6 =
i2cwrite SDA, SCL, % 00010100, [11101100%]
endif
Als ik vervolgens 7 =
i2cwrite SDA, SCL, % 00010100, [10111100%]
endif
Als ik = 8 then
i2cwrite SDA, SCL, % 00010100, [11111100%]
endif

' deze pauze is belangrijk om te voorkomen dat de adc springen rond
onderbreken van 4

% 00010101, SDA, SCL, i2cread [one1 [i], two1 [i]]



three1 [i] = one1 [i] | three1 [i]


three1 [i] = three1 [i] << 4
two1 [i] = two1 [i] >> 4
three1 [i] = two1 [i] | three1 [i]
currentadval1 [i] = three1 [i]
' onderbreken van 10

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

Als abs (currentadval1 [i] - prevadval1[i]) > = drempel then
hserout [$B2, 13 + i, three1 [i]]
prevpotval1 [i] = three1 [i]
prevadval1 [i] = currentadval1 [i]
' weer een d waarde
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#178, "", #(21+i), "", #three1 [i], ""]
endif
volgende ik

terugkeer

ToetsIndrukken (KeyPress):

' knop code
'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

onderbreken van 1

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

Als buttonval1 = bouncecheck1 then

voor i = 0 tot 3' telling van 0 tot 3

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

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

volgende ik

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

onderbreken van 1

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

Als buttonval2 = bouncecheck2 then

voor i = 0 tot 3' telling van 0 tot 3

waarde2 = buttonval2 >> ik
Als value2.0 = 1 & buttonstate2 [i] = 1 then
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

Als value2.0 = 0 & buttonstate2 [i] = 0 then
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

volgende ik

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

onderbreken van 1

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

Als buttonval3 = bouncecheck3 then

voor i = 0 tot 3' telling van 0 tot 3

Waarde3 = buttonval3 >> ik
Als value3.0 = 1 & buttonstate3 [i] = 1 then
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

Als value3.0 = 0 & buttonstate3 [i] = 0 then
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

volgende ik

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

onderbreken van 1

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

Als buttonval4 = bouncecheck4 then

voor i = 0 tot 3' telling van 0 tot 3

Waarde4 = buttonval4 >> ik
Als value4.0 = 1 & buttonstate4 [i] = 1 then
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

Als value4.0 = 0 & buttonstate4 [i] = 0 then
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

volgende ik

endif

terugkeer

RGB:

als j = 1 then
' geel
Porta.1 = 0
pauseus 200

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

als j = 2 then
' rood
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
endif

als j = 3 then
' groen
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
endif

als j = 4 then
' blauw
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif

als j = 5 then
' paars
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
endif

als j = 6 then
' witte
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
endif

als j = 7 then
' cyaan
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
endif

als j = 8 then
' blauw
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif
keren

Gerelateerde Artikelen

Arcade stijl DJ MIDI-controller

Arcade stijl DJ MIDI-controller

>>> Dit is niet helemaal klaar nog als ik een beetje van het circuit omhoog hield. Ik update de instructable en een video uploaden wanneer het wordt gesorteerd op <<<Ik heb DJ voor ongeveer 10 jaar nu, en voor de laatste paar heb ik goed
Tekenen-het-zelf - MIDI controller met de geleidende inkt

Tekenen-het-zelf - MIDI controller met de geleidende inkt

'Draw It Yourself' is een MIDI-controller met de geleidende inkt als drukknoppen. Het is gebaseerd op de Arduino, en maakt gebruik van een capacitieve sensor (twee, eigenlijk) om te bepalen of de getekende knoppen zijn geraakt of niet.http://sanidanz
Maak uw eigen goedkope USB MIDI-Controller of toetsenbord

Maak uw eigen goedkope USB MIDI-Controller of toetsenbord

Ik was op zoek naar een USB MIDI controller-apparaat (of interface) voor muziek toepassingen zoals piano of orgel toetsenbord of pedalboard. Na wat onderzoek wilde ik gaan naar een meer "zelfgemaakte" oplossing. Mijn keuze is tenslotte gericht o
Vlam gecontroleerde MIDI Controller

Vlam gecontroleerde MIDI Controller

Een groot probleem in de wereld van digitale muziekproductie is het bijhouden van die analoge warmte (dat resoneerde uit reel-to-reel systemen en buizen) in moderne digitale muziek. Veel zweren dat analoge systemen hebben een geluid dat nooit kan wor
Sigaar vak MIDI Controller

Sigaar vak MIDI Controller

hier is een DIY MIDI controller die kan worden gebruikt met Max/MSP, Ableton Live, en zowat elke andere muzieksoftware of hardware waarmee MIDI i/o.Het project maakt gebruik van de MIDI-CPU, die kan worden gebruikt als een MIDI "brein" voor DIY-
How To Build een Dj MIDI Controller

How To Build een Dj MIDI Controller

dus dit een schoolproject was. Ik heb net het. Het document dat is gekoppeld aan het einde is het hele project, zoals ik schreef het omhoog de hand. Als u wilt proberen deze build laat het me weten en ik een paar tips kan geven. Ook is een onderstebo
MIDI-Controller met toetsenborden

MIDI-Controller met toetsenborden

We bouwen vandaag de 400 sleutel MIDI-controller met behulp van een Arduino en computer toetsenborden!Voor de budget bewuste muziekproducenten daar is dit project een geweldige manier om het bouwen van een goedkope control board voor uw digitale audi
MIDI-Controller Arcade

MIDI-Controller Arcade

Ik ben zeker dat u deze coole video's van mensen die jammen op een doos met een bos van knoppen op het hebben gezien. Nou, vandaag, zal ik je laten zien hoe u ook kunt verdienen een vak waarmee u Jam kunt maken. < Geïnspireerd door de MIDI Fighter Cl
Aangepaste Arduino MIDI Controller

Aangepaste Arduino MIDI Controller

Hallo, en welkom op dit instructable over het bouwen van een aangepaste, goedkoop en makkelijk USB MIDI-controller, gebaseerd op de Arduino. Het beste nieuws: geen gedoe met USB-naar-MIDI interfaces of softwaretools zoals Haarloze MIDI, gewoon plug '
BeatSauce - een Laptop Midi Controller hybride

BeatSauce - een Laptop Midi Controller hybride

Voor een lange tijd heb ik gezocht om te bouwen van een aangepaste Midi-controller, en hoewel dit niet precies een nieuwe controller deed ik adem nieuw leven in sommige oude hardware.Met behulp van sommige delen die ik had opgelopen en minimale geld
U Rock Guitar midi controller met Bluetooth BLE en oplaadbare batterij

U Rock Guitar midi controller met Bluetooth BLE en oplaadbare batterij

In deze tutorial zal ik u tonen hoe te schakelen gitaar u Rock gitaar in een midi-controller voor Bluetooth 4.0 met oplaadbare batterij. De oplossing was simpel maar moest denken.Dit systeem is getest met de iMac, iPad en iPhoneHet materiaal dat we n
Sugarcube MIDI Controller

Sugarcube MIDI Controller

Dit project is een draagbare, Arduino aangedreven, grid-gebaseerde MIDI controller die zelfstart opwaarts in allerlei apps te doen veel dingen met geluid. Het heeft 16 verlichte knoppen, gebruikt als zowel in- en uitgangen te geven van de controller
Makey Makey MIDI-controller

Makey Makey MIDI-controller

Makey makey is een microcontroller die als een toetsenbord fungeert wanneer deze aangesloten op uw computer. Ik geherprogrammeerd het zodat het stuurt midi notities. Waarom? Omdat wanneer u een toetsenbord controle dingen gebruikt heeft het venster d
Knop MIDI-Controller Arcade

Knop MIDI-Controller Arcade

met een hardware-interface naar uw favoriete muziek / DJ / VJ-software kan echt open deuren in uw creativiteit. De meest voorkomende vorm van controle van de hardware op uw PC voor dergelijke toepassingen is dat een MIDI-gebaseerde controller.Een MID