Küçük bir sorunum var.Arduino'dan işlemeye kadar birçok seri değer var mı?
3 eksenli ivmeölçer + 3 eksenli manyetometre + pusula istikametindeki arduinodan bilgi aktarıyorum. Bunlar midi aralıklarına (0-127) ölçeklendirilmiştir.
ARDUINO: bu benim seri monitörü kullanarak çalışır görebilirsiniz Bu
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");
76a45b120c23d12e23f34g gibi bir formata sahip bir seri baskı geçirilir. (Ancak ben "g" de println veya olmasın olarak yazdırmak için emin değilim.)
İŞLEME 2:
Tampon olmak i var
port = new Serial(this, "/dev/tty.usbmodem411", 9600);
port.bufferUntil('g');
benim geçersiz kurulumunda g () kadar fonksiyon
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"));
}
SORUN Yani bu işe yaramaz. Metin görüntülenmedi. (Sadece basit bir dolgu(), metin())
Neden göremiyorum. Sorun benim protokolüm (eğer bunu söyleyebilirsek), ipliği nasıl açarım? Ya da başka bir problem.
Çok kafam karıştı. Ben bu tutorial
notlarda olarak sadece iki değer ile çalışmak alabilirsiniz
: arduino ana döngü gecikmesi (100) üzerindedir; arduino, 9600 baud hızındadır.
Bana yardım etmek için gerekirse eskizleri ekleyeceğim, bu sayede önceden teşekkürlerimi sunacağım.
KODU:
İŞLEME
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);
}
Bu tam olarak istediğim şey. Bunu yapmanın çok daha iyi yolu. Mersi. edit * Oy ver, oy kullanamazdım, birisiyle birlikte, bu adama bir kaç tane ver – ash
Sadece cevabı kabul etmelisin. Küçük sağ işareti –