Ok!
Jag gråter i och för sig inte över det i detta fallet för om jag har
kortet i en mättillämpning där jag har ett java-program som ska
hämta värden så vet jag att mätningen startar då jag kör igång
java-programmet, eller i alla fall den kod som öppnar porten.
Då är det ju lätt att fixa till en starknapp i ett gui, en knapp som
inte behöver sända några speciella startkoder till Arduinon.
Enkel Mätinsamling?
-
- Inlägg: 1407
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Enkel Mätinsamling?
Det är inte att öppna porten som gör en omstart, det är DTR-linan. Deras monitor gör en tvingad omstart men gör du ett eget program kan du ju välja själv hur du vill ha det.
Re: Enkel Mätinsamling?
Det var intressant..
Kan du då säga vad det är i den här koden som får Aurdinon att starta om,
koden är inte helt ok tror jag för det funkar inte varje gång när jag kör den.
Ska jag skicka någon typ av DTR-kommando för att det ska fungera lika bra som
monitorn?
Kan du då säga vad det är i den här koden som får Aurdinon att starta om,
koden är inte helt ok tror jag för det funkar inte varje gång när jag kör den.
Ska jag skicka någon typ av DTR-kommando för att det ska fungera lika bra som
monitorn?
Kod: Markera allt
import java.util.Scanner;
import com.fazecast.jSerialComm.SerialPort;
public class SerialMainScanner {
public static void main(String[] args) {
boolean AUnoFlag = false;
int AUnoIndex = -1;
SerialPort serialPort;
Scanner arduinoScanIn = null;
SerialPort[] sp = SerialPort.getCommPorts();
System.out.println("Antal tillgängliga seriella portar: "+sp.length);
System.out.println("===========================================");
for(int j=0;j<sp.length;j++) {
System.out.println(sp[j].getDescriptivePortName()+" öppen = "+sp[j].isOpen());
if(sp[j].getDescriptivePortName().contains("Arduino Uno")){
AUnoFlag = true;
AUnoIndex = j;
}
}
if(AUnoFlag) {
serialPort = sp[AUnoIndex];
serialPort.openPort(); // Open connection
serialPort.setBaudRate(19200);
serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 1000, 0);
//serialPort.setComPortTimeouts(SerialPort.TIMEOUT_SCANNER, 0, 0);
System.out.println(serialPort.getDescriptivePortName()+ " öppnad = "+serialPort.isOpen());
System.out.println("FlowControl "+serialPort.getFlowControlSettings());
System.out.println("ReadTimeout "+serialPort.getReadTimeout());
if((serialPort.bytesAvailable()>0)) {
try
{
arduinoScanIn = new Scanner(serialPort.getInputStream());
arduinoScanIn.reset();
}
catch(Exception e)
{
e.printStackTrace();
}
arduinoScanIn.useDelimiter(" ");
System.out.println(arduinoScanIn.findInLine("START"));
arduinoScanIn.nextLine();
while(arduinoScanIn.hasNextLine())
{
try
{
System.out.println(arduinoScanIn.nextLine());
}
catch(Exception e)
{
e.printStackTrace();
}
}
arduinoScanIn.close();
}
if(serialPort.isOpen())
serialPort.closePort();
System.out.println("End from Java!");
}
}
}
Re: Enkel Mätinsamling?
Jag testade med
som verkar fungera förutom att det blippar upp ett kolsvart kommadofönster vid uppstart?
Kod: Markera allt
serialPort.setDTR();
serialPort.openPort();
Thread.sleep(100);
serialPort.clearDTR();
Re: Enkel Mätinsamling?
Det här fungerar bättre och det går bra att starta om java mitt
i en insamling utan att tabellen påverkas. Dock dyker det upp
lite blippande svarta kommandotolkar. Så man undrar lite nyfiket hur
de löst det i Arduino-monitorn?
i en insamling utan att tabellen påverkas. Dock dyker det upp
lite blippande svarta kommandotolkar. Så man undrar lite nyfiket hur
de löst det i Arduino-monitorn?
Kod: Markera allt
serialPort.openPort();
Thread.sleep(400);
serialPort.clearDTR();
Re: Enkel Mätinsamling?
Jag kom på att det i raden
serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 3500, 0);
är viktigt att sätta värdet (3500 i det här fallet) tillräckligt stort om man
har data som rullar in långsamt, som exempelvis vid en NTC-ohm mätning,
annars så terminerar java-programmet innan nästa mätvärde anländer.
Det här börjar bli riktigt kul!
serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 3500, 0);
är viktigt att sätta värdet (3500 i det här fallet) tillräckligt stort om man
har data som rullar in långsamt, som exempelvis vid en NTC-ohm mätning,
annars så terminerar java-programmet innan nästa mätvärde anländer.

Det här börjar bli riktigt kul!