只是想说我一直在使用论坛来学习很多,所以感谢所有贡献者和支持者的堆栈溢出。
我是刚接触处理/ arduino的学生,我正在尝试制作一个处理草图,该草图采用串行数据并在不同的图形上绘制多个传感器值,同时具有用户记录所有数据的能力成为CSV。另外,我想知道如何制作一个更新并打印其中一个传感器值的简单文本框。
我的arduino串行打印输出代码的一个非常基本的片段包括:
Serial.print(sensor1);
Serial.print(",");
Serial.print(sensor2);
Serial.print(",");
Serial.print(sensor3);
Serial.println(",");
//Sensor1 and 2, would be on separate graphs, and 3 would be a single printed value updated frequently.
为了处理我已经看到了非常基本的例子,并且想知道更简单/更好的事情:使用map函数做直接图或设置cgraph和cdata数组(在另一个例子中看到)。最后,在使用创建编写器或文件写入器来保存数据时,有没有办法创建新文件而不是覆盖或附加数据?我可以使用if语句来获取用户输入文本以输入文件名以避免覆盖吗?
我会很高兴任何提示或帮助。
答案 0 :(得分:0)
你应该在最后发送一个新的行字符:
Serial.print(sensor1);
Serial.print(",");
Serial.print(sensor2);
Serial.print(",");
Serial.print(sensor3);
Serial.println();
完成后,您可以使用Serial bufferUntil()来跟踪每一行。然后在serialEvent()中,您可以简单地readString()
在保存为CSV文件方面,您可以将每行附加到ArrayList。
(或者您可以使用典型的String[]
,但是当新行进入时,您必须手动管理行索引和expand()数组.ArrayList可能更简单)。无论何时想保存CSV文件,都可以轻松地将ArrayList转换为saveStrings()所期望的String []。在保存新文件方面,您只需创建一个时间戳字符串:
import processing.serial.*;
//serial port
Serial arduino;
//timestamp used for CSV filename
String timestamp;
//current CSV line received from Arduino
String currentLine = "";
//all lines received from Arduino
ArrayList<String> csvData = new ArrayList<String>();
void setup(){
try{
//be sure use the correct port/baud rate
arduino = new Serial(this,"/SERIAL_PORT_HERE",115200);
arduino.bufferUntil('\n');
}catch(Exception e){
System.err.println("Error initializing serial port!\nPlease check the PORT NAME, BAUD RATE and USB connections\nAlso close Serial Monitor or other serial port connections (if any)");
e.printStackTrace();
}
}
void draw(){
background(0);
text(currentLine,10,15);
}
void serialEvent(Serial s){
//read data from serial port
currentLine = s.readString();
//append data to be later saved as a CSV file
csvData.add(currentLine);
//process current values - update plot, not fully implemented
processCurrentLine();
}
void processCurrentLine(){
//parse and update plot here
try{
String[] values = currentLine.split(",");
printArray(values);
}catch(Exception e){
e.printStackTrace();
}
}
void saveCSV(){
//create a timestamp to be used for the CSV filename (avoiding the file being overwritten
timestamp = day()+"-"+month()+"-"+year()+" "+hour()+":"+minute()+":"+second();
println("saving CSV file");
saveStrings(timestamp+".csv",csvData.toArray(new String[csvData.size()]));
}
//save on 's' key
void keyReleased(){
if(key == 's') saveCSV();
}
//save on exit
void exit(){
saveCSV();
super.exit();
}
如果您使用的是Windows,则可能需要结帐SerialChart。 这是一个很好的简单的基于Qt的UI,用于基于CSV格式的串行数据渲染图形。它还应该允许您保存数据,它也提供了一些配置设置。
<强>更新强> 我最近注意到Arduino 1.6.6(或更新版本)有一个built in Serial Plotter