首页 > 解决方案 > 串行输出未传输到文件(使用处理)

问题描述

我无法将 Arduino 传感器数据保存到文本文件中。我正在将传感器数据写入串行端口并使用从串行端口读取该数据并将其写入文件的处理程序。

这是我用于处理的代码。

import processing.serial.*;
Serial mySerial;
PrintWriter output;
void setup() {
   mySerial = new Serial( this, Serial.list()[0], 9600 );
   output = createWriter( "data.txt" );
}
void draw() {
    if (mySerial.available() > 0 ) {
         String value = mySerial.readString();
         if ( value != null ) {
              output.println( value );
         }
    }
}

void keyPressed() {
    output.flush();  // Writes the remaining data to the file
    output.close();  // Finishes the file
    exit();  // Stops the program
}

数据没有从我的 Arduino 串行监视器传输到 .txt 文件。在我从 Arduino 传感器收集了相当多的数据后,该文件仍然是空的。首先运行 Arduino 代码或处理代码是否有特定的顺序?还有什么问题?

标签: arduinoprocessing

解决方案


正如你所说:

在我从 Arduino 传感器收集了相当多的数据后,该文件仍然是空的。

我假设您正在通过 Arduino IDE 串行控制台监控 Arduino 的串行输出。但是串行协议不能“馈送”Arduino IDE 控制台和您的处理脚本。

那么您是否尝试在不打开串行控制台的情况下运行 Arduino 和处理脚本?

编辑:

当然,您的 Arduino 和处理脚本之间的波特率( 9600 )是否匹配?

mySerial = new Serial( this, Serial.list()[0], 9600 );

编辑#2: 在代码的 setup() 部分中,您正在定义您不想监听的串行端口:(Serial.list()数组的第一项)

mySerial = new Serial( this, Serial.list()[0], 9600 );

但是,例如在 Os X 上,Serial.list()[0] 是蓝牙传入端口。

我所做的是Serial.list()通过添加打印整个数组

print(Serial.list());

就在之后void setup() {

您可以在处理控制台中读取端口列表,我的是:

/dev/cu.Bluetooth-Incoming-Port /dev/cu.usbmodem1411 /dev/tty.Bluetooth-Incoming-Port /dev/tty.usbmodem1411

因为您想从 Arduino ( ) 收听cu.usbmodem1411,您需要设置 modifymySerial以寻址数组的第二项,如下所示:

mySerial = new Serial( this, Serial.list()[1], 9600 );

推荐阅读