我正在尝试将ADXL335加速度计数据从arduino转换为csv文件。使用串行监视器查看时,arduino代码工作完美。处理代码在控制台中返回输出,但不会将任何内容写入CSV文件。我不确定为什么它不会打印。当我在第二个if语句中取消注释打印时,值存储在csv文件中,但它仅适用于15个值输入,然后重复这些相同的值,直到代码停止。当我们嵌入if语句时,我们再次在csv文件中什么也没有得到。我认为第一个if语句有些问题,但我不确定如何继续故障排除。我想知道如何才能让它连续输出加速度计读数。提前谢谢。
这是我的arduino代码:
void setup() {
pinMode(14,INPUT);//define mode of pin
pinMode(15,INPUT);
pinMode(16,INPUT);
Serial.begin(9600);//serial communication begin
delay(10);
}
void loop()
{
//Serial.print(",");
Serial.print("X=");
Serial.print(analogRead(14));
Serial.print(",");
Serial.print("Y=");
Serial.print(analogRead(15));
Serial.print(",");
Serial.print("Z=");
Serial.print(analogRead(16));
Serial.println(",");
delay(100);
}
这是我的处理代码:
void setup() {
output = createWriter( "data.csv" );
mySerial = new Serial( this, Serial.list()[1], 9600 );
}
void draw() {
if (mySerial.available() > 0 ) {
value = mySerial.readString();
System.out.print(value);
output.println(value);
}
if ( value != null ) {
//output.println(value);
output.println();
}
}
void keyPressed() {
output.flush(); // Writes the remaining data to the file
output.close(); // Finishes the file
exit(); // Stops the program
}
首先,您可能想要更改您的arduino代码以输出有效的CSV行。我建议现在松开CSV标头,或者从处理中附加它。
现在试试这个:
void loop()
{
Serial.print(analogRead(14));
Serial.print(",");
Serial.print(analogRead(15));
Serial.print(",");
Serial.print(analogRead(16));
Serial.println(",");
delay(100);
}
这应该输出类似于################,
的内容,这是一个有效的CSV行。
在处理方面,我还建议先缓冲,直到新行(\n
)字符,您可以使用缓冲区直到()
和序列事件()
轻松做到这一点
import processing.serial.*;
// serial port
Serial mySerial;
// single line containing acc. values as a CSV row string
String values;
// the output
PrintWriter output;
void setup() {
output = createWriter( "data.csv" );
try{
mySerial = new Serial( this, Serial.list()[1], 9600 );
mySerial.bufferUntil('\n');
}catch(Exception e){
println("Error opening serial port: double check USB cable, if Serial Monitor is open, etc.");
e.printStackTrace();
}
}
void draw() {
background(0);
if(values != null){
text("most recent values:\n" + values,10,15);
}
}
// gets called when new data is in, and since we're buffering until \n it's one csv line at a time
void serialEvent(Serial p) {
values = p.readString();
if(values != null && values.length() > 0){
println(values);
// if values.trim() isn't call, the \n should still be there so print() will suffice in terms of adding a new line
output.print(values);
}else{
println("received invalid serial data");
}
}
void keyPressed() {
output.flush(); // Writes the remaining data to the file
output.close(); // Finishes the file
exit(); // Stops the program
}
还要注意对串行连接和读取的串行数据进行错误检查(这是检查可能出错的地方的好习惯)。或者,您可以在install()
中向CSV文件添加标头:
output = createWriter( "data.csv" );
output.println("X,Y,Z,");
就编写CSV文件而言,有很多方法可以做到这一点,并且Process有一个Table类允许您读取/解析和写入CSV数据。目前,您的PrintWriter方法非常简单:使用它。
采集设备在x、y、z方向上的动作。 方法: accelerometer.getCurrentAcceleration accelerometer.watchAcceleration accelerometer.clearWatch 参数: accelerometerSuccess accelerometerError accelerometerOptions 对象(只读): Acceleratio
问题内容: 我有时间表的数据库表,其中包含一些常见的字段。 还有更多,但这就是要点。 我已经在该表上导出了一个导出到CSV文件的导出文件,以向用户提供其数据的备份。它也用作带有某些自定义报告的宏Excel文件的数据导入。 这一切都与我合作,通过php遍历时间表并将行打印到文件中。 问题在于大型数据库可能需要花费数小时才能运行,这是无法接受的。所以我用MySQL 命令重写了它,并将它减少到几秒钟即可
问题内容: 将PL / pgSQL输出从PostgreSQL数据库保存到CSV文件的最简单方法是什么? 我正在将PostgreSQL 8.4与pgAdmin III和PSQL插件一起使用,从中运行查询。 问题答案: 您要在服务器上还是在客户端上生成结果文件? 如果您想要一些易于重用或自动化的东西,可以使用Postgresql的内置COPY命令。例如 这种方法完全在远程服务器上运行 -无法写入本地P
问题内容: 从CSV加载数据似乎比从Pandas的SQL(Postgre SQL)加载数据要快。(我有一个固态硬盘) 这是我的测试代码: foo.csv和数据库是相同的(两个列中的数据和列数相同,4列,100000行充满随机int)。 CSV需要0.05秒 SQL花费0.5秒 您认为CSV比SQL快10倍是正常的吗?我想知道我是否在这里错过了什么… 问题答案: 这是正常现象,读取csv文件始终是简
我正在尝试从用户那里获取 CSV 或 XLSX 形式的文件并将其转换为 YAML。我已经制作了python脚本来在本地将文件从CSV转换为YAML和XLSX转换为YAML,但是我无法通过从用户那里获取文件来做到这一点。如何读取上传的文件? 这是我如何将XLSX转换为CSV: 这是我如何将CSV转换为YAML:
我想创建从任务计划程序运行的批处理文件 要求: 少于30天的文件应从主文件夹移动到存档文件夹 然后应删除移动的存档文件 它应该存储所有日志条目 我已经编写了步骤脚本 步骤脚本 有人能告诉我如何使用上述两个命令创建日志文件吗。 日志文件应存储其移动的所有文件名