Ich habe ein kleines Problem.Mehrere serielle Werte von Arduino zur Verarbeitung?
Ich übermittle Informationen von einem Arduino angebracht 3 Achsen Beschleunigungsmesser + 3 Achsen Magnetometer + Kompass Überschrift. Diese sind auf Midi-Bereiche (0-127) skaliert.
ARDUINO: Dies wird
Serial.print(shiftAx);
Serial.print("a");
Serial.print(shiftAy);
Serial.print("b");
Serial.print(shiftAz);
Serial.print("c");
Serial.print(shiftMx);
Serial.print("d");
Serial.print(shiftMy);
Serial.print("e");
Serial.print(shiftMz);
Serial.print("f");
Serial.print(shiftHead);
Serial.print("g");
mit einem Format in einem seriellen Druck weitergegeben wie 76a45b120c23d12e23f34g ich meine Serien Monitor sehen kann dies funktioniert mit. (Aber ich bin nicht sicher, wie es zu drucken, wie bei "g" println oder nicht.)
VERARBEITUNG 2:
I-Puffer bis g in meinem Leere Setup()
port = new Serial(this, "/dev/tty.usbmodem411", 9600);
port.bufferUntil('g');
ich habe die Funktion
void serialEvent (Serial port)
{
data = port.readStringUntil('g');
AxVal = data.substring(0, data.indexOf('a'));
AyVal = data.substring(data.indexOf("a") + 1, data.indexOf("b"));
AzVal = data.substring(data.indexOf("b") + 1, data.indexOf("c"));
MxVal = data.substring(data.indexOf("c") + 1, data.indexOf("d"));
MyVal = data.substring(data.indexOf("d") + 1, data.indexOf("e"));
MzVal = data.substring(data.indexOf("e") + 1, data.indexOf("f"));
HeadVal = data.substring(data.indexOf("f") + 1, data.indexOf("g"));
}
dAS PROBLEM So funktioniert das nicht. Kein Text angezeigt. (es ist nur eine einfache Füllung(), Text())
Ich sehe nicht, warum. Ist das Problem mein Protokoll (wenn ich es so nennen kann), wie entpacke ich die Zeichenfolge? Oder ein anderes Problem.
Ich bin sehr verwirrt.
ich kann es mit nur zwei Werten, wie in diesen tutorial
Notizen zu arbeiten: Die Arduino Hauptschleife ist auf Verzögerung (100); arduino ist bei 9600 Baudrate
Ich werde die ganzen Skizzen bei Bedarf anhängen, um mir zu helfen, dem ich meinen Dank im Voraus aussprechen werde.
Code:
PROCESSING
import themidibus.*; //Import the library
import javax.sound.midi.MidiMessage; //Import the MidiMessage classes http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/MidiMessage.html
import javax.sound.midi.SysexMessage;
import javax.sound.midi.ShortMessage;
import processing.serial.*;
MidiBus myBus; // The MidiBus
Serial port;
String AxVal = " ", AyVal = " ", AzVal = " ";
String MxVal = " ", MyVal = " ", MzVal = " ";
String HeadVal = " ";
String AxString="Ax",AyString = "Ay",AzString = "Az";
String MxString="Mx",MyString = "My",MzString = "Mz";
String HeadString="Heading";
String data = " ";
PFont font;
int status_byte = 0xB0; // send control change
int channel_byte = 0; // On channel 0
int first_byte; // cc number;
int second_byte; // value
void setup()
{
size(1000,500);
port = new Serial(this, "/dev/tty.usbmodem411", 9600);
port.bufferUntil('g');
font = loadFont("NanumBrush-48.vlw");
textFont(font, 48);
MidiBus.list(); // List all available Midi devices on STDOUT. This will show each device's index and name.
myBus = new MidiBus(this, 1, 0); // Create a new MidiBus object
}
void draw()
{
background(0,0,0);
//first_byte = 1;
//second_byte = int(AxVal); // But with less velocity
//myBus.sendMessage(status_byte, channel_byte, first_byte, second_byte);
fill(46, 209, 2);
text(AxVal, 60, 75);
text(AxString, 60, 125);
//first_byte = 2;
//second_byte = int(AyVal); // But with less velocity
//myBus.sendMessage(status_byte, channel_byte, first_byte, second_byte);
fill(0, 160, 153);
text(AyVal, 120, 75);
text(AyString,120,125);
// first_byte = 3;
//second_byte = int(AzVal); // But with less velocity
//myBus.sendMessage(status_byte, channel_byte, first_byte, second_byte);
fill(0, 160, 153);
text(AzVal, 180, 75);
text(AzString,180,125);
/*
first_byte = 4;
second_byte = int(MxVal); // But with less velocity
myBus.sendMessage(status_byte, channel_byte, first_byte, second_byte);
fill(0, 160, 153);
text(MxVal, 240, 75);
text(MxString,240,125);
first_byte = 5;
second_byte = int(MyVal); // But with less velocity
myBus.sendMessage(status_byte, channel_byte, first_byte, second_byte);
fill(0, 160, 153);
text(MyVal, 300, 75);
text(MyString,300,125);
first_byte = 6;
second_byte = int(MzVal); // But with less velocity
myBus.sendMessage(status_byte, channel_byte, first_byte, second_byte);
fill(0, 160, 153);
text(MzVal, 360, 75);
text(MzString,360,125);
first_byte = 7;
second_byte = int(HeadVal); // But with less velocity
myBus.sendMessage(status_byte, channel_byte, first_byte, second_byte);
fill(0, 160, 153);
text(HeadVal, 420, 75);
text(HeadString,420,125);
*/
}
void serialEvent (Serial port)
{
data = port.readStringUntil('g');
data = data.substring(0, data.length() - 1);
AxVal = data.substring(0, data.indexOf('a'));
AyVal = data.substring(data.indexOf("a") + 1, data.indexOf("b"));
AzVal = data.substring(data.indexOf("b") + 1, data.length());
/*
index = data.indexOf("c")+1;
MxVal = data.substring(index, data.indexOf("d"));
index = data.indexOf("d")+1;
MyVal = data.substring(index, data.indexOf("e"));
index = data.indexOf("e")+1;
MzVal = data.substring(index, data.indexOf("f"));
index = data.indexOf("f")+1;
HeadVal = data.substring(index, data.indexOf("g"));
*/
}
/*
void serialEvent (Serial port)
{
data = port.readStringUntil('g');
AxVal = data.substring(0, data.indexOf('a'));
AyVal = data.substring(data.indexOf("a") + 1, data.indexOf("b"));
AzVal = data.substring(data.indexOf("b") + 1, data.indexOf("c"));
MxVal = data.substring(data.indexOf("c") + 1, data.indexOf("d"));
MyVal = data.substring(data.indexOf("d") + 1, data.indexOf("e"));
MzVal = data.substring(data.indexOf("e") + 1, data.indexOf("f"));
HeadVal = data.substring(data.indexOf("f") + 1, data.indexOf("g"));
}
ARDUINO:
// Add lastvalue check
#include <Wire.h>
#include <LSM303DLH.h>
LSM303DLH glove;
//set max min magnetometer
int maxMx = +353, maxMy = +527, maxMz = 426;
int minMx = -700, minMy = -477, minMz = -561;
int maxA = 2019;
int minAx = -1043, minAy = -2048, minAz = -2048;
int shiftMx,shiftMy,shiftMz;
int shiftAx,shiftAy,shiftAz;
float shiftHeadTemp;
int shiftHead;
void setup()
{
Wire.begin();
glove.enableDefault();
Serial.begin(9600);
}
void loop()
{
glove.read();
shiftMx = ((glove.m.x - minMx)/(maxMx - minMx)) * 127;
shiftMy = ((glove.m.y - minMy)/(maxMy - minMy)) * 127;
shiftMz = ((glove.m.z - minMz)/(maxMz - minMz)) * 127;
shiftAx = ((glove.a.x - minAx)/(maxA - minAx)) * 127;
shiftAy = ((glove.a.y - minAy)/(maxA - minAy)) * 127;
shiftAz = ((glove.a.z - minAz)/(maxA - minAz)) * 127;
shiftHeadTemp = (glove.heading((LSM303DLH::vector){0,-1,0}));
shiftHead = (shiftHeadTemp/360)*127;
if (shiftMx < 0){shiftMx=0;}
if (shiftMx >127){shiftMx=127;}
if (shiftMy < 0){shiftMy=0;}
if (shiftMy >127){shiftMy=127;}
if (shiftMz < 0){shiftMz=0;}
if (shiftMz >127){shiftMz=127;}
if (shiftAx < 0){shiftAx=0;}
if (shiftAx >127){shiftAx=127;}
if (shiftAy < 0){shiftAy=0;}
if (shiftAy >127){shiftAy=127;}
if (shiftAz < 0){shiftAz=0;}
if (shiftAz >127){shiftAz=127;}
if (shiftHead < 0){shiftHead=0;}
if (shiftHead >127){shiftHead=127;}
Serial.print(shiftAx);
Serial.print("a");
Serial.print(shiftAy);
Serial.print("b");
Serial.print(shiftAz);
Serial.print("c");
Serial.print(shiftMx);
Serial.print("d");
Serial.print(shiftMy);
Serial.print("e");
Serial.print(shiftMz);
Serial.print("f");
Serial.print(shiftHead);
Serial.println("g");
delay(100);
}
Gut, das ist genau das, was ich wollte. Viel bessere Art, es zu tun. Merci. bearbeiten * Ich würde abstimmen, aber keine rep, jemand mit rep, geben Sie diesem Mann einige rep – ash
Sie sollten nur die Antwort akzeptieren. Die kleine richtige Marke –