/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package robotinterface.robot.device; import java.nio.ByteBuffer; import robotinterface.robot.Robot; import robotinterface.robot.simulation.VirtualDevice; /** * * @author antunes */ public class HBridge extends Device implements VirtualDevice { private int LeftWheelSpeed; private int RightWheelSpeed; public HBridge() { } @Override public void setState(ByteBuffer data) { if (data.remaining() == 2) { if (data.get() == 0) { LeftWheelSpeed = data.get(); } else { RightWheelSpeed = data.get(); } } } @Override public void getState(ByteBuffer buffer, Robot robot) { buffer.put((byte) 2); buffer.put((byte) LeftWheelSpeed); buffer.put((byte) RightWheelSpeed); } @Override public void setState(ByteBuffer data, Robot robot) { setState(data); } public void setMotorState(int motor, byte speed) { byte[] msg = new byte[5]; msg[0] = Robot.CMD_SET; //comando get msg[1] = getID(); //id msg[2] = 2; //tamanho da mensagem (2 bytes) msg[3] = (byte) motor; //byte 1 - motor msg[4] = speed; //byte 2 - velocidade send(msg); //envia mensagem if (motor == 0) { this.LeftWheelSpeed = speed; } else { this.RightWheelSpeed = speed; } } public void setFullState(byte speedM1, byte speedM2) { byte[] msg = new byte[10]; msg[0] = Robot.CMD_SET; //comando get msg[1] = getID(); //id msg[2] = 2; //tamanho da mensagem (2 bytes) msg[3] = 0; msg[4] = speedM1; msg[5] = Robot.CMD_SET; //comando get msg[6] = getID(); //id msg[7] = 2; //tamanho da mensagem (2 bytes) msg[8] = 1; msg[9] = speedM2; send(msg); this.LeftWheelSpeed = speedM1; this.RightWheelSpeed = speedM2; } public int getLeftWheelSpeed() { return LeftWheelSpeed / 2; } public int getRightWheelSpeed() { return RightWheelSpeed / 2; } @Override public String stateToString() { return ""; } @Override public int getClassID() { return 2; } public static double realToVirtualVelocityConvert(int v) { //return -7.7 + 1.19*v + 0.1*(v*v) + -9.29*(v*v*v); return v; } @Override public void updateRobot(Robot robot) { // robot.setRightWheelSpeed(realToVirtualVelocityConvert(RightWheelSpeed)); // robot.setLeftWheelSpeed(realToVirtualVelocityConvert(LeftWheelSpeed)); robot.setRightWheelSpeed(RightWheelSpeed); robot.setLeftWheelSpeed(LeftWheelSpeed); } @Override public String getName() { return "Motores"; } @Override public void resetState() { LeftWheelSpeed = 0; RightWheelSpeed = 0; } }