4 Commits
Author SHA1 Message Date
seung6lee d0ded0d4e0 Edit UI message 2026-08-10 20:49:29 +09:00
seung6lee 94e7492f81 Wrote README.md 2026-08-10 20:47:57 +09:00
seung6lee 3b27499b56 remove emoji 2026-08-10 19:52:10 +09:00
seung6lee fb7e3cede7 initial commit 2026-08-10 19:44:09 +09:00
722 changed files with 61541 additions and 947 deletions
-7
View File
@@ -1,7 +0,0 @@
OPENAI_API_KEY=
OPENAI_MODEL=gpt-5-mini
OPENAI_REASONING_EFFORT=low
# en-US, ko-KR, ...
STT_LANGUAGE=en-US
BAUD_RATE=9600
-4
View File
@@ -1,4 +0,0 @@
.env
.venv/
__pycache__/
*.pyc
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
View File
Binary file not shown.
@@ -0,0 +1,2 @@
#Mon Aug 10 19:41:11 KST 2026
gradle.version=9.3.1
View File
+3
View File
@@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="25" />
</component>
</project>
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MarkdownSettings">
<option name="previewPanelProviderInfo">
<ProviderInfo name="Compose (experimental)" className="com.intellij.markdown.compose.preview.ComposePanelProvider" />
</option>
</component>
</project>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_25" project-jdk-name="jbr-25" project-jdk-type="JavaSDK" />
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>
Generated
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
+52
View File
@@ -0,0 +1,52 @@
# OM-robot-arm-controller
## Project structure
```
StageControl/
├── app/
│ ├── src/main/
│ │ ├── java/com/stage/control/
│ │ │ ├── MainActivity.java # Main UI + bluetooth + voice recognization
│ │ │ └── DeviceListActivity.java # bluetooth selection
│ │ ├── res/
│ │ │ ├── layout/
│ │ │ │ ├── activity_main.xml # Main UI
│ │ │ │ └── activity_device_list.xml
│ │ │ ├── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── themes.xml
│ │ │ └── drawable/
│ │ │ └── card_bg.xml
│ │ └── AndroidManifest.xml
│ └── build.gradle
├── build.gradle
├── settings.gradle
└── arduino/
└── StageControl.ino # Arduino connection
```
---
## Voice action
| 음성 | 전송 명령 |
|----------------|---|
| 동작 1 / 동작1 / 1번 | `1` |
| 동작 2 / 동작2 / 2번 | `2` |
| 정지 / stop / 스톱 | `S` |
| 홈 / home / 처음 | `H` |
---
## Arduino setup
### HC-05
| Arduino | HC-05 |
|-------------| ----- |
| 5V | VCC |
| GND | GND |
| Pin 10 (RX) | TX |
| Pin 11 (TX) | RX (전압분배 필요: 1kΩ + 2kΩ) |
+42
View File
@@ -0,0 +1,42 @@
apply plugin: 'com.android.application'
android {
namespace 'com.stage.control'
compileSdk 34
defaultConfig {
applicationId "com.stage.control"
minSdk 29
targetSdk 34
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
// Gemini AI SDK
implementation 'com.google.ai.client.generativeai:generativeai:0.9.0'
// HTTP Client & JSON Parsing for DeepSeek
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'com.google.code.gson:gson:2.10.1'
// Guava (used in existing code for callbacks/futures)
implementation 'com.google.guava:guava:33.0.0-android'
}
@@ -0,0 +1,8 @@
com.stage.control.app-pngs-0 /Users/seung6lee/Downloads/StageControl/app/build/generated/res/pngs/debug
com.stage.control.app-resValues-1 /Users/seung6lee/Downloads/StageControl/app/build/generated/res/resValues/debug
com.stage.control.app-updated_navigation_xml-2 /Users/seung6lee/Downloads/StageControl/app/build/generated/updated_navigation_xml/debug
com.stage.control.app-packageDebugResources-3 /Users/seung6lee/Downloads/StageControl/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir
com.stage.control.app-packageDebugResources-4 /Users/seung6lee/Downloads/StageControl/app/build/intermediates/incremental/debug/packageDebugResources/stripped.dir
com.stage.control.app-debug-5 /Users/seung6lee/Downloads/StageControl/app/build/intermediates/merged_res/debug/mergeDebugResources
com.stage.control.app-debug-6 /Users/seung6lee/Downloads/StageControl/app/src/debug/res
com.stage.control.app-main-7 /Users/seung6lee/Downloads/StageControl/app/src/main/res
@@ -0,0 +1,5 @@
com.stage.control.test.app-androidTest-0 /Users/jbmulb/Downloads/StageControl/app/build/generated/res/resValues/androidTest/debug
com.stage.control.test.app-updated_navigation_xml-1 /Users/jbmulb/Downloads/StageControl/app/build/generated/updated_navigation_xml/debugAndroidTest
com.stage.control.test.app-mergeDebugAndroidTestResources-2 /Users/jbmulb/Downloads/StageControl/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merged.dir
com.stage.control.test.app-mergeDebugAndroidTestResources-3 /Users/jbmulb/Downloads/StageControl/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/stripped.dir
com.stage.control.test.app-debugAndroidTest-4 /Users/jbmulb/Downloads/StageControl/app/build/intermediates/merged_res/debugAndroidTest/mergeDebugAndroidTestResources
Binary file not shown.
@@ -0,0 +1,21 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.stage.control",
"variantName": "debug",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "1.0",
"outputFile": "app-debug.apk"
}
],
"elementType": "File",
"minSdkVersionForDexing": 29
}
@@ -0,0 +1,2 @@
#- File Locator -
listingFile=../../../apk/debug/output-metadata.json
@@ -0,0 +1,2 @@
#- File Locator -
listingFile=../../../../outputs/apk/androidTest/debug/output-metadata.json
@@ -0,0 +1,2 @@
appMetadataVersion=1.1
androidGradlePluginVersion=8.1.4
@@ -0,0 +1,2 @@
appMetadataVersion=1.1
androidGradlePluginVersion=9.1.0
@@ -0,0 +1,10 @@
{
"version": 3,
"artifactType": {
"type": "COMPATIBLE_SCREEN_MANIFEST",
"kind": "Directory"
},
"applicationId": "com.stage.control",
"variantName": "debug",
"elements": []
}
@@ -0,0 +1,10 @@
{
"version": 3,
"artifactType": {
"type": "COMPATIBLE_SCREEN_MANIFEST",
"kind": "Directory"
},
"applicationId": "com.stage.control",
"variantName": "debug",
"elements": []
}
@@ -0,0 +1,9 @@
#Mon Aug 10 19:51:24 KST 2026
com.stage.control.app-main-30\:/drawable/card_bg.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable_card_bg.xml.flat
com.stage.control.app-main-30\:/drawable/ic_launcher_foreground.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable_ic_launcher_foreground.xml.flat
com.stage.control.app-main-30\:/layout/activity_device_list.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/merged_res/debug/mergeDebugResources/layout_activity_device_list.xml.flat
com.stage.control.app-main-30\:/layout/activity_main.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/merged_res/debug/mergeDebugResources/layout_activity_main.xml.flat
com.stage.control.app-main-30\:/mipmap-anydpi-v26/ic_launcher.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/merged_res/debug/mergeDebugResources/mipmap-anydpi-v26_ic_launcher.xml.flat
com.stage.control.app-main-30\:/mipmap-anydpi-v26/ic_launcher_round.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/merged_res/debug/mergeDebugResources/mipmap-anydpi-v26_ic_launcher_round.xml.flat
com.stage.control.app-main-30\:/mipmap/ic_launcher.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/merged_res/debug/mergeDebugResources/mipmap_ic_launcher.xml.flat
com.stage.control.app-main-30\:/mipmap/ic_launcher_round.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/merged_res/debug/mergeDebugResources/mipmap_ic_launcher_round.xml.flat
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
#Mon Aug 10 19:51:24 KST 2026
com.stage.control.app-main-5\:/drawable/card_bg.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/card_bg.xml
com.stage.control.app-main-5\:/drawable/ic_launcher_foreground.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_launcher_foreground.xml
com.stage.control.app-main-5\:/layout/activity_device_list.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_device_list.xml
com.stage.control.app-main-5\:/layout/activity_main.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_main.xml
com.stage.control.app-main-5\:/mipmap-anydpi-v26/ic_launcher.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-anydpi-v26/ic_launcher.xml
com.stage.control.app-main-5\:/mipmap-anydpi-v26/ic_launcher_round.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-anydpi-v26/ic_launcher_round.xml
com.stage.control.app-main-5\:/mipmap/ic_launcher.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap/ic_launcher.xml
com.stage.control.app-main-5\:/mipmap/ic_launcher_round.xml=/Users/seung6lee/Downloads/StageControl/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap/ic_launcher_round.xml
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/seung6lee/Downloads/StageControl/app/src/main/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main" generated-set="main$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:!&lt;dir>navigation"><source path="/Users/seung6lee/Downloads/StageControl/app/src/main/res"><file name="ic_launcher_foreground" path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/drawable/ic_launcher_foreground.xml" qualifiers="" type="drawable"/><file name="card_bg" path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/drawable/card_bg.xml" qualifiers="" type="drawable"/><file name="activity_device_list" path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/layout/activity_device_list.xml" qualifiers="" type="layout"/><file name="activity_main" path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/layout/activity_main.xml" qualifiers="" type="layout"/><file path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/values/colors.xml" qualifiers=""><color name="ic_launcher_background">#0D0D0D</color><color name="bg_dark">#0D0D0D</color><color name="bg_card">#1A1A2E</color><color name="text_primary">#FFFFFF</color><color name="text_label">#888888</color><color name="white">#FFFFFF</color><color name="status_connected">#00E676</color><color name="status_connecting">#FFD600</color><color name="status_disconnected">#FF5252</color><color name="btn_connect">#1565C0</color><color name="btn_disconnect">#B71C1C</color><color name="btn_voice">#6A1B9A</color><color name="accent_green">#00E676</color><color name="divider">#333333</color></file><file path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/values/themes.xml" qualifiers=""><style name="Theme.StageControl" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="colorPrimary">@color/btn_connect</item>
<item name="colorPrimaryVariant">@color/bg_card</item>
<item name="colorOnPrimary">@color/white</item>
<item name="android:windowBackground">@color/bg_dark</item>
<item name="android:statusBarColor">@color/bg_card</item>
<item name="android:navigationBarColor">@color/bg_dark</item>
</style></file><file path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/values/strings.xml" qualifiers=""><string name="app_name">Stage Control</string></file><file name="ic_launcher" path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/mipmap/ic_launcher.xml" qualifiers="" type="mipmap"/><file name="ic_launcher_round" path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/mipmap/ic_launcher_round.xml" qualifiers="" type="mipmap"/><file name="ic_launcher" path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" qualifiers="anydpi-v26" type="mipmap"/><file name="ic_launcher_round" path="/Users/seung6lee/Downloads/StageControl/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml" qualifiers="anydpi-v26" type="mipmap"/></source></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/seung6lee/Downloads/StageControl/app/src/debug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug" generated-set="debug$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:!&lt;dir>navigation"><source path="/Users/seung6lee/Downloads/StageControl/app/src/debug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/seung6lee/Downloads/StageControl/app/build/generated/res/resValues/debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated" generated-set="generated$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:!&lt;dir>navigation"><source path="/Users/seung6lee/Downloads/StageControl/app/build/generated/res/resValues/debug"/></dataSet><mergedItems/></merger>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="androidTest$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jbmulb/Downloads/StageControl/app/src/androidTest/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="androidTest" generated-set="androidTest$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:!&lt;dir>navigation"><source path="/Users/jbmulb/Downloads/StageControl/app/src/androidTest/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="androidTestDebug$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jbmulb/Downloads/StageControl/app/src/androidTestDebug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="androidTestDebug" generated-set="androidTestDebug$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:!&lt;dir>navigation"><source path="/Users/jbmulb/Downloads/StageControl/app/src/androidTestDebug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jbmulb/Downloads/StageControl/app/build/generated/res/resValues/androidTest/debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated" generated-set="generated$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:!&lt;dir>navigation"><source path="/Users/jbmulb/Downloads/StageControl/app/build/generated/res/resValues/androidTest/debug"/></dataSet><mergedItems/></merger>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="androidTest" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jbmulb/Downloads/StageControl/app/src/androidTest/assets"/></dataSet><dataSet config="androidTestDebug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jbmulb/Downloads/StageControl/app/src/androidTestDebug/assets"/></dataSet></merger>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="androidTest" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jbmulb/Downloads/StageControl/app/src/androidTest/jniLibs"/></dataSet><dataSet config="androidTestDebug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/jbmulb/Downloads/StageControl/app/src/androidTestDebug/jniLibs"/></dataSet></merger>

Some files were not shown because too many files have changed in this diff Show More