Fórum Como salvar um arraylist em arquivo (DATALOG) #588724

12/11/2017

0

Estou tentando fazer uma plicação java que leia dados de um porta serial e armazene os valores recebidos em um arquivo TXT(datalog)
JavaFX com bilioteca JSSC para comunicação serial
Recebo os valores estou os armazenado em um array para depois salvar em arquivo(não estou conseguindo



segue codigo




//import java.awt.Font;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import jssc.SerialPort;
import static jssc.SerialPort.MASK_RXCHAR;
import jssc.SerialPortEvent;
import jssc.SerialPortException;
import jssc.SerialPortList;
import javafx.scene.text.Font;
import javafx.scene.text.TextAlignment;
////

public class  Temp_Uno extends Application {
    
    SerialPort arduinoPort = null;
    ObservableList<String> portList;
    
    Label labelValue;

    private void detectPort(){
       
        portList = FXCollections.observableArrayList();
 
        String[] serialPortNames = SerialPortList.getPortNames();
        for(String name: serialPortNames){
            System.out.println(name);
            portList.add(name);
        }
    }
    
    @Override
    public void start(Stage primaryStage) {
        
        labelValue = new Label();
        labelValue.setFont(new Font("Arial", 100));
        labelValue.setTextFill(Color.web("#00008B"));
        labelValue.setTextAlignment(TextAlignment.JUSTIFY);

        detectPort();
        final ComboBox comboBoxPorts = new ComboBox(portList);
        comboBoxPorts.valueProperty()
                .addListener(new ChangeListener<String>() {

            @Override
            public void changed(ObservableValue<? extends String> observable, 
                    String oldValue, String newValue) {

                System.out.println(newValue);
                disconnectArduino();
                connectArduino(newValue);
            }

        });
        
        VBox vBox = new VBox();
        vBox.getChildren().addAll(
                comboBoxPorts, labelValue);
        
        StackPane root = new StackPane();
        root.getChildren().add(vBox);
        
        Scene scene = new Scene(root, 500, 250);
        
        primaryStage.setTitle("Selecione a Porta onde se encontra o Arduino");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public boolean connectArduino(String port){
        
        System.out.println("Conectado ao Arduino");
        Path destino = Paths.get("d:\\\\temperatura.txt");
        ArrayList lista = new ArrayList(); //array para armazenar valores recebidos da serial


boolean success = false;
        SerialPort serialPort = new SerialPort(port);
        try {
            serialPort.openPort();
            serialPort.setParams(
                    SerialPort.BAUDRATE_9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            serialPort.setEventsMask(MASK_RXCHAR);
            serialPort.addEventListener((SerialPortEvent serialPortEvent) -> {
                if(serialPortEvent.isRXCHAR()){
                    try {
                        String st = serialPort.readString(serialPortEvent
                                .getEventValue());
                        System.out.println("Temperatura Atual => : " + st);
                        lista.add (st);
                        for (int i = 0; i < lista.size(); i++) {
                            System.err.println("Imprimindo Indice "+i);
                            System.err.println("Imprimindo Lista " + lista.get(i));
//                            Files.list(destino, lista.get(i));
                         }
                         
            
                        
                        
               
                        
//                        Writer arq = null;
//                        PrintWriter gravarArq = new PrintWriter(arq);
//                        gravarArq.printf(st);
//                        arq.close();

//                        String valor = st;
//                        byte[] valorbyte = valor.getBytes();
//                        try {
//                            Files.write(destino, valorbyte);
//                        } catch (IOException ex) {
//                            Logger.getLogger(JavaFX_jssc_Uno.class.getName()).log(Level.SEVERE, null, ex);
//                        }
                     
                          //Update label in ui thread
                        Platform.runLater(() -> {
                            labelValue.setText(st);
                        
                        });
                     

                    } catch (SerialPortException ex) {
                        Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                                .log(Level.SEVERE, null, ex);
                    }
                }
            });
            
            arduinoPort = serialPort;
            success = true;
        } catch (SerialPortException ex) {
            Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                    .log(Level.SEVERE, null, ex);
            System.out.println("Erro ao conectar Serial do Arduino: " + ex.toString());
        }

        return success;
    }
        
    public void disconnectArduino(){
        
        System.out.println("Arduino desconectado");
        if(arduinoPort != null){
            try {
                arduinoPort.removeEventListener();
                
                if(arduinoPort.isOpened()){
                    arduinoPort.closePort();
                }
                
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
        }
    }

    @Override
    public void stop() throws Exception {
        disconnectArduino();
        super.stop();
    }
            
    public static void main(String[] args) {
        launch(args);
    }
    
}


George Castro

George Castro

Responder

Post mais votado

12/11/2017

Deivid Nascimento

Deivid Nascimento
Responder

Gostei + 1

Mais Posts

13/11/2017

George Castro

Cara valeu pela atenção. Consegui solucionar logo após o pedido de ajuda. Fiz assim:

Path destino = Paths.get("d:\\\\temperatura.txt");
        ArrayList lista = new ArrayList(); //array para armazenar valores recebidos da serial
.....
......

if (serialPortEvent.isRXCHAR()) {
                    try {
                        String st = serialPort.readString(serialPortEvent
                                .getEventValue());
                        System.out.println(st);
                        lista.add(st);
                        byte[] dadoembyte = st.getBytes();
                        try {
                            Files.write(destino, lista);
                        } catch (IOException ex) {
                            Logger.getLogger(JavaFX_jssc_Uno.class.getName()).log(Level.SEVERE, null, ex);
                        }

                        //Update label in ui thread
                        Platform.runLater(() -> {
                            labelValue.setText(st);

                        });

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar