Data logging toggle switch

This commit is contained in:
cs-powell
2024-11-29 20:20:03 -05:00
parent a91fb09632
commit b460a8f8b9
6 changed files with 161 additions and 12 deletions

View File

@@ -0,0 +1,6 @@
{
"java.project.referencedLibraries": [
"lib/**/*.jar",
"/Users/flyingtopher/Desktop/Code Citadel/flatlaf-3.5.2.jar"
]
}

View File

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

View File

@@ -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);

View File

@@ -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);

View File

@@ -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]);

View File

@@ -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) {