首页 > 解决方案 > keyPressed 是否被正确激活?

问题描述

大约 5 小时前,我被介绍到 Processing 以从我的 Arduino 获取数据。这对我来说似乎很有意义,而且我以前没有 Java 经验,但对 C、C+ 和 Matlab 很熟悉(但仍然很不稳定),所以没有什么出乎意料的。我根据许多其他代码(我比较的一种方法是here(官方网站)here)整理了我的代码,它似乎是正确的。

我的问题是处理创建的文件是空的。此外,该文件是在 Arduino 的数据开始在控制台中显示之前创建的。所以我想知道为什么文件被创建但从未真正改变过?我知道在处理运行时文件可能是空的,但是当我点击停止按钮时,我希望根据处理对 createWriter 的定义(先前链接)调用 keyPressed。

import processing.serial.*;

// Dynamic constants
String portNum = "COM4";  // Choose COM port -- will vary by computer
String FileName = "test.txt";  // Name will change for data collection

// Static constants
Serial myPort;    // Create object from Serial class
String val;       // Data received from the serial port
PrintWriter output;

void setup() {
  //String portName = Serial.list()[portNum];
  myPort = new Serial(this, portNum, 9600);
  output = createWriter(FileName);
}

void draw() {
  if (myPort.available() > 0) {          // If data is available,
    val = myPort.readStringUntil('\n');  // read it and store it in val
  } 
  if (val != null) {     // For valid data
    output.println(val); // print data
    println(val);        // To see it's working
  }
}

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

标签: file-ioarduinoprocessing

解决方案


当我按下停止按钮时,我希望 keyPressed 会被调用

这不是keyPressed()函数的工作方式。keyPressed()当您按下键盘上的某个键时,该函数会触发。按下停止按钮时它不会触发。

尝试单击您的草图窗口(在弹出的窗口中,而不是在编辑器中),然后按键盘上的一个键。

如果这没有达到您的预期,那么听起来您将来会进行一些调试。该draw()功能是否符合您的预期?变量打印是val您所期望的吗?如果您println()在函数内添加一条语句keyPressed(),它会打印出来吗?

尝试从一个更简单的例子开始。摆脱 arduino 的东西,只输出一个硬编码的文件。然后,如果您遇到困难,您可以发布MCVE以及更具体的问题。祝你好运!


推荐阅读