Hallo, seit einiger Zeit arbeite ich an folgender Aufgabe:
Hard- und Software:
Arduino UNO R3,
Schnittstelle: JSSC
Thema:
Datenaustausch von Arduino -> Java -> Arduino -> Java -> usw.
Aufgabe:
Der Arduino misst einen LDR-Wert (oder Poti), schickt diesen an das Java-Programm. Java entscheidet dann, dass die LED bei einem LDR-Wert > 500 eingeschaltet werden soll und bei einem LDR-Wert <= 500 ausgeschaltet werden soll. Dann schickt das Java Programm den Wert selbständig, also ohne einen Event (Klick etc.) an den Arduino. Der Arduino sendet dann wieder den aktuellen LDR-Wert automatisch an das Java-Programm und das Spiel geht wieder von vorne los. Hin und her ohne, dass ich da irgendetwas drücken muss.
Die Aufgabe soll später noch komplexer werden.
Problem:
Das Java-Programm empfängt die LDR-Werte vom Arduino. Die LDR-Werte welche das Java-Programm empfängt sind jedoch z.T. bruchstückhaft (z.B. S50, E, 00E).
Es gelingt mir nicht im gleichen Programm dann wieder Informationen von Java zum Arduino zu schicken. (In separaten Programm funktioniert das schon)
Erläuterung:
Arduino Sketch:
Hier verpacke ich den LDR-Wert zwischen einem Startmarker „S“ und einen Endmarker „E“.
#define LED_2 13
int analogPin = A1;
int analogWert = 0;
int onoff = 0;
String string="";
void setup() {
Serial.begin(9600);
pinMode(LED_2, OUTPUT);
}
void loop() {
analogWert = analogRead(analogPin);
string = "S"+String(analogWert)+"E";
Serial.println(string);
Serial.flush();
delay(50);
while(Serial.available()){
onoff = Serial.read();
}
digitalWrite(LED_2, onoff);
}
Java-Programm
Soll den empfangenen String dann bereinigen und wie oben beschrieben „auswerten“. Die Zeile „poti = Integer.parseInt(value);“ ist auskommentiert weil sonst läufts gar nicht.
In der folgenden if-Schleife sollte die Auswertung erfolgen, der Wert „hilo“ dann entsprechend belegt werden und mit sepo.writeInt(hilo); an den Arduino geschickt werden.
package transmit;
import javax.swing.JFrame;
import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;
public class Transmit_001 extends JFrame implements SerialPortEventListener{
// Define COM3 port
private SerialPort sepo = new SerialPort("COM3");
private String value;
private int poti;
private int hilo;
private boolean toogle=false;
// Constructor
public Transmit_001(){
try{
sepo.openPort();
sepo.setParams(9600, 8, 1, 0);
sepo.addEventListener(this);
}catch(SerialPortException ex){
System.out.println(ex);
}
SendReceive();
}
private void SendReceive(){
try{
sepo.writeInt(hilo);
}catch(SerialPortException ex){
System.out.println(ex);
}
}
@Override
public void serialEvent(SerialPortEvent spe){
try{
// String empfangen und säubern
value += sepo.readString();
value=value.replaceAll("null", "");
value=value.replaceAll("\n", "");
value=value.replaceAll("\r", "");
if(value.indexOf("S")==0 && value.indexOf("E")>0){
value=value.substring(1, value.indexOf("E"));
}
// Kontrollausgabe
System.out.println("Received: " + value);
}catch(SerialPortException ex){
System.out.println(ex);
}
// Auswertung und LED hilo (HIGH/LOW) bestimmen
// poti = Integer.parseInt(value);
value="";
// Auswertung
// if(poti >= 500)
hilo=1;
// else
// hilo=0;
System.out.println("LED: " + hilo);
}
public static void main(String[] args) {
Transmit_001 trans01 = new Transmit_001();
}
}
Ich habe auch schon mit FLOWCONTOL probiert, leider ohne Erfolg.
Kann mir da jemand bitte helfen?
Danke Quax
[]