Skip to content
This repository was archived by the owner on Jun 9, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
8eb501d
Implement modern theme.
mbahler Mar 12, 2026
72b2588
Add flatlaf-3.7.1.jar
mbahler Mar 13, 2026
0c44012
Changed settings window to JDialog.
mbahler Mar 16, 2026
187a885
Changes
mbahler Mar 16, 2026
f8a445b
Added serial port refresh button and refresh button icon. Fixes#139. …
mbahler Mar 16, 2026
70ce7ef
Updated refresh button icon. added Edit Baud rate icon.
mbahler Mar 17, 2026
5557c8e
Settings changes remain on CANCEL press. FixesUI: Setting changes rem…
mbahler Mar 17, 2026
532eaaa
Implemented for advanced options. Added settings window listener to r…
mbahler Mar 17, 2026
620849d
Implemented for timestamp checkbox.
mbahler Mar 17, 2026
7c60474
Format.
mbahler Mar 17, 2026
4c78d24
Added baud rate edit button.
mbahler Mar 17, 2026
0356303
Added BaudRate edit dialog.
mbahler Mar 20, 2026
252446c
Added BaudEditTextarea line reader.
mbahler Mar 21, 2026
c8a12b7
Write custom baudRates to baud rate combo box.
mbahler Mar 22, 2026
af7a6b0
Changed main window frame and canvas to more descriptive names.
mbahler Mar 24, 2026
59d38ec
Disable not active window.
mbahler Mar 24, 2026
6f882a9
Fix custom baud edit crash.
mbahler Mar 26, 2026
b2afbc9
custom baud rates save-cancel with CANCEL/OK button operations
mbahler Mar 26, 2026
a8844f8
Started customBaudRate preference entry
mbahler Mar 26, 2026
d45bf8c
Merge branch 'bonner72:main' into main
mbahler Mar 26, 2026
cae5396
Merge branch 'bonner72:main' into SettingsWin_Mod
mbahler Mar 26, 2026
3ce8ed9
Import necessary libraries only.
mbahler Mar 27, 2026
7d6067c
Merge branch 'SettingsWin_Mod' of https://github.com/mbahler/SerialTe…
mbahler Mar 27, 2026
6394359
Finished adding custom baudRates to preference.csv
mbahler Mar 27, 2026
088d1e3
Reduce number of default baudRate options.
mbahler Mar 27, 2026
3bae152
Merge branch 'main' into SettingsWin_Mod
mbahler Mar 27, 2026
21cbc9b
Merge pull request #3 from mbahler/SettingsWin_Mod
mbahler Mar 27, 2026
8a70698
Changed default selected baudRate.
mbahler Mar 27, 2026
10c7344
Changes
mbahler Mar 28, 2026
51e841a
Improved serial Send/Recv. Updated Arduino-Test-Code.ino
mbahler Mar 28, 2026
3e35770
Removed textArea lineWrap.
mbahler Mar 28, 2026
5aecf62
Changed default baudRate.
mbahler Mar 28, 2026
e8eed25
Linux testing bugfixes. Part1
mbahler Apr 1, 2026
1bdb9f2
Linux testing bugfixes. Part2
mbahler Apr 1, 2026
af05b7c
Linux testing part2.
mbahler Apr 1, 2026
2d78009
Merge remote-tracking branch 'origin/main'
mbahler Apr 1, 2026
237282d
Linux testing Part3.
mbahler Apr 1, 2026
d33df74
Minor changes.
mbahler Apr 1, 2026
5c99344
Added print statement type("error","debug") to systemPrintln function…
mbahler Apr 2, 2026
8943046
Added theme support. Light,Dark,IntelliJ,Darcula.
mbahler Apr 2, 2026
0836f83
Added theme commands.
mbahler Apr 2, 2026
2d4d2df
OK/CANCEL crash fix.
mbahler Apr 2, 2026
46ca628
UI controls changes.
mbahler Apr 2, 2026
6b8a334
Theme fixes for linux.
mbahler Apr 2, 2026
2bd89fa
Add code to deal with OS specific titlebar height.
mbahler Apr 2, 2026
efbcfaa
Add code to deal with OS specific component placing.
mbahler Apr 2, 2026
b179d85
Linux Compiled.
mbahler Apr 2, 2026
5454a29
rm
mbahler Apr 2, 2026
b1e4f05
Add theme command to help info.
mbahler May 13, 2026
de27b34
Update README.md to include V3 changes.
mbahler May 13, 2026
4738bac
test processing ci
mbahler May 13, 2026
d69af4c
Merge branch 'main' of https://github.com/mbahler/SerialTerminalDEV
mbahler May 13, 2026
334bb7c
Update processing-ci.yml
mbahler May 13, 2026
fbae6ce
Update processing-ci.yml
mbahler May 13, 2026
25eb55c
Update processing-ci.yml
mbahler May 13, 2026
60c38a9
Update processing-ci.yml
mbahler May 13, 2026
7613176
Update processing-ci.yml
mbahler May 13, 2026
6e5fafa
Update processing-ci.yml
mbahler May 13, 2026
fc92be8
Update processing-ci.yml
mbahler May 13, 2026
e478e9d
Update processing-ci.yml
mbahler May 13, 2026
dbbf4a6
Update processing-ci.yml
mbahler May 13, 2026
c3e1905
Update processing-ci.yml
mbahler May 13, 2026
cb0231a
Update processing-ci.yml
mbahler May 13, 2026
5e4e3f8
Update processing-ci.yml
mbahler May 13, 2026
37d70d7
Update processing-ci.yml
mbahler May 13, 2026
c6f08a6
Update processing-ci.yml
mbahler May 13, 2026
65cd63f
Update processing-ci.yml
mbahler May 13, 2026
2407ce6
Update processing-ci.yml
mbahler May 13, 2026
3d9a8e3
Update processing-ci.yml
mbahler May 13, 2026
d263fdc
Update processing-ci.yml
mbahler May 13, 2026
27b752f
Delete .github/workflows/processing-ci.yml
mbahler May 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
{
"cSpell.words": ["Cascadia", "Lucida"]
"cSpell.words": [
"Autoscrolls",
"Cascadia",
"darcula",
"Darcula",
"darkula",
"flatlaf",
"formdev",
"Intelli",
"Lucida",
"mbahler"
],
"include": "**/*.{ts,js,php,css,scss,html,pde}"
}
15 changes: 6 additions & 9 deletions Arduino-Test-Code/Arduino-Test-Code.ino
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
int l = 0;

void setup() {
Serial.begin(9600); //initialize serial
Serial.begin(9600); //initialize serial at 9600 baud rate
}

void loop() {
l++; //count program scans
if (Serial.available()) { // if serial port is connected and has data
if (Serial.availableForWrite()){ // if serial port can be written to
Serial.write(Serial.read()); // echo received data
}
}

Serial.print("hello world ");
//Serial.print(" @ ");
// Serial.print(l); //print program scan count
//Serial.print(" scans");
//Serial.write(10);


}
20 changes: 15 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,23 @@ Windows10, Kubuntu25.04, Ubuntu24.04.2, LinuxMint 22.1 Cinnamon

_Main window_

<img width="702" height="532" alt="13 01 2026_14 00 13_REC" src="https://github.com/user-attachments/assets/c76b0634-9b45-4459-bda1-be528cb2f5c6" /> <br/>
<img width="707" height="507" alt="13 05 2026_08 16 31_REC" src="https://github.com/user-attachments/assets/476bacb2-e2f3-472e-a1c4-5f9b72f75ef7" />

_Settings window_

<img width="702" height="532" alt="13 01 2026_14 00 53_REC" src="https://github.com/user-attachments/assets/01cbde59-2021-499a-99f2-980b915008c5" /> <br/>
<img width="706" height="507" alt="13 05 2026_08 23 13_REC" src="https://github.com/user-attachments/assets/12e8e6ce-99cc-4b93-a5fd-c486709955ca" />

_Settings window advanced options enabled)_
_Settings window (advanced options enabled)_

<img width="702" height="532" alt="13 01 2026_14 01 22_REC" src="https://github.com/user-attachments/assets/28c1a743-2391-4082-8a8a-fcce5fad2114" /> <br/>
<img width="705" height="506" alt="13 05 2026_08 16 50_REC" src="https://github.com/user-attachments/assets/533e831f-481e-4bca-a1b6-f8d8f095b9ae" />

_Custom Baud Rate editing_

<img width="706" height="507" alt="13 05 2026_08 17 20_REC" src="https://github.com/user-attachments/assets/9be25bd6-68f7-41ce-b844-cb1eab694b0b" />

_Text finder_

<img width="702" height="532" alt="13 01 2026_14 01 52_REC" src="https://github.com/user-attachments/assets/985790a1-68a8-46c5-8ae1-2302a463170b" /> <br/>
<img width="705" height="506" alt="13 05 2026_08 17 51_REC" src="https://github.com/user-attachments/assets/ac4251ce-ea6a-47d7-b5d2-ae2584a33358" />

## Commands

Expand Down Expand Up @@ -66,3 +70,9 @@ _Text finder_
* -fontsize=16 *(set font size to 16)* <br/>
* -fontsize=18 *(set font size to 18)*

-theme *(set software theme)*
* -theme=light *(set software theme color to light)* <br/>
* -theme=dark *(set software theme color to dark)* <br/>
* -theme=intellij *(set software theme color to intellij)* <br/>
* -theme=darkula *(set software theme color to darkula)* <br/>

9 changes: 8 additions & 1 deletion mainCode/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
{
"cSpell.words": ["lstop", "tstamp"]
"cSpell.words": [
"Autoscrolls",
"baudedit",
"flatlaf",
"formdev",
"lstop",
"tstamp"
]
}
117 changes: 117 additions & 0 deletions mainCode/baudEditPopup.pde
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
public void initDialogBaudEdit() {
dialogBaudEdit = new JDialog(dialogSettingsMain, "Baud Rate list");
dialogBaudEdit.setSize(new Dimension(300, 300));
dialogBaudEdit.setResizable(false);
dialogBaudEdit.setAlwaysOnTop(true);
dialogBaudEdit.setLocationRelativeTo(dialogSettingsMain);
dialogBaudEdit.setLayout(layoutBaudEdit);
dialogBaudEdit.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dialogBaudEdit.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
buttonBaudEditCancel.doClick(); //simulate cancel button click
}
}
);

// initialize and add text area to dialogBaudEdit
textAreaBaudEdit = new JTextArea(java.util.Arrays.toString(baudRateList).replace(",", "\n").replace("[", "").replace("]", "").replace(" ", "").trim());
scrollPaneBaudEdit = new JScrollPane(textAreaBaudEdit);
scrollPaneBaudEdit.setPreferredSize(new Dimension(274, 226));
textAreaBaudEdit.setLineWrap(true);
textAreaBaudEdit.setAutoscrolls(true);

layoutBaudEdit.putConstraint(SpringLayout.WEST, scrollPaneBaudEdit, 5, SpringLayout.WEST, dialogBaudEdit);
layoutBaudEdit.putConstraint(SpringLayout.NORTH, scrollPaneBaudEdit, 5, SpringLayout.NORTH, dialogBaudEdit);
dialogBaudEdit.add(scrollPaneBaudEdit);


// initialize and add OK button to dialogBaudEdit
buttonBaudEditOk = new JButton("OK");
buttonBaudEditOk.setPreferredSize(new Dimension(60, 20));
buttonBaudEditOk.setFocusPainted(false);
layoutBaudEdit.putConstraint(SpringLayout.EAST, buttonBaudEditOk, 0, SpringLayout.EAST, scrollPaneBaudEdit);
layoutBaudEdit.putConstraint(SpringLayout.NORTH, buttonBaudEditOk, 5, SpringLayout.SOUTH, scrollPaneBaudEdit);
dialogBaudEdit.add(buttonBaudEditOk);
buttonBaudEditOk.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
/*Process TextArea Get text from textArea and append it to string array*/
int textAreaBaudEditLineCount = textAreaBaudEdit.getLineCount();
String[] textAreaBaudEditArray = {};
try {// Traverse the text in the JTextArea line by line
for (int i = 0; i < textAreaBaudEditLineCount; i ++) {
int start = textAreaBaudEdit.getLineStartOffset(i);
int end = textAreaBaudEdit.getLineEndOffset(i);
//processLine(textArea.getText(start, end-start));
// Step 1: Create a new array with length = original length + 1
textAreaBaudEditArray = Arrays.copyOf(textAreaBaudEditArray, textAreaBaudEditArray.length + 1);

// Step 2: Add the new element to the last index of the new array
textAreaBaudEditArray[textAreaBaudEditArray.length - 1] = textAreaBaudEdit.getText(start, end-start).trim();
systemPrintln(textAreaBaudEdit.getText(start, end-start).trim(), "debug");
}
}
catch(BadLocationException e) {
// Handle exception as you see fit
}
//end Process TextArea
baudRateList = textAreaBaudEditArray;
newBaudRateModel = new DefaultComboBoxModel(baudRateList); // populate newBaudRateModel with textAreaBaudEdit's text
comboBoxBaudRate.setModel(newBaudRateModel); // set comboBoxBaudRate's model to currBaudRateModel
dialogSettingsMain.setEnabled(true); // enable settings window
dialogBaudEdit.setVisible(false); // hide baud edit window
systemPrintln("buttonBaudEditOk clicked @ " + millis(), "debug"); // print debug statement
}
}
);

// initialize and add CANCEL button to dialogBaudEdit
buttonBaudEditCancel = new JButton("CANCEL");
buttonBaudEditCancel.setPreferredSize(new Dimension(60, 20));
buttonBaudEditCancel.setMargin(new Insets(0, 0, 0, 0));
buttonBaudEditCancel.setFocusPainted(false);
layoutBaudEdit.putConstraint(SpringLayout.EAST, buttonBaudEditCancel, -5, SpringLayout.WEST, buttonBaudEditOk);
layoutBaudEdit.putConstraint(SpringLayout.NORTH, buttonBaudEditCancel, 5, SpringLayout.SOUTH, scrollPaneBaudEdit);
dialogBaudEdit.add(buttonBaudEditCancel);
buttonBaudEditCancel.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent actionEvent) {
/*Process TextArea Get text from textArea and append it to string array*/
int textAreaBaudEditLineCount = textAreaBaudEdit.getLineCount();
String[] textAreaBaudEditArray = {};
try {// Traverse the text in the JTextArea line by line
for (int i = 0; i < textAreaBaudEditLineCount; i ++) {
int start = textAreaBaudEdit.getLineStartOffset(i);
int end = textAreaBaudEdit.getLineEndOffset(i);
//processLine(textArea.getText(start, end-start));
// Step 1: Create a new array with length = original length + 1
textAreaBaudEditArray = Arrays.copyOf(textAreaBaudEditArray, textAreaBaudEditArray.length + 1);

// Step 2: Add the new element to the last index of the new array
textAreaBaudEditArray[textAreaBaudEditArray.length - 1] = textAreaBaudEdit.getText(start, end-start).trim();
systemPrintln(textAreaBaudEdit.getText(start, end-start).trim(), "debug");
}
}
catch(BadLocationException e) {
// Handle exception as you see fit
}
//end Process TextArea
if (!textAreaBaudEditArray.equals(baudRateList)) {
textAreaBaudEdit.setText(java.util.Arrays.toString(baudRateList).replace(",", "\n").replace("[", "\n").replace("]", "\n").replace(" ", "").trim());
}
dialogSettingsMain.setEnabled(true); //enable settings window
dialogBaudEdit.setVisible(false); //hide baud edit window
}
}
);

//dialogBaudEdit.pack();

if (dialogBaudEdit != null && textAreaBaudEdit != null && buttonBaudEditOk != null && buttonBaudEditCancel != null) {
dialogBaudEditIsInit = true;
dialogBaudEdit.setVisible(true); // show baud rate edit window
dialogSettingsMain.setEnabled(false); // disable setting window
} else {
dialogBaudEditIsInit = false;
}
}

Binary file added mainCode/code/flatlaf-3.7.1.jar
Binary file not shown.
Binary file added mainCode/data/Serial_Terminal_Manual.odt
Binary file not shown.
Binary file added mainCode/data/editBaud.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions mainCode/data/preferences.csv
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
mode,theme,font,fontSize
0,1,jetbrains-mono.regular.ttf,14.0
mode,theme,font,fontSize,baudRateList
0,light,jetbrains-mono.regular.ttf,14.0,"[4800, 9600, 38400, 57600, 115200]"
Binary file added mainCode/data/refresh.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
50 changes: 50 additions & 0 deletions mainCode/libs.pde
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import processing.serial.Serial; // import processing Serial
import com.formdev.flatlaf.FlatLightLaf; // import flatlaf light theme
import com.formdev.flatlaf.FlatDarkLaf; // import flatlaf dark theme
import com.formdev.flatlaf.FlatIntelliJLaf; // import flatlaf IntelliL theme
import com.formdev.flatlaf.FlatDarculaLaf; // import flatlaf Darcula theme
import java.awt.Font; // import java Font
import java.awt.FontFormatException; // import java FontFormatException
import java.awt.event.WindowAdapter; // import java WindowAdapter
import java.awt.event.WindowEvent; // import java WindowEvent
import java.awt.event.ActionListener; // import java ActionListener
import java.awt.event.ActionEvent; // import java ActionEvent
import java.awt.event.KeyAdapter; // import java KeyAdapter
import java.awt.event.KeyEvent; // import java KeyEvent
import java.awt.event.ComponentEvent; // import java ComponentEvent
import java.awt.event.FocusListener; // import java FocusListener
import java.awt.event.FocusEvent; // import java FocusEvent
import java.awt.KeyboardFocusManager; // import java KeyBoardFocusManger
import java.awt.Dimension; // import java dimension library
import java.awt.image.BufferedImage; // import java buffered image library
import java.awt.FlowLayout; // import java FlowLayout
import java.awt.Color; // import java Color
import java.awt.Insets; // import java insets

import javax.swing.JFrame; // import javax JFrame
import javax.swing.JPanel; // import javax JPanel
import javax.swing.JButton; // import javax JButton
import javax.swing.JDialog; // import javax JDialog
import javax.swing.JTextArea; // import javax JTextArea
import javax.swing.JTextField; // import javax JTextField
import javax.swing.JScrollPane; // import javax JScrollPane
import javax.swing.JComboBox; // import javax JComboBox
import javax.swing.JCheckBox; // import javax JCheckBox
import javax.swing.JLabel; // import javax JLabel
import javax.swing.SpringLayout; // import javax SpringLayout
import javax.swing.DefaultComboBoxModel; // import javax DefaultComboBox
import javax.swing.UIManager; // import javax UIManager
import javax.swing.UnsupportedLookAndFeelException; // import javax UnsupportedLookAndFeelManager
import javax.swing.event.DocumentListener; // import javax DocumentListener
import javax.swing.event.DocumentEvent; // import javax DocumentEvent
import javax.swing.text.Highlighter; // import javax Highlighter
import javax.swing.text.DefaultHighlighter; // import javax DefaultHighlighter
import javax.swing.text.BadLocationException; // import javax BadLocationException
import javax.swing.ImageIcon; // import javax ImageIcon
import javax.swing.JFileChooser; // import javax JFileChooser

import java.io.File; //import file library
import java.io.FileWriter; //import file writer library
import java.util.Collections; //import collections library
import java.util.Scanner; //import scanner library
import java.util.Arrays; //import arrays library
11 changes: 5 additions & 6 deletions mainCode/logData.pde
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,16 @@ public void initLogFile() {
if (logFile.createNewFile()) {
logFileExists = false;
textAreaMainMsg("\n", "File created: " + textFieldFileDirInput + logFile.getName(), "");
systemPrintln("File created: " + textFieldFileDirInput + logFile.getName());
systemPrintln("File created: " + textFieldFileDirInput + logFile.getName(), "debug");
} else if (logFile.exists()) {
logFileExists = true;
textAreaMainMsg("\n", "File already exists: " + textFieldFileDirInput + logFile.getName(), "");
systemPrintln("File already exists: " + textFieldFileDirInput + logFile.getName());
systemPrintln("File already exists: " + textFieldFileDirInput + logFile.getName(), "debug");
}
}
catch (IOException e) {
textAreaMainMsg("\n", "Failed to create log file. " + e, "");
systemPrintln("Failed to create log file. " + e);
catch (IOException error) {
textAreaMainMsg("\n", "Failed to create log file. " + error, "");
systemPrintln("Failed to create log file. " + error, "error");
initLogFileOk = false;
}

Expand Down Expand Up @@ -50,4 +50,3 @@ public void writeToFile(String data) {
}
}
}

Loading
Loading