当前位置: 首页 > 知识库问答 >
问题:

Arduino加速度计输出到CSV文件的处理

陶锋
2023-03-14

我正在尝试将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
} 

共有1个答案

仲承福
2023-03-14

首先,您可能想要更改您的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天的文件应从主文件夹移动到存档文件夹 然后应删除移动的存档文件 它应该存储所有日志条目 我已经编写了步骤脚本 步骤脚本 有人能告诉我如何使用上述两个命令创建日志文件吗。 日志文件应存储其移动的所有文件名