How to... RXTX on Mac

Thanks a lot for your wide reply!

This is the sketch i loaded on my Arduino Uno: (a simple light sensor)

int ledPin = 7;    // il LED e' collegato al pin digitale 7 
int sensorPin = 0;  // il sensore di luce è connesso al piedino analogico 0  
int sensorValue;    // variabile per memorizzare il valore rilevato dal sensore  
  
void setup()  
{  
         pinMode(ledPin, OUTPUT);   // imposta ledPin come pin di output  
         Serial.begin(9600);    //inizializza la porta seriale  
         digitalWrite(ledPin, LOW);    // accende il LED  
}      
  
void loop()  
{  
          sensorValue = analogRead(sensorPin);  // legge il valore dal sensore  
          Serial.println(sensorValue);  // invia il valore al computer  
          Serial.println(" ");
          if (sensorValue > 600)
          {
            digitalWrite(ledPin,HIGH);
          } else digitalWrite(ledPin,LOW);
          delay(500);
}

i would create a java application that receive the "sensorValue" data (from tty.usbmodemXXXXX) and than do something with it.

This is the java code i use:

import java.io.InputStream;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.util.Enumeration;
 
public class ArduinoJava implements SerialPortEventListener {
    SerialPort serialPort;
        /** The port we're normally going to use. */
    private static final String PORT_NAMES[] = {
            "/dev/tty.usbmodemfa131", // Mac OS X
            "/dev/ttyUSB0", // Linux
            "COM3", // Windows
            };
    /** Buffered input stream from the port */
    private InputStream input;
    /** The output stream to the port */
    private OutputStream output;
    /** Milliseconds to block while waiting for port open */
    private static final int TIME_OUT = 2000;
    /** Default bits per second for COM port. */
    private static final int DATA_RATE = 9600;
 
    public void initialize() {
        CommPortIdentifier portId = null;
        Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
 
        // iterate through, looking for the port
        while (portEnum.hasMoreElements()) {
            CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
            for (String portName : PORT_NAMES) {
                if (currPortId.getName().equals(portName)) {
                    portId = currPortId;
                    break;
                }
            }
        }
 
        if (portId == null) {
            System.out.println("Could not find COM port.");
            return;
        }
 
        try {
            // open serial port, and use class name for the appName.
            serialPort = (SerialPort) portId.open(this.getClass().getName(),
                    TIME_OUT);
 
            // set port parameters
            serialPort.setSerialPortParams(DATA_RATE,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
 
            // open the streams
            input = serialPort.getInputStream();
            output = serialPort.getOutputStream();
 
            // add event listeners
            serialPort.addEventListener(this);
            serialPort.notifyOnDataAvailable(true);
        } catch (Exception e) {
            System.err.println(e.toString());
        }
    }
 
    /**
     * This should be called when you stop using the port.
     * This will prevent port locking on platforms like Linux.
     */
    public synchronized void close() {
        if (serialPort != null) {
            serialPort.removeEventListener();
            serialPort.close();
        }
    }
 
    /**
     * Handle an event on the serial port. Read the data and print it.
     */
    public synchronized void serialEvent(SerialPortEvent oEvent) {
        if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
            try {
                int available = input.available();
                byte chunk[] = new byte[available];
                input.read(chunk, 0, available);
 
                // Displayed results are codepage dependent
                System.out.print(new String(chunk));
            } catch (Exception e) {
                System.err.println(e.toString());
            }
        }
        // Ignore all the other eventTypes, but you should consider the other ones.
    }
 
    public static void main(String[] args) throws Exception {
        ArduinoJava main = new ArduinoJava();
        main.initialize();
        System.out.println("Started");
    }
}

so ok...i understand now that i don't need [RXTX library](http://RXTX library), but i don't understand why i got this error with the java code still:

java.lang.UnsatisfiedLinkError: /Library/Java/Extensions/librxtxSerial.jnilib:  no suitable image found.  Did find:  /Library/Java/Extensions/librxtxSerial.jnilib: no matching architecture in universal wrapper thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: /Library/Java/Extensions/librxtxSerial.jnilib:  no suitable image found.  Did find:  /Library/Java/Extensions/librxtxSerial.jnilib: no matching architecture in universal wrapper
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1827)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1716)
	at java.lang.Runtime.loadLibrary0(Runtime.java:823)
	at java.lang.System.loadLibrary(System.java:1045)
	at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
	at ArduinoJava.initialize(ArduinoJava.java:28)
	at ArduinoJava.main(ArduinoJava.java:101)

Anyway, i tried
screen /dev/tty.usbmodemfa131 9600
and it works fine, so it's just a good start point for me :blush: