Contrôleur de style MIDI maison MPC (6 / 6 étapes)

Étape 6: Le Code.

'****************************************************************
' * Nom : sans titre. BAS                                      *
' * Auteur : Matthew Reid *
' * Avis : Copyright (c) 2012 [sélectionnez affichage... OPTIONS DE L’ÉDITEUR] *
' *: Tous droits réservés *
'*  Date    : 9/5/2012                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
faire une pause 300
inclure « 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 & _BOR_ON_2L & _BORV_3_2L & _VREGEN_OFF_2L
_WDTPS_256_2H, _WDT_ON_2H & __CONFIG _CONFIG2H
_PBADEN_OFF_3H, _MCLRE_OFF_3H & __CONFIG _CONFIG3H
__CONFIG _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
#endconfig
définir les OSC 20

OSCCON = % 00001000

"mettre en place les serial port matériel
définir HSER_RCSTA 90H
définir HSER_TXSTA 24h
définir HSER_BAUD 31250

« ports i2c
SDA var PORTB.2
SCL var PORTB.1

' bouton variables

' variables de la colonne 1
buttonval1 var octets
bouncecheck1 var octets
buttonstate1 var bit [4]
J’ai var octets
valeur1 var octets

' variables de la colonne 2
buttonval2 var octets
bouncecheck2 var octets
buttonstate2 var bit [4]
value2 var octets

' variables de la colonne 3
buttonval3 var octets
bouncecheck3 var octets
buttonstate3 var bit [4]
value3 var octets

' colonne 4variables
buttonval4 var octets
bouncecheck4 var octets
buttonstate4 var bit [4]
Value4 var octets

' bankchange variable
bit var hors de la ville
var Downstate bit
octet de var j: j = 1
var c octets

' variables d’a à d (IC2)
un octet var [8]
var deux octets [8]
trois mots var [8]: trois = 0
mot de seuil var : seuil = 50
prevpotval var octet [8]

prevadval var mot [8]
currentadval var mot [8]

' variables d’a à d (IC1)
One1 var octet [8]
deux1 var octet [8]
three1 var mot [8]: trois = 0

prevpotval1 var octet [8]

prevadval1 var mot [8]
currentadval1 var mot [8]

' port direction
TRISA = % 00000000
trisb = % 00000001
trisc = % 10110110

« activer la RC4 et RC5
UCON.3 = 0
ucfg.3 = 1

« désactiver interne A à D
adcon0 = % 00111100
adcon1 = % 00001111

« lcd s’allume et régler la luminosité au maximum
faire une pause 1000
serout PORTB.3, N9600, [$ 1 b, 2 a$, $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"]

"intro flash

"rouge
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
faire une pause 400
' vert
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
faire une pause 400
' bleu
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
faire une pause 400
' purple
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
faire une pause 400
' blanc
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
faire une pause 400
"cyan
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
faire une pause 400

'_________________________

« lire Banque d’eeprom
lu 5, j

mainloop :
GoSub bankchange
GoSub keypress
GoSub potread
GoSub RVB

Goto mainloop

bankchange :

"la Banque vers le haut
Si portc.2 = 1 & Nord = 1 then
j = j + 1
Si j > 8 puis
j = 1
endif

' effacer toutes les notes
pour i = 0 à 128
hserout [$92, i, 0]
prochaine je
« écrire banque changement d’eeprom
écrire 5, j
Upstate = 0
endif
Si portc.2 = 0 & upstate = 0 then
Upstate = 1
endif

"la Banque vers le bas
Si portc.1 = 1 & downstate = 1 then
j = j - 1
Si j < 1 puis
j = 8
endif
' effacer toutes les notes
pour i = 0 à 128
hserout [$92, i, 0]
prochaine je
« écrire banque changement d’eeprom
écrire 5, j

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

« afficher les Banque
serout PORTB.3, N9600, [$Fe, $c0]
serout PORTB.3, N9600, [« Banque », « », #j, ""]

Si j = 1 then
c = 0
endif

Si j = 2 then
c = 16
endif

Si j = 3 then
c = 32
endif

Si j = 4 then
c = 48
endif

Si j = 5 then
c = 64
endif

Si j = 6 then
c = 80
endif

Si j = 7 then
c = 96
endif

Si j = 8 puis
c = 112
endif

retour

potread :
« trucs de potentiomètre adc---

« lire ic2
pour i = 1 à 8
trois [i] = 0

Si j’ai = 1 then
i2cwrite SDA, SCL, % 00010000, [% 10001100]
endif
Si j’ai = 2 then
i2cwrite SDA, SCL, % 00010000, [% 11001100]
endif
Si j’ai = 3 then
i2cwrite SDA, SCL, % 00010000, [% 10011100]
endif
Si j’ai = 4 then
i2cwrite SDA, SCL, % 00010000, [% 11011100]
endif
Si j’ai = 5 then
i2cwrite SDA, SCL, % 00010000, [% 10101100]
endif
Si j’ai = 6 then
i2cwrite SDA, SCL, % 00010000, [% 11101100]
endif
Si j’ai = 7 then
i2cwrite SDA, SCL, % 00010000, [% 10111100]
endif
Si j’ai = 8 puis
i2cwrite SDA, SCL, % 00010000, [% 11111100]
endif
"cette pause est importante de garder l’adc de sauter partout
Pause 4

i2cread SDA, SCL, % 00010001, [un [i], deux [i]]



trois [i] = un [i] | trois [i]


trois [i] = trois [i] << 4
deux [i] = deux [i] >> 4
trois [i] = deux [i] | trois [i]
currentadval [i] = trois [i]
« faire une pause 10

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

si abs (currentadval [i] - prevadval[i]) > = seuil puis
hserout [$B2, 13 + i, trois [i]]
prevpotval [i] = trois [i]
prevadval [i] = currentadval [i]
« afficher une valeur d
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#178, "", #(13+i), "", #three [i], ""]
endif
prochaine je

« lire ic1
pour i = 1 à 8
three1 [i] = 0

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

"cette pause est importante de garder l’adc de sauter partout
Pause 4

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



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


three1 [i] = three1 [i] << 4
deux1 [i] = deux1 [i] >> 4
three1 [i] = deux1 [i] | three1 [i]
currentadval1 [i] = three1 [i]
« faire une pause 10

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

si abs (currentadval1 [i] - prevadval1[i]) > = seuil puis
hserout [$B2, 13 + i, three1 [i]]
prevpotval1 [i] = three1 [i]
prevadval1 [i] = currentadval1 [i]
« afficher une valeur d
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#178, "", #(21+i), "", #three1 [i], ""]
endif
prochaine je

retour

KeyPress :

' bouton 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

faire une pause 1

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

Si buttonval1 = bouncecheck1 then

pour i = 0 à 3' compter de 0 à 3

valeur1 = buttonval1 >> je
si 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

si 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

prochaine je

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

faire une pause 1

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

Si buttonval2 = bouncecheck2 then

pour i = 0 à 3' compter de 0 à 3

value2 = buttonval2 >> je
Si 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

Si 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

prochaine je

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

faire une pause 1

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

Si buttonval3 = bouncecheck3 then

pour i = 0 à 3' compter de 0 à 3

value3 = buttonval3 >> je
Si 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

Si 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

prochaine je

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

faire une pause 1

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

Si buttonval4 = bouncecheck4 then

pour i = 0 à 3' compter de 0 à 3

Value4 = buttonval4 >> je
Si 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

Si 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

prochaine je

endif

retour

RGB :

Si j = 1 then
' jaune
Porta.1 = 0
pauseus 200

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

Si j = 2 then
"rouge
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
endif

Si j = 3 then
' vert
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
endif

Si j = 4 then
' bleu
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif

Si j = 5 then
' purple
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
endif

Si j = 6 then
' blanc
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
endif

Si j = 7 then
"cyan
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
endif

Si j = 8 puis
' bleu
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif
retour

Articles Liés

Hacking SNES touches pour faire des contrôleurs de Style Arcade pour Retropie

Hacking SNES touches pour faire des contrôleurs de Style Arcade pour Retropie

Hi et Merci d'avoir pris le temps de lire mon tutoriel étonnante. L'anniversaire de ma petite soeur est le 25 février, elle est en train de 29 et je suppose qu'elle a commencé un peu vieux sentiment parce qu'elle m'a demandé de donner d'elle l'une de
Contrôleur de DJ MIDI PACMOD

Contrôleur de DJ MIDI PACMOD

pour l'anniversaire de mon fils, je lui fis un contrôleur DJ conçu pour ressembler à une vieille machine d'arcade cabinet. Ce qui suit est un bref aperçu du processus pour le faire, y compris le code.Le Teensy a été choisi comme le cerveau en raison
Pédale de commande de Rocksmith (contrôleur de style pédale d’effet) pour XBox 360

Pédale de commande de Rocksmith (contrôleur de style pédale d’effet) pour XBox 360

il s'agit de mon premier Instructable.  Je suis heureux que mon timing coïncidera avec la date limite d'inscription pour le Challenge 2 Game.Life! J'ai essayé de faire instructables avant, mais il semble être à mi-chemin à travers mes projets, j'ai a
Midi simple flûte/enregistreur contrôleur (EWI)

Midi simple flûte/enregistreur contrôleur (EWI)

Comme un enfant (il y a environ 30 ans), j'ai commencé mes cours de musique à la flûte (un enregistreur pour être précis) et maintenant je veux une version électronique moderne de cet instrument (un Instrument à vent électronique telle qu'elle est ap
IPAD MINI MINIMOOG contrôleur style

IPAD MINI MINIMOOG contrôleur style

J'ai toujours voulu faire une sorte de synthé style controller pour mon iPad synthés et utilisez un filtre monotrons dans la sortie.Ce Instructable sera sur la façon de construire un minimoog iPad-mini contrôleur de style.COMPOSANTS DE BASEun grand n
CoreConduit : Jardin intérieur contrôleur système

CoreConduit : Jardin intérieur contrôleur système

Un contrôleur de jardin nous permet de gérer l'environnement de contrôle, ventilateurs, appareils de chauffage, lampes, pompes et nous en aviser quand le jardin a besoin de notre attention.Le jardin contrôleur système vous aidera à se développer :Ver
CoreConduit : Automatisé contrôleur de jardin

CoreConduit : Automatisé contrôleur de jardin

Un contrôleur de jardin nous permet de gérer l'environnement de contrôle, ventilateurs, appareils de chauffage, lampes, pompes et nous en aviser quand le jardin a besoin de notre attention.http://hydromazing.coreconduit.comÉtape 1: Compiler, téléchar
Contrôleur de LED-RGB

Contrôleur de LED-RGB

Il s'agit de mon contrôleur RGB-LED fait maison.Il est connecté à l'ordinateur qui me permet de modifier la couleur à la main, ou les changements de couleur à la musique, ou son ambilight similaire, les voyants ont la couleur principale de mon écran.
Arduino Due selon Fractal Audio Axe-FX II contrôleur

Arduino Due selon Fractal Audio Axe-FX II contrôleur

J'ai utilisé des effets guitare et préamplis comme la Digitech GSP-21 et de l'ART SGX2000 dans mon banc direct depuis le début des années 90. Bien que les grandes unités pour leur période, il était temps pour une mise à niveau. Après avoir lu quelque
Contrôleur MIDI DJ de arcade style

Contrôleur MIDI DJ de arcade style

>>> ce n'est pas encore tout à fait fini car j'ai armé un peu du circuit vers le haut. Je vais mettre à jour l'instructable et charger une vidéo lorsqu'elle est triée <<<J'ai été DJ pendant une dizaine d'années maintenant, et pour les de
Contrôleur de MIDI personnalisé construit

Contrôleur de MIDI personnalisé construit

Im entrant dans cette jnstructable au concours d'instruments de musique, si vous l'aimez s'il vous plaît votez pour moi cos j'aimerais bien un nouveau synthé ! Comme un producteur de musique électronique/interprète, j'ai rassemblé quelques contrôleur
Contrôleur MIDI contrôlé la flamme

Contrôleur MIDI contrôlé la flamme

Un énorme problème dans le monde de la production musicale numérique garde cette chaleur analogique (qui a résonné de tubes et systèmes de bobine à bobine) en musique numérique moderne. Beaucoup jurent que les systèmes analogiques ont un son qui ne p
Convertir un jouet secouru un contrôleur MIDI

Convertir un jouet secouru un contrôleur MIDI

dans ce Instructable, je vous guidera dans le processus de conversion de jouet d'enfant secouru faire du bruit en un instrument de musique vraiment utile à l'aide de MIDI ! Prenez un moment pour juste coup d'oeil sur les titres des étapes de ce Instr
Week-end maison contrôleur (Work in progress) Smart

Week-end maison contrôleur (Work in progress) Smart

Remarque : Cette instructable est encore travaux en cours (WIP), puisque je n'ai pas beaucoup de temps à cause de l'école et j'ai des problèmes avec Edison. Et parce que je suis perfectionniste, tandis que l'instructable est en état de travaux en cou