Lejos EV3 Автомобиль с дистанционным управлением - PullRequest
0 голосов
/ 24 октября 2018

Я работаю над заданием для курса робототехники, и я и мой партнер столкнулись с некоторыми проблемами в самом конце нашей работы.У нас есть два кирпича 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();
    }
}

Буду признателен за любую помощь и извините, если я не предоставил достаточно информации.

...