Enkel Mätinsamling?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

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.
Mr Andersson
Inlägg: 1394
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Enkel Mätinsamling?

Inlägg av Mr Andersson »

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.
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

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?

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!");
		}
		
	}
}

Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

Jag testade med

Kod: Markera allt

serialPort.setDTR();
serialPort.openPort(); 	
Thread.sleep(100);
serialPort.clearDTR();
som verkar fungera förutom att det blippar upp ett kolsvart kommadofönster vid uppstart?
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

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?

Kod: Markera allt

serialPort.openPort(); 	
Thread.sleep(400);
serialPort.clearDTR();
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

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!
Skriv svar