This is my Java code to send a value to Arduino and a receiving value from Arduino. Can anyone tell where I made a mistake? I am able to send the value but can't receive a value from Arduino.
package hell;
import com.panamahitek.ArduinoException;
import com.panamahitek.PanamaHitek_Arduino;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
public class led extends javax.swing.JFrame
{
PanamaHitek_Arduino Arduino = new PanamaHitek_Arduino();
private BufferedReader input;
SerialPort serialPort;
public led(){
initComponents();
try {
Arduino.arduinoTX("com3", 115200);
}
catch (ArduinoException ex) {
Logger.getLogger(led.class.getName()).log(Level.SEVERE, null, ex);
}
}
public synchronized void close() {
if (serialPort != null) {
serialPort.removeEventListener();
serialPort.close();
}
}
public synchronized void serialEvent(SerialPortEvent oEvent)
{
System.out.println("lol 31");
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
System.out.println("lol 1.1");
Scanner s = new Scanner(serialPort.getInputStream());
int mes =Integer.parseInt( s.nextLine());
System.out.println(mes);
System.out.println("lol 1");
} catch (Exception e) {
System.err.println(e.toString());
System.out.println("Syncronice ");
}
}
// Ignore all the other eventTypes, but you should consider the other ones.
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
try{
Arduino.sendByte(0);
}
catch(Exception ex){
Logger.getLogger(led.class.getName()).log(Level.SEVERE,null, ex);
}
System.out.println("led is off");
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try{
Arduino.sendByte(1);
}
catch(Exception ex){
Logger.getLogger(led.class.getName()).log(Level.SEVERE,null, ex);
}
System.out.println("led is on");
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new led().setVisible(true);
}
});
}
private javax.swing.JButton jButton1;
try{
Arduino.sendByte(1);
}
catch(Exception ex){
Logger.getLogger(led.class.getName()).log(Level.SEVERE,null, ex);
}
System.out.println("led is on");
private javax.swing.JButton jButton2;
}
Here is my Arduino code, which receives a value from Java and prints it accordingly:
int val = 0;
int led = 8;
void setup() {
Serial.begin(112500);
pinMode(led, OUTPUT);
}
void loop() {
if (Serial.available()>0) {
val = Serial.parseInt();
if(val == 1) {
//Switch on the LED, if the received value is 1.
digitalWrite(led, HIGH);
Serial.println("Succesfully received.");
} else if(val == 0) {
//Switch off the LED, if the received value is 1.
digitalWrite(led, LOW);
}
}
}
EDIT: There is no problem to controlling arduino via Java code, the problem is that I can't received message from Arduino to display in a Java.
serialPort
orserialEvent
being called anywhere. And I doubt you will be able to open the port again, if it's already opened byArduino
object. Also you are reading a line from the Arduino and parse it as an integer, but the only thing you are sending from the Arduino is the string"Succesfully received."
.