Answers:
您可以使用serial-lib将传感器数据写入串行端口,并编写一个小型处理程序,该程序从串行端口读取数据并将其写入文件。
在arduino代码中在设置方法中初始化序列库
Serial.begin(9600);
并使用以下命令将传感器值写入串行接口
Serial.println(value);
在你的循环方法
在处理端,使用PrintWriter将从串行端口读取的数据写入文件
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
}
如果您想直接将传感器数据写到计算机上的文件中,而不必复制并粘贴来自串行监视器窗口的输出,请尝试直接从串行端口读取数据流(无论如何,这是串行监视器执行的操作,我疑似)。在Mac / Linux上,请执行以下操作:
cat /dev/cu.usbmodem1d11
上帝知道Windows机器上的等效功能。
cat
用某种脚本替换该命令。
您可以创建一个python脚本来读取串行端口并将结果写入文本文件:
##############
## Script listens to serial port and writes contents into a file
##############
## requires pySerial to be installed
import serial
serial_port = '/dev/ttyACM0';
baud_rate = 9600; #In arduino, Serial.begin(baud_rate)
write_to_file_path = "output.txt";
output_file = open(write_to_file_path, "w+");
ser = serial.Serial(serial_port, baud_rate)
while True:
line = ser.readline();
line = line.decode("utf-8") #ser.readline returns a binary, convert to string
print(line);
output_file.write(line);
我发现使用Python脚本更容易,更安全。我通常基于串行库使用此库。使用datetime模块添加时间戳是很常见的:
import serial
from datetime import datetime
sensor = "DH11"
serial_port = '/dev/ttyACM0'
baud_rate = 9600
path = "%s_LOG_%s.txt" % (str(datetime.now()), sensor)
ser = serial.Serial(serial_port, baud_rate)
with open(path, 'w+') as f:
while True:
line = ser.readline()
f.writelines([line.strip(), " t = %s \n " % (datetime.now())])