【问题标题】:Is keyPressed being activated correctly?keyPressed 是否被正确激活?
【发布时间】:2018-12-05 18:06:23
【问题描述】:

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

我的问题是处理创建的文件是空的。此外,该文件是在 Arduino 的数据开始在控制台中显示之前创建的。所以我想知道为什么文件被创建但从未真正改变过?我知道在 Processing 运行时文件可能是空的,但是当我点击停止按钮时,我希望根据 Processing 对 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-io arduino processing


    【解决方案1】:

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

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

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

    如果这没有达到您的预期,那么听起来debugging 在您的未来。 draw() 函数是否符合您的预期? val 变量打印是您所期望的吗?如果在keyPressed() 函数中添加println() 语句,它会打印出来吗?

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

    【讨论】:

    • 解决您的问题: * 我尝试点击草图窗口,然后在我的键盘上嚎啕大哭。 *val 显示得很好,正如我所料。 *不确定在 keyPressed() 中添加 println() 是什么意思?我应该在那里打印什么? *我实际上创建了 Arduino 代码以确保我可以导出数据。我在处理中看到数据,但我的文件仍然是空的。我不确定我的代码是如何“过度”而不是最小的?
    • @Asinine 我在哪里说您的代码过多?我建议在keyPressed() 函数中添加一个println() 语句,以确认它是否正在触发。再次,我建议从更简单的开始:当用户按下一个键时,你能创建一个将用户鼠标位置存储在文件中的草图吗?如果您发布该草图,它会更容易为您提供帮助。祝你好运。
    • 我认为 Arduino 输入过多@Kevin Workman。我不确定问题出在哪里,但现在在我的桌面上,我看到了正方形。单击该按钮然后按下按钮会停止程序并写入文件。感谢您的答复;我到处搜索,但我想我必须在另一台计算机上尝试。现在调试我的 Surface。
    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2016-07-16
    • 2018-10-10
    相关资源
    最近更新 更多