Go Down

Topic: Poti an analogen Pin als MIDI ausgeben (Read 6863 times) previous topic - next topic

Ak-Nak47

Dann müsste es folgendermaßen aussehen:

Code: [Select]
/* Variablen */
byte volume, lastVolume, balance, lastBalance;
byte channel = 1;     // Hier Kanal festlegen (1 bis 16)
int threshold = 2;

/* Pinbelegung */
const int volumePot[6] = { A0 , A1, A2, A3, A4, A5};   // Poti für die Lautstärke
const int balancePot = A6;  // Poti für die Balance

void setup() {
  Serial.begin(38400);
}

void loop(){
/* Lies und sende Lautstärke */
  volume = knobFunction(volumePot);
  if(volume != lastVolume) {
    lastVolume = volume;
    //Serial.print("volume: ");
    //Serial.println(volume);
    Serial.write(175 + channel);  // Sende 'control change' auf Kanal 'channel'
    Serial.write(7);              // ändere Lautstärke auf...
    Serial.write(volume);         // den Wert der Variablen 'volume'
  }
/* Lies und sende Balance */
  balance = knobFunction(balancePot);
  if(balance != lastBalance) {
    lastBalance = balance;
    //Serial.print("balance: ");
    //Serial.println(balance);     
    Serial.write(175 + channel);  // Sende 'control change' auf Kanal 'channel'
    Serial.write(8);              // ändere Balance auf...
    Serial.write(balance);        // den Wert der Variablen 'balance'
   }
}

/* Funktionen */
int knobFunction(const int pin)
{
  static int prevRead[6] = {0, 0, 0, 0, 0, 0};   
  int output = analogRead(pin)/8;    
  if (abs(output - prevRead[0])  >= threshold)
    {prevRead[pin] = output;}
  else
    {output = prevRead[pin];}
  return output;
}


Kanns jetzt gerade nicht ausprobieren, aber so sollte es doch gehen?

Ak-Nak47

Irgedwie funktioniert das nicht   =(....warum?

mkl0815

Du definierst knobFunction() mit einem Parameter "const int pin" also einem Integer als Wert. Es wird aber in Deinem Code die Variable volumePot übergeben, die aber kein Integer ist, sondern ein Array von mehreren Integern. Statt knobFunction(volumePot) muss es also heissen knobFunction(volumePot[0]) für den ersten Wert,  knobFunction(volumePot[1]) für den zweiten Wert usw.

Außerdem brauchst Du in Deinem loop() vermutlich eine Schleife, die durch die einzelnen Werte des Arrays durchgeht. Da Du Dir mit "lastVolume" den vorherigen Wert merkst, sollte das vermutlich dann auch ein Array werden, sonst vergleichst Du plötzlich den lastVolume mit unterschiedlichen Ergebnissen der verschiedenen Eingänge die in volumePot[] definiert sind.
Mario.

Go Up