Java 每(X)分钟保存一次Arduino UNO串行数据

Java 每(X)分钟保存一次Arduino UNO串行数据,java,arduino,processing,Java,Arduino,Processing,我在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;

我在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分钟保存一次


有什么想法吗?

添加计时器,然后在
draw()
中检查是否已过5分钟。如果已过5分钟,则
flush()
close())
您的输出。我相信您可能必须在关闭输出后重新创建输出。

我假设您知道如何填充
指令
,尽管您尚未发布执行该操作的代码

但是假设这样,有几种方法可以设置计时器

您可以使用此函数。此函数返回程序运行的毫秒数,以便您可以使用它记录开始和结束时间,然后使用这些时间计算经过的时间。如果经过的时间超过某个阈值,则您可以触发事件。类似这样的情况:

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);
}
int frameDelay = 600; //10 seconds

void draw(){
   if(frameCount % frameDelay == 0){
      fire();
   }
}

void fire(){
   output.println(inString);
}
您也可以使用该函数。它类似于
millis()
函数,只是它保存自程序启动以来绘制的帧数。您可以使用它每X帧执行一次操作,如下所示:

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);
}
int frameDelay = 600; //10 seconds

void draw(){
   if(frameCount % frameDelay == 0){
      fire();
   }
}

void fire(){
   output.println(inString);
}

您可能需要稍加修改才能获得所需的准确行为,但这些是在处理过程中设置计时器的基本方法。

谢谢Kevin。这看起来是我所需要的。我找不到一个解释清楚的版本。非常感谢。