I'm trying to communicate Arduino with Java i'm using JSerialComm for this. I'm trying to turn on and off a led with java using a GUI. The problem i have is that when i try to turn on the Led it flashes on and and instantly off, but i'm trying to keep it on or off with the buttons. When i use Serial Monitor in Arduino and write 1 or 0 it works fine but when using GUI with buttons it doesn't work for some reason.
Ardiuno Code:
#define LED 13
int input;
void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
}
void loop()
{
if (Serial.available() > 0) {
input = Serial.read();
Serial.println(input);
if (input == '1') {
Serial.println("Start");
digitalWrite(LED, HIGH);
} else if (input == '0') {
Serial.println("Stop);
digitalWrite(LED, LOW);
}
}
}
Java Code Ardiuno Connection where we make the Connection and Classes for Turning on a led and off:
import com.fazecast.jSerialComm.SerialPort;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ArdiunoConnection {
SerialPort sp;
public boolean getConnection() {
sp = SerialPort.getCommPorts()[0];
sp.setComPortParameters(9600, 8, 1, 0);
sp.setComPortTimeouts(SerialPort.TIMEOUT_WRITE_BLOCKING, 0, 0);
return sp.openPort();
}
public void turnOn() throws IOException {
if (getConnection()) {
sp.getOutputStream().write('1');
sp.getOutputStream().flush();
System.out.println("Sent number: " + 0);
sp.closePort();
} else {
System.out.println("Error");
}
}
public void turnOff() throws IOException {
if (getConnection()) {
sp.getOutputStream().write('0');
sp.getOutputStream().flush();
System.out.println("Sent number:" + 0);
sp.closePort();
} else {
System.out.println("Error");
}
}
}
Java code for GUI where we make a ActionListener that performs the Ardiuno off or on
import com.fazecast.jSerialComm.SerialPort;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Systeem extends javax.swing.JFrame {
boolean light;
ArdiunoConnection obj;
private JButton btnLight;
private JPanel MainPaneltje;
public Systeem() {
setContentPane(MainPaneltje);
btnLight.setText("Starten");
obj = new ArdiunoConnection();
setTitle("GUI");
setSize(600, 400);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
btnLight.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
if (light) {
btnLight.setText("Starten");
obj.turnOn();
light = false;
} else {
btnLight.setText("Stoppen");
obj.turnOff();
light = true;
}
} catch (IOException ex) {
Logger.getLogger(System.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
public static void main(String[] args) {
Systeem gui = new Systeem();
}
}