我有一个给定格式的输入流,用arduino编程软件编码。我使用Netbeans + JDK从串口读取。
左腿
时间(毫秒):14448
加速度计:-1.38,2.2,1.3
陀螺仪:1.0,-0.9,1.2
磁强计:-2,1,-1.2
我需要编写一个算法来计算步数,所以我只需从上面的输入流中提取加速度计(x,y,z)读数。下面给出的是代码。
while (inputStream.available() > 0) {
//int numBytes = inputStream.read(readBuffer);
char buffer = (char)inputStream.read();
this.bufferRx += buffer;
System.out.print(buffer);
}
我该怎么做才能从字符串缓冲区获取时间和加速度计x,y,z值并将其存储为int和float值?
答案 0 :(得分:1)
普通老java:
BufferedReader br = new BufferedReader(new InputStreamReader(input, "ascii"));
for (String line; null != (line = br.readLine()); )
{
if (line.startsWith("Accelerometer:"))
{
String[] split = line.split("[:,]");
float x = Float.parseFloat(split[1]);
float y = Float.parseFloat(split[2]);
float z = Float.parseFloat(split[3]);
// do somehting with the data.
System.out.printf("%f,%f,%f\r\n",x,y,z);
}
}
玩java 8:
Iterator<float[]> iterator =
new BufferedReader(new InputStreamReader(input, "ascii"))
.lines()
.filter(s -> s.startsWith("Accelerometer:"))
.map(s -> s.split("[:,]"))
.map(p -> new float[]{
Float.parseFloat(p[1]),
Float.parseFloat(p[2]),
Float.parseFloat(p[3]),
}).iterator();
while (iterator.hasNext())
{
float[] p = iterator.next();
System.out.printf("%f,%f,%f\r\n", p[0], p[1], p[2]);
}
答案 1 :(得分:0)
您需要使用RegEx或简单的String#split来拆分数据(假设它是传递的字符串),然后将各个String部分转换为它们各自的值(Integer.parseInt等)
但是我个人会修改你的Arduino代码以输出更多的机器可读数据(XML,JSON,...),因为坦白说这不是机器通信的方式。