Я работаю над заданием для курса робототехники, и я и мой партнер столкнулись с некоторыми проблемами в самом конце нашей работы.У нас есть два кирпича lejos ev3, один из которых настроен как автомобиль, а другой - как контроллер.Итак, у меня есть два класса ниже, RemoteCar правильно отправляет входные данные в класс Controller, но единственная проблема заключается в том, что он начинает читать эти входные данные только после нажатия кнопки выхода.Я пытался реализовать задержки, чтобы исправить это, но так как он отформатирован сейчас, я не уверен, почему это происходит.
import java.io.DataInputStream;
import java.io.DataOutputStream;
import lejos.hardware.Bluetooth;
import lejos.hardware.Button;
import lejos.hardware.ev3.LocalEV3;
import lejos.hardware.lcd.LCD;
import lejos.hardware.port.Port;
import lejos.hardware.sensor.MindsensorsAbsoluteIMU;
import lejos.hardware.sensor.SensorMode;
import lejos.remote.nxt.NXTCommConnector;
import lejos.remote.nxt.NXTConnection;
import lejos.utility.Delay;
public class RemoteCar {
private static final String EV3 = "00:16:53:4A:87:5B";
public static void main(String[] args) throws Exception{
new RemoteCar();
}
public RemoteCar()throws Exception{
Port port = LocalEV3.get().getPort("S1");
MindsensorsAbsoluteIMU sensor = new MindsensorsAbsoluteIMU(port);
SensorMode accelerometer = sensor.getAccelerationMode();
float[] sample = new float[sensor.sampleSize()];
NXTCommConnector connector = Bluetooth.getNXTCommConnector();
NXTConnection connection = connector.connect(EV3,NXTConnection.RAW);
DataInputStream input = connection.openDataInputStream();
DataOutputStream output = connection.openDataOutputStream();
while(Button.getButtons() != Button.ID_ALL)
{
accelerometer.fetchSample(sample, 0);
LCD.drawString(sample[0] + "m/s/s", 0, 2);
LCD.drawString(sample[1] + "m/s/s", 0, 3);
float x = sample[0];
float y = sample[1];
if (5 < Math.round(y)){
output.write(1);
LCD.drawString("1", 0, 5);
Delay.msDelay(1000);
}
if (Math.round(x) < -5){
output.write(2);
LCD.drawString("2", 0, 5);
Delay.msDelay(1000);
}
if (5 < Math.round(x)){
output.write(3);
LCD.drawString("3", 0, 5);
Delay.msDelay(1000);
}
if (Math.round(y) < -5){
output.write(4);
LCD.drawString("4", 0, 5);
Delay.msDelay(1000);
}
if (Button.ESCAPE.isDown()){
sensor.close();
output.flush();
output.close();
input.close();
connection.close();
System.exit(0);
}
}
}
}
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import lejos.hardware.Bluetooth;
import lejos.hardware.Button;
import lejos.hardware.lcd.LCD;
import lejos.hardware.motor.Motor;
import lejos.remote.nxt.NXTCommConnector;
import lejos.remote.nxt.NXTConnection;
import lejos.utility.Delay;
public class Controller {
public static void main(String[] args) throws Exception{
new Controller();
}
public Controller()throws Exception{
NXTCommConnector connector = Bluetooth.getNXTCommConnector();
NXTConnection con = connector.waitForConnection(0, NXTConnection.RAW);
DataInputStream dis = con.openDataInputStream();
DataOutputStream dos = con.openDataOutputStream();
byte[] n = new byte[1];
Motor.A.setSpeed(500);
Motor.D.setSpeed(500);
while(true)
{
try
{
if (dis.read(n) == -1)
break;
} catch (EOFException e)
{
break;
}
LCD.drawString("Read: " + n[0], 0 ,3);
while(Button.getButtons() != Button.ID_ALL)
{
dis.read(n);
int a = n[0];
if(a == 1)
{
LCD.drawString("Forward: " + n[0], 0 ,3);
Motor.D.forward();
Motor.A.forward();
Delay.msDelay(10);
}
if (a == 2)
{
LCD.drawString("Right: " + n[0], 0 ,3);
Motor.D.backward();
Motor.A.forward();
Delay.msDelay(10);
}
if (a == 3)
{
LCD.drawString("Left: " + n[0], 0 ,3);
Motor.D.forward();
Motor.A.backward();
Delay.msDelay(10);
}
if (a == 4)
{
LCD.drawString("Backward: " + n[0], 0 ,3);
Motor.D.backward();
Motor.A.backward();
Delay.msDelay(10);
}
if (Button.ESCAPE.isDown()){
Motor.D.stop();
Motor.A.stop();
System.exit(0);
}
}
}
Delay.msDelay(1000);
dis.close();
dos.close();
con.close();
}
}
Буду признателен за любую помощь и извините, если я не предоставил достаточно информации.