Go Down

Topic: LCD 1602 Hairless Midi Sysex (Read 99 times) previous topic - next topic

Wallty

Hallo zusammen,

ich bin gerade dabei, mehrere LCD 1602 über I2C mit einem Arduino anzusteuern, um SysEx-Daten einer Sample-Software auszugeben. Um den Arduino als MIDI-Gerät verwenden zu können, benutze ich LoopMidi und Hairless MIDI. Nun ist es so, dass ich auf dem LCD keine Daten angezeigt bekomme; ich sehe nur in den LogDateien von Hairless MIDI die eingehenden Werte, sehe aber keine Ausgabe auf dem Bildschirm (die Baudrate habe ich sowohl beim Arduino als auch bei Hairless angepasst).
Ich weiß nun nicht, ob ich einfach einen Fehler im Code habe, oder was sonst der Fall sein könnte.
Hier ist der Code:

Code: [Select]

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MIDI.h>


#define LED 13

LiquidCrystal_I2C lcd(0x26, 16, 2);


MIDI_CREATE_DEFAULT_INSTANCE();
int displayNumber = 0;


void setup() {
  lcd.backlight();
  Serial.begin(14400);
  lcd.init();
  lcd.print("Hello..");
 
  pinMode (LED, OUTPUT); // Arduino board pin 13 to output

  MIDI.begin(MIDI_CHANNEL_OMNI); // Initialize the Midi Library.
  MIDI.setHandleSystemExclusive(MyHandleSystemExclusive); // set function for SysEx receive

  delay(9000);
  lcd.clear();
}

void loop() {
  MIDI.read(); // check if Midi data has been received.
}

void MyHandleSystemExclusive(byte *data, unsigned int array_size)
{
  int column = 0;
  bool start = false;
 
  digitalWrite(LED,HIGH);  //Turn LED on - start working
 
  lcd.clear();
  lcd.setCursor(0, 0);

  for (int i = 0; i < array_size; i++)
  {
    if (data[i] >= 32 && data[i] <= 126 && start)
    {
      lcd.write(data[i]);
      column = column + 1;
      if (column == 16)
      {
        lcd.setCursor(0,1);
      }
    }
    if (data[i] == 125)
    {
        start = true;
    }
  }
  digitalWrite(LED,LOW);  //Turn LED off - end working
}


Das Display habe ich in der Sample-Software als Output gesetzt und in Hairless MIDI als Input, um die MIDI-Daten empfangen zu können.
Eigentlich müsste das doch genügen, um die Daten anzeigen zu lassen?  :smiley-roll:

Vielen Dank für mögliche Lösungsansätze
Wally

ardubu

nehme mal das lcd.clear(); aus der loop raus

Wallty

Das hat nichts geändert, aber ich habe nach langem Suchen herausgefunden, dass "Midi.begin" wiederum die Baudrate von Serial überschreibt, diese dann nochmal manuell geändert und nun läuft alles!

wapjoe

Das hat nichts geändert, aber ich habe nach langem Suchen herausgefunden, dass "Midi.begin" wiederum die Baudrate von Serial überschreibt, diese dann nochmal manuell geändert und nun läuft alles!
Entweder ich übersehe da was oder das ist nicht der vollständige Sketch, aber wozu nimmst du Serial.begin(), wenn du keinerlei seriellen Ausgaben im Sketch hast? Oder gibt es serielle Ausgaben in den Libs?
Das Problem an Zitaten aus dem Internet ist, du weißt nicht ob die wahr sind!

- Zitat Leonardo da Vinci -

Go Up