From b460a8f8b9cc1064099429b37ae05b1d65af0426 Mon Sep 17 00:00:00 2001 From: cs-powell <142438185+cs-powell@users.noreply.github.com> Date: Fri, 29 Nov 2024 20:20:03 -0500 Subject: [PATCH] Data logging toggle switch --- Java/ProjectModels/.vscode/settings.json | 6 ++ .../CognitiveModel/ModelFiles/Model.java | 56 +++++++++- Java/ProjectModels/Main.java | 6 ++ Java/ProjectModels/Model-1/src/Main.java | 2 - Java/ProjectModels/Visualizer/visualizer.java | 102 ++++++++++++++++-- Java/ProjectModels/testprocess1.java | 1 + 6 files changed, 161 insertions(+), 12 deletions(-) create mode 100644 Java/ProjectModels/.vscode/settings.json diff --git a/Java/ProjectModels/.vscode/settings.json b/Java/ProjectModels/.vscode/settings.json new file mode 100644 index 0000000..c767678 --- /dev/null +++ b/Java/ProjectModels/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "java.project.referencedLibraries": [ + "lib/**/*.jar", + "/Users/flyingtopher/Desktop/Code Citadel/flatlaf-3.5.2.jar" + ] +} \ No newline at end of file diff --git a/Java/ProjectModels/CognitiveModel/ModelFiles/Model.java b/Java/ProjectModels/CognitiveModel/ModelFiles/Model.java index c0ae8d1..4216d07 100644 --- a/Java/ProjectModels/CognitiveModel/ModelFiles/Model.java +++ b/Java/ProjectModels/CognitiveModel/ModelFiles/Model.java @@ -1,5 +1,8 @@ package ModelFiles; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; import java.io.IOException; // import ModelFiles.ActionType; @@ -11,17 +14,22 @@ public class Model { boolean modelActive; // On/Off Switch for the model execution XPlaneConnect xpc; // Allows connection to the simulator float[] storedVision; + boolean logCreated; + boolean logAllowed; + File dataLogFile = null; // Constructors public Model() { q = new MindQueue(); modelActive = false; + logCreated = false; } public Model(XPlaneConnect xpc) { q = new MindQueue(); modelActive = false; this.xpc = xpc; + logCreated = false; } /* Getters */ @@ -183,14 +191,58 @@ public class Model { } - public float[] getCurrentControls(){ + public float[] getCurrentControls() throws IOException{ float [] returnArray = null; try { returnArray = xpc.getCTRL(0); } catch (IOException e) { // TODO Auto-generated catch block - e.printStackTrace(); + throw e; } return returnArray; } + + + public void startLog(){ + logAllowed = true; + } + + public void stopLog(){ + logAllowed = false; + } + + public boolean logPermission(){ + return logAllowed; + } + + + + public void logData() { + if(logAllowed) { + logProcess(); + } + } + + + private void logProcess(){ + if(!logCreated) { + dataLogFile = new File("./dataLog/" + java.time.LocalDateTime.now()); + logCreated = true; + } + + String log = null; + try { + float[] ctrl1 = this.getCurrentControls(); + log = String.format("[Elevator: %2f] [Roll: %2f] [Yaw: %2f] [Throttle:%2f] [Flaps: %2f] \n", + ctrl1[0], ctrl1[1], ctrl1[2], ctrl1[3], ctrl1[5]); + FileWriter fw = new FileWriter(dataLogFile, true); + BufferedWriter br = new BufferedWriter(fw); + br.write(log); + br.flush(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + System.out.println("No data to log"); + } + } } diff --git a/Java/ProjectModels/Main.java b/Java/ProjectModels/Main.java index a23f12e..df2fa83 100644 --- a/Java/ProjectModels/Main.java +++ b/Java/ProjectModels/Main.java @@ -1,8 +1,14 @@ +import javax.swing.UIManager; + +import com.formdev.flatlaf.FlatLightLaf; + import ModelFiles.Model; public class Main { public static void main(String[] args) { + // FlatLightLaf.setup(); + // Encapsulation (or lack thereof) Test Model m = new Model(); testprocess1 tp1 = new testprocess1(m, null); diff --git a/Java/ProjectModels/Model-1/src/Main.java b/Java/ProjectModels/Model-1/src/Main.java index 96d7c27..5eab706 100644 --- a/Java/ProjectModels/Model-1/src/Main.java +++ b/Java/ProjectModels/Model-1/src/Main.java @@ -205,7 +205,6 @@ public class Main BufferedWriter bw = new BufferedWriter(fw); while(true) { - //THE GETTERS double[] posi1 = xpc.getPOSI(aircraft); // FIXME: change this to 64-bit double float[] ctrl1 = xpc.getCTRL(aircraft); @@ -221,7 +220,6 @@ public class Main */ // System.out.format("\r[Elevator: %2f] [Roll: %2f] [Yaw: %2f] ---- [Throttle:%2f] ---- [Flaps: %2f] -- [Data Ref: %2f] -- [T/O: %b ][Cruise: %b ]", // ctrl1[0], ctrl1[1], ctrl1[2], ctrl1[3], ctrl1[5], valueAltitude[0], takeoff, cruise); - String log = String.format("[Elevator: %2f] [Roll: %2f] [Yaw: %2f] [Throttle:%2f] [Flaps: %2f] [Data Ref: %2f] [T/O: %b ][Cruise: %b ]", ctrl1[0], ctrl1[1], ctrl1[2], ctrl1[3], ctrl1[5], valueAltitude[0], takeoff, cruise); diff --git a/Java/ProjectModels/Visualizer/visualizer.java b/Java/ProjectModels/Visualizer/visualizer.java index f982dd7..2947877 100644 --- a/Java/ProjectModels/Visualizer/visualizer.java +++ b/Java/ProjectModels/Visualizer/visualizer.java @@ -3,29 +3,42 @@ package Visualizer; import javax.swing.border.Border; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import ModelFiles.*; public class visualizer { JFrame frame = new JFrame(); + JPanel frameBottom = new JPanel(); JPanel display = new JPanel(); JPanel visualizer = new JPanel(); JPanel yokeGrid = new JPanel(); axis axis = new axis(0,0); rudderPosition rudderGrid = new rudderPosition(yokeGrid.getWidth(), 0); yokePosition yoke = new yokePosition(yokeGrid.getWidth(), yokeGrid.getHeight()); + JLabel one = new JLabel(); + JLabel two = new JLabel(); + JLabel three = new JLabel(); + JLabel four = new JLabel(); + Model m; public visualizer(Model m){ - + this.m = m; } public void initializeDisplay() { + try { + UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); + } catch(Exception ignored){} + frame.setPreferredSize(new Dimension(1700,270)); - frame.setLayout(new GridLayout(1,2)); + frame.setLayout(new BorderLayout()); + frameBottom.setLayout(new GridLayout(1,2)); frame.setVisible(true); @@ -50,19 +63,19 @@ public class visualizer { titleFour.setFont(fontTitles); titleFour.setHorizontalAlignment(SwingConstants.CENTER); titleFour.setVerticalAlignment(SwingConstants.BOTTOM); - JLabel one = new JLabel(); + one = new JLabel(); one.setFont(fontData); one.setHorizontalAlignment(SwingConstants.CENTER); one.setVerticalAlignment(SwingConstants.TOP); - JLabel two = new JLabel(); + two = new JLabel(); two.setFont(fontData); two.setHorizontalAlignment(SwingConstants.CENTER); two.setVerticalAlignment(SwingConstants.TOP); - JLabel three = new JLabel(); + three = new JLabel(); three.setFont(fontData); three.setHorizontalAlignment(SwingConstants.CENTER); three.setVerticalAlignment(SwingConstants.TOP); - JLabel four = new JLabel(); + four = new JLabel(); four.setFont(fontData); four.setHorizontalAlignment(SwingConstants.CENTER); four.setVerticalAlignment(SwingConstants.TOP); @@ -112,13 +125,86 @@ public class visualizer { rudderGrid = new rudderPosition(yokeGrid.getWidth(), 0); visualizer.add(rudderGrid); - frame.add(display); // Left Side - frame.add(visualizer); // Right Side + JToolBar tool = new JToolBar("Toolbar"); + JButton b1 = new JButton("Data Log Toggle"); + ActionListener press = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(m.logPermission() == false){ + m.startLog(); + JOptionPane.showMessageDialog(frame,"Data Logging Enabled"); + tool.setBackground(Color.green); + } else { + m.stopLog(); + JOptionPane.showMessageDialog(frame,"Data Logging Disabled"); + tool.setBackground(Color.white); + } + + } + + }; + b1.addActionListener(press); + JButton b2 = new JButton("button 2"); + tool.setBackground(Color.red); + tool.setOrientation(1); + tool.add(b1); + tool.add(b2); + frame.add(tool,BorderLayout.WEST); + + + + JPanel buttonBar = new JPanel(); + buttonBar.setLayout(new GridLayout(2,1)); + JToolBar tool2 = new JToolBar("Toolbar"); + JButton b3 = new JButton("button 2"); + JButton b4 = new JButton("button 2"); + tool2.add(b3); + tool2.add(b4); + + JToolBar tool3 = new JToolBar("Toolbar"); + JButton b5 = new JButton("button 3"); + JButton b6 = new JButton("button 3"); + tool3.add(b5); + tool3.add(b6); + buttonBar.add(tool2); + buttonBar.add(tool3); + + + + frameBottom.add(display); // Left Side + frameBottom.add(visualizer); // Right Side + frame.add(frameBottom,BorderLayout.CENTER); + frame.add(buttonBar, BorderLayout.SOUTH); frame.pack(); } public void updateVisualizer(float[] ctrl1){ + one.setText(String.valueOf(ctrl1[0])); + if(ctrl1[0] >= 0 ) { + one.setForeground(Color.green); + } else { + one.setForeground(Color.red); + } + two.setText(String.valueOf(ctrl1[1])); + if(ctrl1[1] >= 0 ) { + two.setForeground(Color.green); + } else { + two.setForeground(Color.red); + } + three.setText(String.valueOf(ctrl1[2])); + if(ctrl1[2] >= 0 ) { + three.setForeground(Color.green); + } else { + three.setForeground(Color.red); + } + four.setText(String.valueOf(ctrl1[3])); + if(ctrl1[3] >= 0 ) { + four.setForeground(Color.green); + } else { + four.setForeground(Color.red); + } + yoke.setXBound(yokeGrid.getWidth()); yoke.setYBound(yokeGrid.getHeight()); yoke.setX(ctrl1[1]); diff --git a/Java/ProjectModels/testprocess1.java b/Java/ProjectModels/testprocess1.java index 204cc23..926083e 100644 --- a/Java/ProjectModels/testprocess1.java +++ b/Java/ProjectModels/testprocess1.java @@ -30,6 +30,7 @@ public class testprocess1 extends testprocess { // m.createAction(ActionType.MOTOR, MotorType.PITCHDOWN, 0, null); } // m.printModelQueue(); + m.logData(); vis1.updateVisualizer(m.getCurrentControls()); } } catch (SocketException ex) {