Hemgjord MPC stil MIDI controller (2 / 6 steg)
Steg 2:
3.3 knapptryckning"Skanna" är den processen jag brukade multiplex button-kontrollen så jag inte skulle behöva använda 16 stift på mikrokontroller för 16 knappar. Istället fick jag bara använda 8 stift. Om du refererar till steg 4 har jag inkluderat schematiskt för knappen pad jag köpte från sparkfun elektronik och har angivit i signalvägen för varje stift på knappen pad PCB. Som ni kan se finns det separata stift för att kontrollera lysdioderna och kontrollera knapparna. LED kontroll stiften kommer att diskuteras i ett senare avsnitt.
Mikrokontroller är upp det så att alla kolumner är utgångar och alla rader är ingångarna. Om du refererar till den knapp pad schematiskt, börjar jag genom att ange den första kolumnen (som är RB4 på bild) till noll. Jag ställa in resten av kolumnerna till 1(RB5,RB6,RB7). Programmet kontrollerar sedan status för alla rader på den samma time(RC4,RC5,RC7,RC0). Programmet pausar för 1 millisekund och kontrollerar dessa stift igen. Sedan växlar och knappar ofta bounce, orsakar detta oönskade krusningar på signalen, så vi eliminera detta med en process som kallas de studsande. Om värdena från de två kontrollerna är lika då det betyder att det var en giltig knapptryckning på kolumnen och inte en studs. Fylls sedan i en for-loop, som kontrollerar status för var och en av raderna. Om en knapp trycks på kolumnen, läses den som en nolla på motsvarande rad eftersom kolumnen sätts till noll. Eftersom alla stiften på raderna har en 10 k pull-up resistor (visas inte på knappen pad Schematisk), om en knapp inte trycks kommer att raden pin läsas som en 1.
När en knapptryckning upptäcks på kolumnen skickar det 3 byte MIDI-meddelanden över hårdvaran seriell port på bild. Den första byten är 0x92 som identifieras som en channel 4 noterar på meddelande. Den andra byten är som anmärkning är att aktiveras, vilket kan vara någonstans mellan 0 och 127. Eftersom jag använder en for-loop att kontrollera var och en av raderna jag använder den för loop variabel "i" Ange som noterar jag vill på. Eftersom jag också använder 8 banker av anteckningar (128 anteckningar totala) lägga jag till den aktuella bank variabeln som är "c". Banken switch processen kommer att diskuteras vidare i avsnitt 3.4. Den sista byten är den hastighet som också kan vara någonstans mellan 0 och 127, men för alla knappar jag in det värdet till 100. Nästa rad i koden skickar sedan samma kommandon i ASCII-text till en LCD över en mikrokontroller pin jag konfigurerat för mjukvaran följetong ut.
Mikrokontroller måste också upptäcka när en anteckning släpps eftersom den behöver för att skicka en annan kommando för att inaktivera det samma ton. Inom samma for-loop detta görs genom att skicka samma 3 byte utom den sista byte(velocity), är satt till noll som inaktiverar denna anteckning. Om detta kommando inte skickas, skulle alltså stanna obestämd tid, även om knappen släpptes.
Fram till denna punkt har vi bara kollade status, och skickas kommandon för 4 knapparna på den första kolumnen. Hela denna process är upprepade 3 gånger, en för varje kolumn. I nästa ögla för jag sätter nästa kolumn och ange resten till 1, och göra samma sak för de återstående kolumnerna.
3.4 bank förändring
Eftersom det finns 128 olika midi anteckningar som kan skickas som ett MIDI-kommando jag ville kunna göra full använda av dem alla, så jag lagt till möjligheten att banken mellan grupper av 16 anteckningar i taget. För att göra detta jag lagt två tryck-knappar på panelen under LCD-skärmen (se figur 1.0). För att banken, tillfrågade jag tillförsel av stiftet på mikrokontroller jag in som indata för banking. Eftersom jag har ställt in dessa microcontroller ingångar med en pull-down motstånd kollade jag en låg till hög övergång när växeln ansluter till VDD. När övergången upptäcktes, La jag en att variabeln "j". Jag ställa upp så när "j" var mer än 8 det återställas till noll. Jag ville också möjligheten att spara banken på icke-flyktiga eeprom så om för vad någonsin skäl jag måste ta bort makten att arrangera kablar MIDI-controller startar upp och ställer automatiskt in sig tillbaka till banken var på innan det stängdes av. Jag hittade också att om jag håller en anteckning och tryckte på bank-knappen samtidigt, MIDI-controller förlorat spåret som Obs var pressas så att Anm skulle aldrig stänga av. Att fixa detta jag gjorde en for-loop som stänger av alla journalanteckningar på samma gång när som helst jag bank upp eller ner. Jag använde samma kod för banken ner knappen utom i stället för att lägga till en till "j" Jag dras en från "j" och har det återställt till 8 om det gick under 1. Jag ställer upp så "j" som en global variabel och används under olika delar av programmet.
I slutet av denna funktion, jag kolla vad värdet j är och ställa in variabeln "c" därmed. "c" aktiverar MIDI-controller att banken upp 16 anteckningar i taget genom att lägga det till vilken knappsatsen du trycker. Till exempel om jag vill midi Obs nummer 35 av, jag måste gå till banken 3. "c" läggs till som nyckel nummer jag att trycka på. Så om jag att trycka på knappen nummer 3 på knappsatsen, MIDI-controller läggs värdet "c", är som är i detta fall 32.
3.5 RGB
Jag avsätta 3 stift på mikrokontroller att styra alla RGB lysdioder. RA0 styr alla röda lampor, RA1 styr alla gröna lampor och RA2 alla blå. Varje pin styr alla lampor genom att ansluta till porten på en MOSFET som ligger på LED förare ombord (se steg 4). Lysdioderna måste att vara drivande sätt eftersom den ström som krävs för att köra alla lysdioder överskred microctrollers nuvarande sourcing förmågor.
Denna RGB funktion i programmet kontrollerar i princip vilken bank av anteckningar MIDI-controller är i genom att kontrollera värdet för variabeln "j". För att få de olika färgerna kombineras jag helt enkelt olika färguppsättningar. Till exempel att få färgen lila, slår på röda och blå på samma gång genom att ange RA0 och RA2 till hög och ange RA1 till låg.