Pololu Micro Serial Servo Controller Java Source Code

De Wiki de Romain RUDIGER
Aller à : navigation, rechercher

carte

Pololu.jpg

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);
		
	}
}

Référence

product page