Arduino Polska Forum

Pełna wersja: Arduino usb-midi
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam. Z powodu kwarantanny znalazłem trochę czasu na podłubanie w kabelkach. Ale dużo pozapominałem lub nie umiem więc proszę o wyrozumiałość. Stworzyłem kontroler midi na bazie klona Funduino  Uno. Komputer widzi go jako urządzenie midi poprzez kabel Usb. Zawiera ono 12 przycisków i 6 potencjometrów. Działa super w programach muzycznych, ale chciałbym podłączyć zewnętrzną diodę Led która działałaby jak TX. Arduino będzie schowane w obudowie kontolera midi, a chciałbym żeby zewnętrzna dioda zapalałą się po wciśnięciu jednego z 12 przycisków, a także po przekręceniu gałkami potencjomertów.Pozostały wolne piny 0 (RX) i 1(TX).

Tutaj kod:

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

int buttonApin = 13;  //footswitch A
int buttonBpin = 12;  //footswitch B
int buttonCpin = 11;  //footswitch C
int buttonDpin = 10;
int buttonEpin = 9;
int buttonFpin = 8;
int buttonGpin = 7;
int buttonHpin = 6;
int buttonIpin = 5;
int buttonJpin = 4;
int buttonKpin = 3;
int buttonLpin = 2;

int analogpot1 = A0;  //knob 1
int analogpot2 = A1;  //knob 2
int analogpot3 = A2;
int analogpot4 = A3;
int analogpot5 = A4;
int analogpot6 = A5;

int analogpot1Old = 0;
int analogpot2Old = 0;
int analogpot3Old = 0;
int analogpot4Old = 0;
int analogpot5Old = 0;
int analogpot6Old = 0;
int analogpot1New = 0;
int analogpot2New = 0;
int analogpot3New = 0;
int analogpot4New = 0;
int analogpot5New = 0;
int analogpot6New = 0;

#define analogpot1CC 54
#define analogpot2CC 55
#define analogpot3CC 56
#define analogpot4CC 57
#define analogpot5CC 58
#define analogpot6CC 59

void setup() {
  // put your setup code here, to run once:
MIDI.begin (); // MIDI START

pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
pinMode(buttonCpin, INPUT_PULLUP);
pinMode(buttonDpin, INPUT_PULLUP);
pinMode(buttonEpin, INPUT_PULLUP);
pinMode(buttonFpin, INPUT_PULLUP);
pinMode(buttonGpin, INPUT_PULLUP);
pinMode(buttonHpin, INPUT_PULLUP);
pinMode(buttonIpin, INPUT_PULLUP);
pinMode(buttonJpin, INPUT_PULLUP);
pinMode(buttonKpin, INPUT_PULLUP);
pinMode(buttonLpin, INPUT_PULLUP);

pinMode(analogpot1, INPUT);
pinMode(analogpot2, INPUT);
pinMode(analogpot3, INPUT);
pinMode(analogpot4, INPUT);
pinMode(analogpot5, INPUT);
pinMode(analogpot6, INPUT);

//Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:

static bool buttonAvalueOld = HIGH;
static bool buttonBvalueOld = HIGH;
static bool buttonCvalueOld = HIGH;
static bool buttonDvalueOld = HIGH;
static bool buttonEvalueOld = HIGH;
static bool buttonFvalueOld = HIGH;
static bool buttonGvalueOld = HIGH;
static bool buttonHvalueOld = HIGH;
static bool buttonIvalueOld = HIGH;
static bool buttonJvalueOld = HIGH;
static bool buttonKvalueOld = HIGH;
static bool buttonLvalueOld = HIGH;

//footswitches
bool buttonAvalueNew = digitalRead(buttonApin);
bool buttonBvalueNew = digitalRead(buttonBpin);
bool buttonCvalueNew = digitalRead(buttonCpin);
bool buttonDvalueNew = digitalRead(buttonDpin);
bool buttonEvalueNew = digitalRead(buttonEpin);
bool buttonFvalueNew = digitalRead(buttonFpin);
bool buttonGvalueNew = digitalRead(buttonGpin);
bool buttonHvalueNew = digitalRead(buttonHpin);
bool buttonIvalueNew = digitalRead(buttonIpin);
bool buttonJvalueNew = digitalRead(buttonJpin);
bool buttonKvalueNew = digitalRead(buttonKpin);
bool buttonLvalueNew = digitalRead(buttonLpin);

    if (buttonAvalueNew != buttonAvalueOld){
      if (buttonAvalueNew == LOW){
      MIDI.sendNoteOn(54, 127, 1);
      //Serial.println("Note C On");
      }
      else {
      MIDI.sendNoteOff(54, 0, 1);
      //Serial.println("Note C Off");
      }
      buttonAvalueOld = buttonAvalueNew;
    }

      if (buttonBvalueNew != buttonBvalueOld){
      if (buttonBvalueNew == LOW){
      MIDI.sendNoteOn(42, 127, 1);
      //Serial.println("Note E On");
      }
      else {
      MIDI.sendNoteOff(42, 0, 1);
      //Serial.println("Note E Off");
      }
      buttonBvalueOld = buttonBvalueNew;
    }

      if (buttonCvalueNew != buttonCvalueOld){
      if (buttonCvalueNew == LOW){
      MIDI.sendNoteOn(36, 127, 1);
      //Serial.println("Note F On");
      }
      else {
      MIDI.sendNoteOff(36, 0, 1);
      //Serial.println("Note F Off");
      }
      buttonCvalueOld = buttonCvalueNew;
    }
   
      if (buttonDvalueNew != buttonDvalueOld){
      if (buttonDvalueNew == LOW){
      MIDI.sendNoteOn(37, 127, 1);
      //Serial.println("Note G On");
      }
      else {
      MIDI.sendNoteOff(37, 0, 1);
      //Serial.println("Note G Off");
      }
      buttonDvalueOld = buttonDvalueNew;
    }
   
      if (buttonEvalueNew != buttonEvalueOld){
      if (buttonEvalueNew == LOW){
      MIDI.sendNoteOn(44, 127, 1);
      //Serial.println("Note A On");
      }
      else {
      MIDI.sendNoteOff(44, 0, 1);
    // Serial.println("Note A Off");
      }
      buttonEvalueOld = buttonEvalueNew;
    }

      if (buttonFvalueNew != buttonFvalueOld){
      if (buttonFvalueNew == LOW){
      MIDI.sendNoteOn(46, 127, 1);
      //Serial.println("Note A On");
      }
      else {
      MIDI.sendNoteOff(46, 0, 1);
    // Serial.println("Note A Off");
      }
      buttonFvalueOld = buttonFvalueNew;
    }

      if (buttonGvalueNew != buttonGvalueOld){
      if (buttonGvalueNew == LOW){
      MIDI.sendNoteOn(38, 127, 1);
      //Serial.println("Note A On");
      }
      else {
      MIDI.sendNoteOff(38, 0, 1);
    // Serial.println("Note A Off");
      }
      buttonGvalueOld = buttonGvalueNew;
    }

      if (buttonHvalueNew != buttonHvalueOld){
      if (buttonHvalueNew == LOW){
      MIDI.sendNoteOn(40, 127, 1);
      //Serial.println("Note A On");
      }
      else {
      MIDI.sendNoteOff(40, 0, 1);
    // Serial.println("Note A Off");
      }
      buttonHvalueOld = buttonHvalueNew;
    }

      if (buttonIvalueNew != buttonIvalueOld){
      if (buttonIvalueNew == LOW){
      MIDI.sendNoteOn(43, 127, 1);
      //Serial.println("Note A On");
      }
      else {
      MIDI.sendNoteOff(43, 0, 1);
    // Serial.println("Note A Off");
      }
      buttonIvalueOld = buttonIvalueNew;
    }

      if (buttonJvalueNew != buttonJvalueOld){
      if (buttonJvalueNew == LOW){
      MIDI.sendNoteOn(45, 127, 1);
      //Serial.println("Note A On");
      }
      else {
      MIDI.sendNoteOff(45, 0, 1);
    // Serial.println("Note A Off");
      }
      buttonJvalueOld = buttonJvalueNew;
    }

      if (buttonKvalueNew != buttonKvalueOld){
      if (buttonKvalueNew == LOW){
      MIDI.sendNoteOn(47, 127, 1);
      //Serial.println("Note A On");
      }
      else {
      MIDI.sendNoteOff(47, 0, 1);
    // Serial.println("Note A Off");
      }
      buttonKvalueOld = buttonKvalueNew;
    }

      if (buttonLvalueNew != buttonLvalueOld){
      if (buttonLvalueNew == LOW){
      MIDI.sendNoteOn(48, 127, 1);
      //Serial.println("Note A On");
      }
      else {
      MIDI.sendNoteOff(48, 0, 1);
    // Serial.println("Note A Off");
      }
      buttonLvalueOld = buttonLvalueNew;
    }
//potentiometers

int pot1 = analogRead(A0);
int pot2 = analogRead(A1);
int pot3 = analogRead(A2);
int pot4 = analogRead(A3);
int pot5 = analogRead(A4);
int pot6 = analogRead(A5);
int analogpot1New = analogRead(A0);
int analogpot2New = analogRead(A1);
int analogpot3New = analogRead(A2);
int analogpot4New = analogRead(A3);
int analogpot5New = analogRead(A4);
int analogpot6New = analogRead(A5);

    if (analogpot1New - analogpot1Old >= 35 || analogpot1Old - analogpot1New >= 35) {
      analogpot1Old = analogpot1New;
      analogpot1New = (map(analogpot1New, 1023, 0, 0, 120));
      analogpot1New = (constrain(analogpot1New, 0, 120));
      MIDI.sendControlChange(analogpot1CC, analogpot1New, 1);
//      Serial.print ("pot: ");
//      Serial.println(pot1);
//      Serial.print("potread: ");
//      Serial.println(analogpot1New);
    }
   
    if (analogpot2New - analogpot2Old >= 35 || analogpot2Old - analogpot2New >= 35) {
      analogpot2Old = analogpot2New;
      analogpot2New = (map(analogpot2New, 1023, 0, 0, 120));
      analogpot2New = (constrain(analogpot2New, 0, 120));
      MIDI.sendControlChange(analogpot2CC, analogpot2New, 1);
//      Serial.print ("pot: ");
//      Serial.println(pot2);
//      Serial.print("potread: ");
//      Serial.println(analogpot2New);
    }

    if (analogpot3New - analogpot3Old >= 35 || analogpot3Old - analogpot3New >= 35) {
      analogpot3Old = analogpot3New;
      analogpot3New = (map(analogpot3New, 1023, 0, 0, 120));
      analogpot3New = (constrain(analogpot3New, 0, 120));
      MIDI.sendControlChange(analogpot3CC, analogpot3New, 1);
//      Serial.print ("pot: ");
//      Serial.println(pot3);
//      Serial.print("potread: ");
//      Serial.println(analogpot3New);
    }

    if (analogpot4New - analogpot4Old >= 35 || analogpot4Old - analogpot4New >= 35) {
      analogpot4Old = analogpot4New;
      analogpot4New = (map(analogpot4New, 1023, 0, 0, 120));
      analogpot4New = (constrain(analogpot4New, 0, 120));
      MIDI.sendControlChange(analogpot4CC, analogpot4New, 1);
//      Serial.print ("pot: ");
//      Serial.println(pot4);
//      Serial.print("potread: ");
//      Serial.println(analogpot4New);
    }

    if (analogpot5New - analogpot5Old >= 35 || analogpot5Old - analogpot5New >= 35) {
      analogpot5Old = analogpot5New;
      analogpot5New = (map(analogpot5New, 1023, 0, 0, 120));
      analogpot5New = (constrain(analogpot5New, 0, 120));
      MIDI.sendControlChange(analogpot5CC, analogpot5New, 1);
//      Serial.print ("pot: ");
//      Serial.println(pot5);
//      Serial.print("potread: ");
//      Serial.println(analogpot5New);
    }     

    if (analogpot6New - analogpot6Old >= 35 || analogpot6Old - analogpot6New >= 35) {
      analogpot6Old = analogpot6New;
      analogpot6New = (map(analogpot6New, 1023, 0, 0, 120));
      analogpot6New = (constrain(analogpot6New, 0, 120));
      MIDI.sendControlChange(analogpot6CC, analogpot6New, 1);
//      Serial.print ("pot: ");
//      Serial.println(pot6);
//      Serial.print("potread: ");
//      Serial.println(analogpot6New);
    }

delay(25);
}
Zdaje ci się że masz wolne porty a tym bardziej piny...... Ale to też plus bo wystarczy wzmacniacz operacyjny dla diody i podpiąć pod TX rozwiązanie sprzętowe.
(27-01-2021, 18:09)Jarewa0606 napisał(a): [ -> ]Zdaje ci się że masz wolne porty a tym bardziej piny......
Rozumiem, że piny RX0 i TX0 nie służą jako digital i są tylko do komunikacji??
Służą też jako digital tylko sęk w tym że są już zajęte....