First draft of the code to convert keyboard input to midi. There is a bug somewhere, the midi sounds continuously with new notes added but not switched off.
// Convert thirteen input wires from bass pedal into midi output // Rob Ives 2012 // This code is realeased into the Public Domain. #include <wire.h> unsigned char data1; //data from chip 1 unsigned char data2; //data from chip 2 unsigned char keys[16]; //storage array for key states. byte notevalue = 0; //lowest note on the bass board void setup() // the setup loop { Wire.begin(); // setup the I2C bus Serial.begin(9600); // serial set up for midi for (unsigned int i = 0; i < 16; i++) { //clear the keys array keys[i] = 1; } } // ---------------------------------------------------------------- void loop() // the main loop { byte velocity; //note velocity velocity = 90; //initially set at 90 - add volume control later Wire.requestFrom(0x38, 1); // read the data from chip 1 into data1 if (Wire.available()){ data1 = Wire.read(); } Wire.requestFrom(0x39, 1); // read the data freom chip 2 into data2 if (Wire.available()){ data2 = Wire.read(); } for (unsigned char i = 0; i < 8; i++) {// puts data bits from chip 1 into keys array if (keys[i] != ((data1 >> i) & 1)){ // edge detect. If the key state has changed. if (keys[i] == 1){// if the key was on send an Start Note midi command playnote(0x90, notevalue + i, velocity); // channel 1 midi on } else{ // send a end note midi command playnote(128, notevalue + i, 0); // channel 1 midi off } } keys[i] = ((data1 >> i) & 1); // set the key variable to the current state. } /* for (unsigned char i = 0; i < 8; i++) {// puts data bits from chip 2 into keys array if (keys[i+8] != ((data2 >> i) & 1)){ // edge detect. If the key state has changed. if (keys[i+8] == 1){// if the key was on send an start Note midi command //Serial.print(i+8); //Serial.println(" Midi On"); Serial.print(0x80); // channel 1 midi on Serial.print(notevalue+i+8); //note value Serial.println(velocity); // note velocity } else{ // send a end note midi command //Serial.print(i+8); //Serial.println(" Midi Off"); Serial.write(0x90); // channel 1 midi off Serial.write(notevalue+i+8); //note value Serial.write(velocity); // note velocity } } keys[i + 8] = ((data2 >> i) & 1); } */ /* for (unsigned char i = 0; i < 16; i++) { Serial.print(keys[i]); } Serial.println("-"); */ } //------------------------------------- //play note void playnote(byte cmd, byte data1, byte data2) { //--------------- debug Serial.print(cmd); Serial.print(" | "); Serial.print(data1); Serial.print(" | "); Serial.println(data2); //----------------- Serial.write(cmd); Serial.write(data1); Serial.write(data2); } |
Hi I have just bought the exact same bass pedals and I want to do this project aswell. I have everything but the code I’ll give this a try later. How is the debugging going? also I wonder how hard it would be to add a octave switch?
Thanks