使用JInput发送与Java的串行通信时,它比较滞后,一键发送多个字符

时间:2019-07-12 13:46:08

标签: java arduino

当我按下操纵杆上的按钮以通过串行发送字符时,应该将按钮打印到控制台,然后通过串行发送字符。当我按下按钮时,它会打印两次,而arduino中的伺服器会延迟一到两秒。

我尝试过更改伺服引脚,拔下Arduino并重新插入,在arduino.openConnection()周围移动;并制作一个新项目。

package com.frostydev;

import net.java.games.input.*;
import arduino.Arduino;
import arduino.Arduino.*;

@SuppressWarnings("unused")
public class App {

    public static void main(String[] args) {
        Controller[] controllers = ControllerEnvironment.getDefaultEnvironment().getControllers();
        Controller myJoy = controllers[15];

        Arduino arduino = new Arduino("COM5", 9600);

        Component[] components = myJoy.getComponents();

        while(true) {
            myJoy.poll();
            arduino.openConnection();

            EventQueue queue = myJoy.getEventQueue();

            Event event = new Event();

            while(queue.getNextEvent(event)) {
                Component comp = event.getComponent();
                double rawValue = event.getValue();

                if(comp.isAnalog()) {

                } else {
                    if(comp.getIdentifier() == Component.Identifier.Button._0) {
                        arduino.serialWrite("1");
                        System.out.println("Right");
                    } else if(comp.getIdentifier() == Component.Identifier.Button._1) {
                        arduino.serialWrite("0");
                        System.out.println("Left");
                    }
                }
            }
        }
    }
}

请记住,我正在使用Arduino库

#include <Servo.h>

Servo myServo;
long num;

void setup(){
  myServo.attach(9);
  Serial.begin(9600);

  myServo.write(75);
}

void loop(){
  if(Serial.available() > 0){
    char letter = Serial.read();

    if(letter == '1'){
      myServo.write(myServo.read() + 5);
    } else if(letter == '0'){
      myServo.write(myServo.read() - 5);
    } 
  }
}

它应该显示“对!”当我单击操纵杆上的触发器或按钮0,然后将舵机向右移动5度时,当我单击操纵杆上的按钮1时,应该打印“左!”。并将伺服器向左移动5度。他们是分开工作的,但我无法正确地把他们在一起。

0 个答案:

没有答案