file-io - 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
}
解决方案
当我按下停止按钮时,我希望 keyPressed 会被调用
这不是keyPressed()
函数的工作方式。keyPressed()
当您按下键盘上的某个键时,该函数会触发。按下停止按钮时它不会触发。
尝试单击您的草图窗口(在弹出的窗口中,而不是在编辑器中),然后按键盘上的一个键。
如果这没有达到您的预期,那么听起来您将来会进行一些调试。该draw()
功能是否符合您的预期?变量打印是val
您所期望的吗?如果您println()
在函数内添加一条语句keyPressed()
,它会打印出来吗?
尝试从一个更简单的例子开始。摆脱 arduino 的东西,只输出一个硬编码的文件。然后,如果您遇到困难,您可以发布MCVE以及更具体的问题。祝你好运!
推荐阅读
- solr - solr 搜索中允许的最大权重是多少?
- ios - 当应用程序处于后台/关闭状态时,FCM 通知不工作
- node-modules - 节点模块:模块内的函数调用不起作用
- nginx-config - nginx 从 web 服务器重定向到应用服务器中的 API,但 API 在不同的端口上运行
- javascript - JavaScript - 直到下一个函数完成为止
- javafx - 如何将序列号添加到我需要在 javafx 中添加可观察列表以便显示在表视图中的当前列表中
- php - Wordpress - 使用 Ajax 关注用户列表
- c# - c# - 为什么这个绘图处理程序循环多次?
- python - 根据元素的值替换元素的 for 循环
- android - 为 ConstraintLayout 组设置 alpha 值