Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //mux variables
- #include <SPI.h>
- #include <Wire.h>
- #include <MIDI.h>
- #define MPU 0x68 // I2C address of the MPU-6050
- const byte input = 11; // digital input to arduino from mux
- const byte c=10;
- const byte b=9;
- const byte a=8;
- const int button1Pin = 4;
- const int button2Pin = 5;
- const int button3Pin = 2;
- const int button4Pin = 7;
- const int DEFAULT_MIDI_CHANNEL = 1;
- MIDI_CREATE_DEFAULT_INSTANCE();
- int button1State = 0;
- int button2State = 0;
- int button3State = 0;
- int button4State = 0;
- int note1 = 0;
- int note2 = 0;
- int note3 = 0;
- int note4 = 0;
- int note5 = 0;
- int note6 = 0;
- int note7 = 0;
- int note8 = 0;
- int note9 = 0;
- int note10 = 0;
- int note11 = 0;
- int note12 = 0;
- int led1 = 3;
- int led2 = 6;
- int led3 = A1; // bush button LED
- int led4 = A2; // on off LED
- int brightness1 = 0;
- int brightness2 = 0;
- // to store the values from mux
- // bool val[] = {0,0,0,0,0,0,0,0};
- byte numero;
- double AcX,AcY,AcZ;
- int Pitch, Roll;
- int Yf;
- int Yb;
- int Xf;
- int Xb;
- void setup() {
- MIDI.begin(MIDI_CHANNEL_OMNI);
- Serial.begin(31250);
- init_MPU(); // Inizializzazione MPU6050
- pinMode(c, OUTPUT);
- pinMode(b, OUTPUT);
- pinMode(a, OUTPUT);
- pinMode(led1, OUTPUT);
- pinMode(led2, OUTPUT);
- pinMode(led3, OUTPUT);
- pinMode(button1Pin, INPUT);
- pinMode(button2Pin, INPUT);
- pinMode(button3Pin, INPUT);
- pinMode(button4Pin, INPUT);
- pinMode(input, INPUT);
- }
- void loop() {
- int mc1 =0;
- int mc2 =0;
- int mc3 =0;
- int mc4 =0;
- FunctionsMPU(); // Acquisisco assi AcX, AcY, AcZ.
- Roll = FunctionsPitchRoll(AcX, AcY, AcZ); //Calcolo angolo Roll
- Pitch = FunctionsPitchRoll(AcY, AcX, AcZ); //Calcolo angolo Pitch
- int xposition = map(Roll, -90, 90, 0, 179);
- int yposition = map(Pitch, -90, 90, 179, 0);
- int button1State = digitalRead(button1Pin);
- int button2State = digitalRead(button2Pin);
- int button3State = digitalRead(button3Pin);
- int button4State = digitalRead(button4Pin);
- analogWrite(led1, brightness1);
- analogWrite(led2, brightness2);
- digitalWrite(led3, LOW);
- digitalWrite(led4, HIGH);
- numero = 0;
- for(byte i=0;i<8;i++) {
- numero = numero | ( digitalRead(input) << i) ;
- //select mux input
- digitalWrite(a, bitRead(i, 0));
- digitalWrite(b, bitRead(i, 1));
- digitalWrite(c, bitRead(i, 2));
- button1State = digitalRead(button1Pin);
- button2State = digitalRead(button2Pin);
- button3State = digitalRead(button3Pin);
- button4State = digitalRead(button4Pin);
- }
- if (button1State == HIGH) {
- // if note not playing
- if (note1 == 0) {
- // play note (note number, velocity, channel)
- // more info: http://arduinomidilib.sourceforge.net/a00001.html
- // MIDI notes chart http://www.phys.unsw.edu.au/jw/notes.html
- // 55 = G3, 127 = trigger note with max volume
- MIDI.sendNoteOn(42, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note1 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note1 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(42, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note1 = 0;
- }
- if (button2State == HIGH) {
- // if note not playing
- if (note2 == 0) {
- MIDI.sendNoteOn(43, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note2 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note2 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(43, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note2 = 0;
- }
- if (button3State == HIGH) {
- // if note not playing
- if (note3 == 0) {
- MIDI.sendNoteOn(44, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note3 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note3 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(44, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note3 = 0;
- }
- if (button4State == HIGH) {
- // if note not playing
- if (note4 == 0) {
- MIDI.sendNoteOn(45, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note4 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note4 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(45, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note4 = 0;
- }
- if (numero == 1) {
- // if note not playing
- if (note5 == 0) {
- MIDI.sendNoteOn(46, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note5 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note5 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(46, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note5 = 0;
- }
- if (numero == 2) {
- // if note not playing
- if (note6 == 0) {
- MIDI.sendNoteOn(47, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note6 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note6 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(47, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note6 = 0;
- }
- if (numero == 4) {
- // if note not playing
- if (note7 == 0) {
- MIDI.sendNoteOn(48, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note7 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note7 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(48, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note7 = 0;
- }
- if (numero == 8) {
- // if note not playing
- if (note8 == 0) {
- MIDI.sendNoteOn(49, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note8 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note8 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(49, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note8 = 0;
- }
- if (numero == 16) {
- // if note not playing
- if (note9 == 0) {
- MIDI.sendNoteOn(50, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note9 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note9 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(50, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note9 = 0;
- }
- if (numero == 32) {
- // if note not playing
- if (note10 == 0) {
- MIDI.sendNoteOn(51, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note10 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note10 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(51, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note10 = 0;
- }
- if (numero == 64) {
- // if note not playing
- if (note11 == 0) {
- MIDI.sendNoteOn(52, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note11 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note11 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(52, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note11 = 0;
- }
- if (numero == 128) {
- // if note not playing
- if (note12 == 0) {
- MIDI.sendNoteOn(53, 127, DEFAULT_MIDI_CHANNEL);
- // note is playing
- note12 = 1;
- }
- // when button released
- digitalWrite(led3, HIGH);
- } else {
- // if note playing
- if (note12 == 1) {
- // if playing - stop
- MIDI.sendNoteOff(53, 0, DEFAULT_MIDI_CHANNEL);
- }
- // if button released note is off
- note12 = 0;
- }
- //serial printing
- //Serial.print("Numero: ");
- //Serial.println(numero);
- if (yposition < 80 && yposition > 10) {
- int Yf = yposition;
- brightness1 = map(Yf, 79, 11, 0, 255);
- mc1 = map(Yf, 79, 11, 0, 127);
- MIDI.sendControlChange(1, mc1, DEFAULT_MIDI_CHANNEL);
- }
- if (yposition > 100 && yposition < 170) {
- int Yb = yposition;
- brightness1 = map(Yb, 101, 169, 0, 255);
- mc2 = map(Yb, 101, 169, 0, 127);
- MIDI.sendControlChange(2, mc2, DEFAULT_MIDI_CHANNEL);
- }
- if (xposition < 80 && xposition > 10) {
- int xf = xposition;
- brightness2 = map(xf, 79, 11, 0, 255);
- mc3 = map(xf, 79, 11, 0, 127);
- MIDI.sendControlChange(3, mc3, DEFAULT_MIDI_CHANNEL);
- }
- if (xposition > 100 && xposition < 170) {
- int xb = xposition;
- brightness2 = map(xb, 101, 169, 0, 255);
- mc4 = map(xb, 101, 169, 0, 127);
- MIDI.sendControlChange(4, mc4, DEFAULT_MIDI_CHANNEL);
- }
- }
- void init_MPU(){
- Wire.begin();
- Wire.beginTransmission(MPU);
- Wire.write(0x6B); // PWR_MGMT_1 register
- Wire.write(0); // set to zero (wakes up the MPU-6050)
- Wire.endTransmission(true);
- delay(1000);
- }
- //Function to calculate angles
- double FunctionsPitchRoll(double A, double B, double C){
- double DatoA, DatoB, Value;
- DatoA = A;
- DatoB = (B*B) + (C*C);
- DatoB = sqrt(DatoB);
- Value = atan2(DatoA, DatoB);
- Value = Value * 180/3.14;
- return (int)Value;
- }
- //Function to get X,Y,Z from MPU6050
- void FunctionsMPU(){
- Wire.beginTransmission(MPU);
- Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
- Wire.endTransmission(false);
- Wire.requestFrom(MPU,6,true); // request a total of 14 registers
- AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
- AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
- AcZ=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
- }
Add Comment
Please, Sign In to add comment