我在Arduino中有一个基本草图,每秒通过串行发送数据,并使用Processing 2.1进行可视化。
来自Arduino
"Serial.println(); // after all the sensors have been read print a newline and carriage return
delay(1000); // delay by # milliseconds"
处理中:
Serial myPort;
PrintWriter output; //print serial output from Arduino
void setup() {
size(480, 360);
output = createWriter( "saved-serial-data.txt" ); //save file as ""
println(Serial.list());
myPort = new Serial(this, "/dev/cu.usbmodem1411", 9600);
myPort.bufferUntil('\n');
}
void draw() {
output.println(inString);
}
我能够保存文件,但它是空的,因为我不知道如何根据时间启动触发器来保存和记录数据。我见过基于按键的示例(例如:void keyPressed(){//按一个键来保存数据)但是我的草图只是循环而且没有按键需要。我希望每隔5分钟保存一次。
有什么想法吗?
答案 0 :(得分:0)
然后在draw()
中添加计时器,检查是否已过去5分钟。如果是,那么flush()
和close()
您的输出。我相信你可能必须在关闭后重新创建输出。
答案 1 :(得分:0)
我会假设您知道如何填充inString
,尽管您尚未发布执行此操作的代码。
但假设有几种方法可以设置计时器。
您可以使用millis()
功能。此函数返回程序运行的毫秒数,因此您可以使用它来记录开始和结束时间,然后使用这些时间来计算已用时间。如果已用时间超过某个阈值,则可以触发事件。像这样:
int prevFiredTime = 0;
int msDelay = 10000; //10 seconds
void draw(){
int time = millis();
int elapsed = time - prevFiredTime;
if(elapsed > msDelay){
fire();
prevFiredTime = time;
}
}
void fire(){
output.println(inString);
}
您也可以使用frameCount
功能。它与millis()
函数类似,只保存自程序启动以来绘制的帧数。您可以使用它来执行每个X帧的操作,如下所示:
int frameDelay = 600; //10 seconds
void draw(){
if(frameCount % frameDelay == 0){
fire();
}
}
void fire(){
output.println(inString);
}
您可能需要修改一下才能获得所需的确切行为,但这些是在Processing中设置计时器的基本方法。