- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 9 von 9

Thema: Arduino Serial Communication JAVA ???

Hybrid-Darstellung

fucktheking Arduino Serial Communication... 26.04.2016, 10:35
Rabenauge Warum machst du das nicht... 26.04.2016, 11:04
fucktheking midi verarbeitung läuft im... 26.04.2016, 12:40
Gast wieso aus "Java" raus? wo... 26.04.2016, 14:21
fucktheking habe leider keine externe... 26.04.2016, 22:56
Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.04.2016
    Beiträge
    8

    Arduino Serial Communication JAVA ???

    Hallo Leute,

    langsam arbeite ich mich im Arduino business vor Nach wie vor möchte ich eine Schnittstelle von einem MIDI Interface zu meinen alten analogen Instrumenten bauen. Der C++ code ist fertig, hochgeladen und der Arduino funktioniert wie er soll. Nun möchte ich mit JAVA eine GUI schreiben, mit der ich die Werte der Arrays (notes[],pins[]) ändern kann. Der Arduino soll hierfür per USB verbunden werden.

    Arduino C++ Code

    Code:
    byte incomingByte;
    byte note;
    byte velocity;
    int action=2; 
    
    
    int notes[]=                       {36, 40, 41, 43, 44, 46, 42, 39, 37, 52};
    int pins[]=                        { 6,  5,  2,  8,  7, 10, 11,  4,  3,  9};
    unsigned long pintime[]=           { 0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
    const unsigned long pininterv[]=   {10, 20, 10, 10, 10, 10, 30, 10, 10, 70};
    int pinstate[]= {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    int delayseq[]= {20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180};
     
    
    void setup() {
      pinMode(2,OUTPUT);
      pinMode(3,OUTPUT);
      pinMode(4,OUTPUT);
      pinMode(5,OUTPUT);
      pinMode(6,OUTPUT);
      pinMode(7,OUTPUT);
      pinMode(8,OUTPUT);
      pinMode(9,OUTPUT);
      pinMode(10,OUTPUT);
      pinMode(11,OUTPUT);
      pinMode(13,OUTPUT);
    
      for (int i=0; i<=9; i++) {
        pintime[i]=millis ();
        digitalWrite(pins[i], LOW);
    }
    
      Serial.begin(31250);   
    }
    
     
    void loop () {....}
    Kann ich hier mit der jSerialComm Jar Bibliothek arbeiten ?
    Die Java Programmierung ist bekannt und klar, es geht nur um das Verändern der Array Werte des schon im Flash Speicher liegenden C++ Programms. Muss ich vllt. mit dem SRAM/EEPROM arbeiten. Wenn ja, wie ?
    Was ist mit der Baudrate die ja für die Serial Comm 9600 sein muss...
    Weis leider nicht wie ich vorgehen soll, stehe gerade mitten im Wald und sehe die Bäume nicht. Wäre schön wenn mir hier jemand einen Denkanstoss geben könnte.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    Warum machst du das nicht direkt im Arduino?

    Ich hab im Midi-Keyboard nen Mega 2650 drin, aus dem Ding geht nix ausser den fertigen Midi-Daten raus.
    Kanäle wechseln, Oktaven anpassen, das alles wird direkt im Keyboard gemacht. Macht auch Sinn, denn während dem Spiel noch den Rechner bedienen, das wird doch nix.
    Ne Midi-Out ist schnell gebaut, einfach eine der seriellen Schnittstellen (der Mega hat vier) auf die Midi-Baudrate einstellen, Midi-Buchse dran (oder USB-Adapter) und ab mit den fertigen Daten, zum Synthie. Beim Uno oder so könnte man SoftSerial verwenden.
    EEPROM nutze ich momentan nur für eines: den Punkt, an dem die Tastatur gesplittet wird, abspeichern. Macht Sinn, wenn man den verändern kann, aber nicht jedes Mal.

    Wenn du partout normal seriell senden willst, kannst du dir die Hairless Midi-Serial-Bridge mal anschauen, die kann auch mit anderen Baudraten arbeiten, und dann ggf. Midi weiterleiten.
    Wäre mir allerdings das Routing dann zu viel Gewurstel...ich benutze die lediglich zum debuggen.

    Edit sagt gerade: 9600 ist für Midi ohnehin zu wenig, wenn man noch nen paar Controllerdaten mit sendet, reicht es nicht mehr um "live" zu spielen.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.04.2016
    Beiträge
    8
    midi verarbeitung läuft im arduino. ich lese im arduino die midi bytes aus und sende dann entsprechende infos an die Digitalen Ausgänge. Jedoch welche infos wann und wie gesendet werden möchte ich gerne über die GUI anwendung bestimmen können. Ist quasi das routing das man immer vornehmen kann. einfach per USB anstecken und dann das routing ändern welches signal vom midi an welchem ausgang landet. das könnte man eben easy über die arrays realisieren. wenn ich nur wüsste wie ich die aus java heraus verändern kann.... hmmmm
    ich habe mich für diesen weg entschieden weil ich 5 analoge drumcomputer habe die alle 5V trigger brauchen. ich will eben einen arduino kaufen, C++ programm drauf, einbauen und die USB buchse nach aussen legen. und wenn man dann mal sein set arrangieren will, würde ich einfach gerne mit dem USB ran, und zb den midikanal ändern oder die bassdrum von C1 auf C2 setzten.
    wie gesagt, dass Programm dafür steht schon und funktioniert. würde nur ungerne jedes mal in den programmcode und dann händisch die parameter einstellen.
    baudrate bei midi is 31250

  4. #4
    HaWe
    Gast
    wieso aus "Java" raus?
    wo ist denn hier Java?
    Arduino Sketch ist C, nicht Java - oder hast du eine externe Java IDE?


    Arrays änderst du wie üblich per

    foo[0]=...
    foo[1]=...
    usw

    und Serial ist hier beschrieben:
    https://www.arduino.cc/en/Reference/Serial

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    04.04.2016
    Beiträge
    8
    habe leider keine externe Java IDE
    hab mal schnell bild gezeichnet. bin anscheinend mit erklären nicht so gut.

    Klicke auf die Grafik für eine größere Ansicht

Name:	ArduMidi.jpg
Hits:	7
Größe:	88,2 KB
ID:	31539

    Das java programm schreibe ich gerade. und jetzt Suche ich eben nach einer möglichkeit um von dem java programm aus, den arrayinhalte vom C++ Programm im Arduino zu ändern.
    Geändert von fucktheking (26.04.2016 um 23:03 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    ..im Zeichnen auch nicht?
    So richtig klar wird es mir nicht.
    Was soll bitte ne "analoge Drummachine" sein? Ein Schlagzeug-Synthie?
    Was ist der "Midi Signal Sender"? Nen Midi-Keyboard oder Touchpad oder so?

    Wenn ich das richtig erraten habe, frag ich mich, wozu da Arduino und PC (samt Schwachstelle "Java" )nötig sind?
    Dieser Aufbau _kann_ nix brauchbares ergeben, die Latenzen müssen jenseits gut und böse liegen, weil alles zigmal verwustelt wird.
    Wenn der Sender allerdings irgendein Midi-Gerät ist, und du das Ganze gar nicht "live" spielen willst, wäre die Latenz evtl. nicht tragisch, aber dann kanst du auch direkt die Midi-Datei vom PC zum Synthie schicken, und ggf. zum aufnehmen zurück.
    Oder willst du lediglich verschiedene Presets (angepasst an den jeweiligen Drumcomputer) vom PC zum Arduino senden, damit der z.B. die einzelnen Instrumente anpasst?

    Falls dem so ist: speichere die Presets direkt im Arduino ab- so wie das da aussieht klappt das in Echtzeit nie und nimmer.
    Hab ich bei meinem Keyboard auch gemacht:
    ich kann ein (bisher nur eins...) Preset für Aeolus (Orgel-Synthie) direkt beim starten einstellen.
    Hier wählt der Arduino automatisch die passenden Kanäle (drei insgesamt) aus, ich kann wahlweise die Tastatur splitten (oder auch eine der beiden Tastaturen aufs ganze Brett nehmen, und das in Echtzeit), mit dem dritten Kanal übertrage ich nen Program-Change, mit dem wiederum ich dann voreingestellte Presets im Laptop abrufen kann.
    Momentan hat das Keyboard lediglich ne normale Midi-Buchse, USB besorg ich mir mittels Midi2USB-Adapterkabel (das Teil bau ich irgendwann direkt ins Keyboard, so weit isses aber noch nicht), einfacher und flexibler geht es nicht.
    Wenn _ich_ mehrere solcher Spezialfälle (der Aeolus _ist_ etwas speziell) hätte, würd ich mir einfach für jeden davon nen eigenes Preset ins Keyboard programmieren, die kann man dann ggf. auch zur Laufzeit (also während dem Spiel!) wechseln.

    Bei dir würde ich wahrscheinlich das Routing ganz einfach so machen:
    Eingabegerät->PC, dort dann den Jack-Server mit passenden Routings (kann man abspeichern) laufen lassen, Synthie an nen anderen Anschluss, fertig.
    Da brauchts echt kein rumgewurstele mit Java...
    Falls du kein Linux nutzt, könnte man das Gleiche mit LMMS (kostenlos) machen, auch dort kann man Midi nahezu beliebig routen- Jack ist aber wesentlich effektiver.
    Da brauchts keinen Arduino für.
    Aber wenn der eben mitspielen soll, mach das doch so: leg dir fertige Presets an, die du, meinetwegen in der Setup-Routine, abfragst. Brauchst halt sowas wie ein Display (geht im Notfall mit ner LED, die Blinkmuster ausgibt schon, ich hab ein 1.8er Farb-TFT drin), und nen Button-wobei du da ja auch dein normales Eingabegerät nutzen kannst.
    Da brauchste nicht erst mit Java rum basteln.
    Auch Midi aus nem Arduino raus zu bekommen, ist nicht schwer, das geht über ne serielle Schnittstelle wunderbar (Widerstand dran, Midibuchse, fertig), Midi rein ist etwas aufwendiger, hier muss noch nen Optokoppler zwischen.

    Während der Arduino Midi-Daten verarbeitet, noch über den Umweg PC (und Java-Krücke) daran was zu ändern, kannst du vergessen.
    Wenn du das unter 10ms Latenz noch hin kriegst, bist du entweder sehr gut, oder hast nen sehr schnellen Rechner- aber auch die 10ms sind inakzeptabel.
    Alles was oberhalb 5-6ms an Latenz liegt, ist zum live spielen nicht mehr zu gebrauchen, hier muss schon synchronisiert werden, und _dann_ wirds richtig aufwendig.

    Immer wichtig bei Midi: das Timing. Je weniger an nem Signal noch nachträglich rumgebastelt wird, umso gut. Du gehst da gerade völlig den falschen Weg.
    Falls du eines dieser Midi-Eingabe-Wunder hast (son Ding hab ich auch, aber nen einfaches, da mein Schlagzeug Hydrogen heisst), mit Tasten, Reglern, Pads- schnapp dir einfach mal die Hairless-Midi-Serial-Bridge und guck mal, was dein Teil wirklich an Daten schickt.
    Bei meinem Miditech war ich entsetzt....drum mache ich das auch selber jetzt.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

Ähnliche Themen

  1. Antworten: 48
    Letzter Beitrag: 16.11.2014, 07:46
  2. Sensordaten auslesen Arduino One eclipse java
    Von aloC-acoC im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 24.06.2013, 08:18
  3. I2C Communication
    Von Phyres im Forum PIC Controller
    Antworten: 6
    Letzter Beitrag: 16.01.2013, 16:40
  4. Antworten: 2
    Letzter Beitrag: 01.11.2012, 15:21
  5. Arduino Serial Monitor?
    Von pro-bot128 im Forum Offtopic und Community Tratsch
    Antworten: 2
    Letzter Beitrag: 09.08.2011, 12:09

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen