Welche Zeichen werden hier gesandt?

Hallo,

kann mir jmd. erklären, was hier anstatt "0xB0" letzten Endes ausgegeben wird:

/*
 * Pin 13 = Status-LED
 * Analog Pin 0 = 4,7kOhm Drehpoti
 * Serial-TX geht an Pin 5 der MIDI-Buchse.
 *
 * Controllerdaten werden gesandt, wenn am Poti gedreht wird.
 *
 */

int ledPin = 13;
int poti = 0;
int potVal = 0;                                                         // Gelesener Potiwert
int mappedPotVal = 0;                                                   // Variable, die den eingelesenen "wertebereichreduzierten" Wert speichert
int prevPotVal = 0;                                                     // Variable, die den letzen eingelesenen Wert speichert
int schwellwert = 2;                                                    // Schwellwert um bei minimalen Schwankungen nicht auszulösen (ähnlich einer "Deathzone" eines Analogjoypads)

void setup()
{
  pinMode(ledPin, OUTPUT);
  Serial.begin(31250);                                                  // MIDI-Datenversand bei 31250 Baud aktivieren
}

void loop()
{
  potVal = analogRead(poti);                                            // Input einlesen
  mappedPotVal = map(potVal, 0, 1023, 0, 127);                          // Wertebereich auf 0-127 reduzieren
  if(abs(mappedPotVal - prevPotVal) >= schwellwert)
  {
    midiOUT(0xB0, 7, mappedPotVal);                                     // "Controller 7"-Daten auf Kanal 1 senden
    digitalWrite(ledPin, HIGH);
    prevPotVal = mappedPotVal;
  }
  else
  {
    digitalWrite(ledPin, LOW);
  }

}

void midiOUT(char command, char controllernummer, char ausgabewert) {
  Serial.write(command);
  Serial.write(controllernummer);
  Serial.write(ausgabewert);

}

Es wird genau ein 0xB0 ausgegeben, was im ISO-Latin-Zeichnsatz einem Grad-Zeichen (°) entspricht. Danach die ein 0x07, was im ASCII-Code ein BEL (also eine kurze tonale Warnung) ist. Dann noch Dein Poti-Wert. Dies wird binär übertragen, macht also auf Deinen Serial Monitor nicht viel Sinn, ein Midi-Gerät könnte aber vielleicht was damit anfangen.

Genau genommen wird dann also "10110000" ausgegeben?

Gruß Chris

Als String nicht, über die Leitung geht genau genommen 0101100001 (Start- und Stopbit werden ja auch übertragen).

Was erwartest Du? Wo ist Dein Problem?

Super.

Hatte lediglich ein Verständnisproblem.

Nun passt es aber. Dank Dir! :wink:

Gruß Chris

pylon:
Danach die ein 0x07,..

Ähm- kannst Du evtl. doch noch einmal etwas näher beschreiben, was Du damit meinst.

Was ich auch noch immer nicht verstehe ist folgendes:

Warum führt "0xB0" lediglich zu einer Ausgabe von "°", während "7" zu einer Ausgabe von "7" führt?

Oder führt "controllernummer" "7" nicht zu einer Ausgabe von "7"?

Gruß Chris

Edit: Jetzt hab ichs- "Üblicherweise werden hexadekadische mit einem Index oder Präfix versehen." war mir nicht geläufig. :*