2016-03-06 60 views
0

我有一個Arduino每秒通過串行發送數據的基本草圖,並通過Processing 2.1進行可視化。每隔(X)分鐘保存Arduino UNO串行數據

從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

添加一個計時器,然後在draw()檢查是否過了5分鐘。如果是這樣,那麼flush()close()你的輸出。我相信你可能不得不在輸出結束後重新創建輸出。

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); 
} 

您可能需要修補一點得到你想要的確切行爲,但這些都是基本的方法建立在加工的計時器。

+0

謝謝凱文。這看起來像我所需要的。我找不到一個清楚解釋的版本。非常感激。 –