Pololu Micro Serial Servo Controller Java Source Code
De Wiki de Romain RUDIGER.
carte
code
Code source permettant de contrôler la carte d'interface entre le PC et les servomoteurs. Utilisation de la bibliothèque COMMAPI de Sun Microsystems, Inc.
import java.io.IOException; import java.io.OutputStream; import javax.comm.CommPortIdentifier; import javax.comm.NoSuchPortException; import javax.comm.PortInUseException; import javax.comm.SerialPort; import javax.comm.UnsupportedCommOperationException; public class Pololu { CommPortIdentifier mPortId; SerialPort mPort; OutputStream os; public Pololu(String NomPort, int debit){ try { this.openPort( NomPort ); //ouverture du port this.initPort( debit ); //initialisation du port os = this.getOutputStream(); //Création du conduit de sortie } catch (NoSuchPortException e) { System.out.println( "Le port n'existe pas !"); }catch (PortInUseException e) { System.out.println( "Le port est déja utilisé " + e.getMessage() ); }catch (UnsupportedCommOperationException e) { System.out.println( e.getMessage() ); }catch (IOException e) { this.closePort(); System.out.println( e.getMessage() ); } } /** * Ouverture du port * @param portName nom du port : COM1, COM2... * @throws NoSuchPortException * @throws PortInUseException */ public void openPort( String portName ) throws NoSuchPortException, PortInUseException { mPortId = CommPortIdentifier.getPortIdentifier(portName); mPort = (SerialPort)mPortId.open(portName, 30000); } /** * fermeture du port * */ public void closePort() { mPort.close(); } /** * Initialisation du port * @param baud debit du port en baud * @throws UnsupportedCommOperationException */ public void initPort( int baud ) throws UnsupportedCommOperationException { // Set the baud rate and other parameters. // mPort.setSerialPortParams( baud, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE ); // Setup the flow control // mPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); } OutputStream getOutputStream() throws IOException { return mPort.getOutputStream(); } /** * Controle de la direction de nono * * @param cmde commandes possibles : droit, gauche, droite, stop * @param os OutputStream sur le port serie où est relié le pololu * @return */ int controle (String cmde){ for(int i=0; i<2; i++){ try { //1 start os.write((byte)128); //2 device id os.write((byte)1); //3 cmd os.write((byte)4); if(cmde.equals("droit") && i==0){//servo droit //4 servo os.write((byte)i); //5 data1 0 os.write(0x00); //6 data2 0 os.write(0x00); }else if(cmde.equals("droit") && i==1){//servo gauche //4 servo os.write((byte)i); //5 data1 15 os.write(0x06); //6 data2 7C os.write(0x25); }else if(cmde.equals("droitL") && i==0){//servo droit //4 servo os.write((byte)i); //5 data1 0 os.write(0x08); //6 data2 0 os.write(0x2F); }else if(cmde.equals("droitL") && i==1){//servo gauche //4 servo os.write((byte)i); //5 data1 15 os.write(0x05); //6 data2 7C os.write(0x10); }else if(cmde.equals("droitL+") && i==0){//servo droit //4 servo os.write((byte)i); //5 data1 0 os.write(0x08); //6 data2 0 os.write(0x20); }else if(cmde.equals("droitL+") && i==1){//servo gauche //4 servo os.write((byte)i); //5 data1 15 os.write(0x05); //6 data2 7C os.write(0x18); }else if(cmde.equals("droiteR") && i==0){//servo droit //4 servo os.write((byte)i); //5 data1 15 os.write(0x15); //6 data2 7C os.write(0x7C); }else if(cmde.equals("droiteR") && i==1){//servo gauche //4 servo os.write((byte)i); //5 data1 15 os.write(0x15); //6 data2 7C os.write(0x7C); }else if(cmde.equals("gaucheR") && i==0){//servo droit //4 servo os.write((byte)i); //5 data1 15 os.write(0x00); //6 data2 7C os.write(0x00); }else if(cmde.equals("gaucheR") && i==1){//servo gauche //4 servo os.write((byte)i); //5 data1 15 os.write(0x00); //6 data2 7C os.write(0x00); }else if(cmde.equals("droiteL") && i==0){//servo droit >>arriere //4 servo os.write((byte)i); //5 data1 15 os.write(0x09); //6 data2 7C os.write(0x20); }else if(cmde.equals("droiteL") && i==1){//servo gauche >>droit //4 servo os.write((byte)i); //5 data1 15 os.write(0x05); //6 data2 7C os.write(0x10); }else if(cmde.equals("gaucheL") && i==0){//servo droit >> droit //4 servo os.write((byte)i); //5 data1 15 os.write(0x08); //6 data2 0 os.write(0x2F); }else if(cmde.equals("gaucheL") && i==1){//servo gauche >> arriere //4 servo os.write((byte)i); //5 data1 15 os.write(0x04); //6 data2 7C os.write(0x38); }else if(cmde.equals("droite") && i==0){//servo droit > STOP //4 servo os.write((byte)i); //5 data1 15 os.write(0x08); //6 data2 7C os.write(0x5F); }else if(cmde.equals("droite") && i==1){//servo gauche //4 servo os.write((byte)i); //5 data1 15 os.write(0x15); //6 data2 7C os.write(0x7C); }else if(cmde.equals("gauche") && i==0){//servo droit //4 servo os.write((byte)i); //5 data1 15 os.write(0x00); //6 data2 7C os.write(0x01); }else if(cmde.equals("gauche") && i==1){//servo gauche > STOP //4 servo os.write((byte)i); //5 data1 15 os.write(0x04); //6 data2 7C os.write(0x6F); }else if(cmde.equals("stop") && i==0){//servo droit //4 servo os.write((byte)i); //5 data1 9 15 os.write(0x08); //6 data2 C4 7C os.write(0x5F); }else if(cmde.equals("stop") && i==1){//servo gauche //4 servo os.write((byte)i); //5 data1 9 15 os.write(0x04); //6 data2 C4 7C os.write(0x6F); } os.flush(); } catch (IOException e) { System.out.println( e.getMessage() ); return 1; } } return 0; } public static void main( String args[] ) { Pololu popo = new Pololu("COM1", 57600); popo.controle("droit"); try{ Thread.sleep( 4000 ); }catch( Exception ee ){ ee.printStackTrace(); } popo.controle("stop"); popo.closePort(); System.exit(0); } }
