Control an Arduino with Java

后端 未结 3 736
眼角桃花
眼角桃花 2020-12-13 10:23

I am looking to turn an LED on and off with a Java program. I did the project in C# in roughly 5 minutes, but it seems to be somewhat more challenging in Java. I had the Ard

相关标签:
3条回答
  • 2020-12-13 11:01

    You can use the JArduino (Java-Arduino) library, which provides a Java API to control your Arduino using serial port (using a USB cable, or wireless devices behaving as serial ports from a software point of view), UDP (via an ethernet shield). All the code related to communication between Java and Arduino is managed internally by the library.

    Here is a Java sample to blink an LED:

    public class Blink extends JArduino {
    
    public Blink(String port) {
        super(port);
    }
    
    @Override
    protected void setup() {
        // initialize the digital pin as an output.
        // Pin 13 has an LED connected on most Arduino boards:
        pinMode(DigitalPin.PIN_12, PinMode.OUTPUT);
    }
    
    @Override
    protected void loop() {
        // set the LED on
        digitalWrite(DigitalPin.PIN_12, DigitalState.HIGH);
        delay(1000); // wait for a second
        // set the LED off
        digitalWrite(DigitalPin.PIN_12, DigitalState.LOW);
        delay(1000); // wait for a second
    }
    
    public static void main(String[] args) {
        String serialPort;
        if (args.length == 1) {
            serialPort = args[0];
        } else {
            serialPort = Serial4JArduino.selectSerialPort();
        }
        JArduino arduino = new Blink(serialPort);
        arduino.runArduinoProcess();
    }
    }
    

    JArduino is available at: JArduino

    0 讨论(0)
  • 2020-12-13 11:10

    In order to communicate with a comm port in Java, you need some implementation of the Java Communications API. I can attest to RXTX, I have used it before to communicate with an Arduino.

    Once you have your Java Communications implementation, it becomes fairly simple to communicate with an Arduino:

    CommPort arduino = getArduinoPort();
    arduino.getOutputStream().write(1);
    
    public CommPort getArduinoPort() {
        Enumeration ports = CommPortIdentifier.getPortIdentifiers();
        while(ports.hasMoreElements()) {
            CommPortIdentifier identifier = (CommPortIdentifier) ports.nextElement();
            if(isArduino(identifier)) {
                return identifier.open(getClass().getName(), 2000); // 2 second timeout
            }
        }
        return null;
    }
    
    public boolean isArduino(CommPortIdentifier identifier) {
        // if you know the name of the port ahead of time you can
        // compare it here with identifier.getName(), otherwise
        // you can interface with the user like the Arduino IDE's
        // serial monitor
    }
    

    The RXTX website also has other examples [2] which you might find useful.

    0 讨论(0)
  • 2020-12-13 11:14

    You can easily build Arduino programs in Java, thanks to the excellent HaikuVM.

    Here is an example:

    import static processing.hardware.arduino.cores.arduino.Arduino.*;
    
    public class Blink {
        static byte ledPin = 13;            // LED connected to digital pin 13
    
        public static void setup() {
            pinMode(ledPin, OUTPUT);        // sets the digital pin as output
        }
    
        public static void loop()           // run over and over again
        {
            digitalWrite(ledPin, HIGH);     // sets the LED on
            delay(500);                    // waits for a second
            digitalWrite(ledPin, LOW);      // sets the LED off
            delay(500);                    // waits for a second
        }
    }
    
    0 讨论(0)
提交回复
热议问题