Sugarcube MIDI Controller (25 / 38 stap)

Stap 25: Seriële communicatie


Op dit punt in het project ik heb een beetje ongeduldig en wilde beginnen met het maken van sommige geluiden, zodat ik sommige dingen aan de firmware te maken van de Arduino verzenden en ontvangen van informatie serieel wordt toegevoegd. Ik heb gepost de onderstaande code. Ik gebruikte een timer onderbreken om te houden van de Arduino inspelen op seriële berichten, kunt u lezen een beetje meer over hoe dat hier werkt. (als u deze code wilt testen, gebruik de app verbonden gaat, de nieuwere versie van de app van de beat slicer op github is een beetje anders).

 //BUTTON TEST w/ 74HC595 and 74HC165 and serial communication //by Amanda Ghassaei //June 2012 /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * */ //this firmware will send data back and forth with the maxmsp patch "beat slicer" //pin connections int ledLatchPin = 6; int ledClockPin = 5; int ledDataPin = 7; int buttonLatchPin = 4; int buttonClockPin = 3; int buttonDataPin = 2; //looping variables byte i; byte j; byte k; byte ledByte; //storage for led states, 4 bytes byte ledData[] = {0, 0, 0, 0}; //storage for buttons, 4 bytes byte buttonCurrent[] = {0,0,0,0}; byte buttonLast[] = {0,0,0,0}; byte buttonEvent[] = {0,0,0,0}; byte buttonState[] = {0,0,0,0}; //button debounce counter- 16 bytes byte buttonDebounceCounter[4][4]; void setup() { DDRD = 0xFA;//set pins D7-D4 as output, D2 as input Serial.begin(57600); cli();//stop interrupts //set timer2 interrupt every 128us TCCR2A = 0;// set entire TCCR2A register to 0 TCCR2B = 0;// same for TCCR2B TCNT2 = 0;//initialize counter value to 0 // set compare match register for 7.8khz increments OCR2A = 255;// = (16*10^6) / (7812.5*8) - 1 (must be <256) // turn on CTC mode TCCR2A |= (1 << WGM21); // Set CS11 bit for 8 prescaler TCCR2B |= (1 << CS11); // enable timer compare interrupt TIMSK2 |= (1 << OCIE2A); sei();//allow interrupts } // buttonCheck - checks the state of a given button. //this buttoncheck function is largely copied from the monome 40h firmware by brian crabtree and joe lake void buttonCheck(byte row, byte index) { if (((buttonCurrent[row] ^ buttonLast[row]) & (1 << index)) && // if the current physical button state is different from the ((buttonCurrent[row] ^ buttonState[row]) & (1 << index))) { // last physical button state AND the current debounced state if (buttonCurrent[row] & (1 << index)) { // if the current physical button state is depressed buttonEvent[row] = 1 << index; // queue up a new button event immediately buttonState[row] |= (1 << index); // and set the debounced state to down. } else{ buttonDebounceCounter[row][index] = 12; } // otherwise the button was previously depressed and now // has been released so we set our debounce counter. } else if (((buttonCurrent[row] ^ buttonLast[row]) & (1 << index)) == 0 && // if the current physical button state is the same as (buttonCurrent[row] ^ buttonState[row]) & (1 << index)) { // the last physical button state but the current physical // button state is different from the current debounce // state... if (buttonDebounceCounter[row][index] > 0 && --buttonDebounceCounter[row][index] == 0) { // if the the debounce counter has // been decremented to 0 (meaning the // the button has been up for // kButtonUpDefaultDebounceCount // iterations/// buttonEvent[row] = 1 << index; // queue up a button state change event if (buttonCurrent[row] & (1 << index)){ // and toggle the buttons debounce state. buttonState[row] |= (1 << index); } else{ buttonState[row] &= ~(1 << index); } } } } void shift(){ for (i=0;i<4;i++){ buttonLast[i] = buttonCurrent[i]; byte dataToSend = (1 << (i+4)) | (15 & ~ledData[i]); // set latch pin low so the LEDs don't change while sending in bits digitalWrite(ledLatchPin, LOW); // shift out the bits of dataToSend shiftOut(ledDataPin, ledClockPin, LSBFIRST, dataToSend); //set latch pin high so the LEDs will receive new data digitalWrite(ledLatchPin, HIGH); //once one row has been set high, receive data from buttons //set latch pin high digitalWrite(buttonLatchPin, HIGH); //shift in data buttonCurrent[i] = shiftIn(buttonDataPin, buttonClockPin, LSBFIRST) >> 3; //latchpin low digitalWrite(buttonLatchPin, LOW); for (k=0;k<4;k++){ buttonCheck(i,k); if (buttonEvent[i]<> 1) & 3; byte ledx = (ledByte >> 3) & 3; if (ledstate){ ledData[ledy] |= 8 >> ledx; } else{ ledData[ledy] &= ~ (8 >> ledx); } }//end if serial available }//end do while (Serial.available() > 8); } void loop() { shift();//updates leds and receives data from buttons } 

Ik stuurde deze seriële gegevens naar een toepassing van de audioverwerking schreef ik in MaxMSP. U kunt downloaden van deze toepassing hieronder (genaamd beat slicer) en open het met MaxMSP of MaxRuntime (gratis versie) hier. Ik ben het runnen van Max 5, ik neem aan dat het zal werken op Max 6 ook. Het zal prompt u voor uitgezocht een audiobestand (mp3, wav, aiff). Vervolgens kunt u het bewerken van deze audio-bestand met behulp van de knop Raster zoals in de video hieronder:

Gerelateerde Artikelen

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
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
Zelfgemaakte MPC-stijl MIDI controller

Zelfgemaakte MPC-stijl MIDI controller

1.0 INLEIDINGIk besloot om te bouwen en ontwerpen van een midi-controller die wordt gebruikt om opdrachten te verzenden naar een computer met een DAW (digital audio workstation) om te controleren van verschillende parameters binnen het. De DAW ik geb
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
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
Arduino MIDI Controller

Arduino MIDI Controller

Een MIDI-controller is een stuk van apparatuur die genereert en stuurt MIDI-data naar MIDI-apparaten. Kortom, hebt u knoppen op uw MIDI-controller, kun je deze knoppen om elk geluid dat je door muzieksoftware wilt programmeren (ex.: Ableton, Garage B
Omzetten van een geredde speelgoed in een MIDI-controller

Omzetten van een geredde speelgoed in een MIDI-controller

In dit Instructable, zal ik u door het proces van het omzetten van een geredde lawaai maken Kinder speelgoed in een eigenlijk nuttig muziekinstrument met behulp van MIDI lopen! Neem een moment om gewoon blik op de titels van de stappen in dit Instruc
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
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
Laser Midi-Controller - (Laser geactiveerde Midi Keyboard)

Laser Midi-Controller - (Laser geactiveerde Midi Keyboard)

Het doel van het project:"Het bouwen van een laser geactiveerde midi-controller, met behulp van standaard elektrische componenten en een gerecycled midi keyboard."Stap 1.Vind een gerecycleerde midi keyboard / controller.Stap 2.Construeer een las