Правильно ли активируется keyPressed? - PullRequest
0 голосов
/ 27 июня 2018

Я был введен в Обработка, чтобы получить данные от моего Arduino около 5 часов назад. Кажется, это имеет смысл для меня, и у меня не было опыта работы с Java, но я знаком (но все еще довольно шаток) с C, C + и Matlab, так что ничего удивительного. Я собрал свой код, основанный на множестве других кодов (один метод, с которым я сравнивал, был здесь (официальный сайт) и здесь ), и, похоже, он был точным.

Моя проблема в том, что файл, создаваемый программой Processing, пуст. Кроме того, файл создается непосредственно перед тем, как данные Arduino начинают отображаться в консоли. Поэтому мне интересно, почему файл создается, но на самом деле никогда не изменяется? Я понимаю, что, возможно, файл пуст во время обработки, но когда я нажму кнопку «Стоп», я ожидаю, что будет вызываться keyPressed в соответствии с определением createWriter (ранее связанным).

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
}

1 Ответ

0 голосов
/ 27 июня 2018

когда я нажму кнопку остановки, я ожидаю, что keyPressed будет вызываться

Это не то, как работает функция keyPressed(). Функция keyPressed() срабатывает при нажатии клавиши на клавиатуре. Он не срабатывает при нажатии кнопки остановки.

Попробуйте щелкнуть в окне эскиза (в всплывающем окне, а не в редакторе), а затем нажать клавишу на клавиатуре.

Если это не сработает, как вы ожидали, похоже, что какая-то отладка находится в вашем будущем. Функция draw() выполняет то, что вы ожидали? Является ли переменная печать val ожидаемой? Если вы добавите оператор println() в функцию keyPressed(), он будет распечатан?

Попробуйте начать с более простого примера. Избавьтесь от Arduino и просто выводите жестко запрограммированный файл. Затем, если вы застряли, вы можете опубликовать MCVE вместе с более конкретным вопросом. Удачи!

...