前往
大廳
同人

光劍:Proffie控制卡心得分享 Part3 - 淺談 設定(Config)、刷板(ProffieOS)

http | 2024-01-07 19:07:11 | 巴幣 2 | 人氣 152

※如果看的到我,建議可以開啟闇黑模式觀看

距離上一篇過了好像..有點久了
剛好最近有想幫手邊的光劍升級os7就順便繼續做個紀錄

※此系列文章不是教學,比較偏向個人的心得紀錄,
如果內容有誤歡迎指教

首先就是先去官網下載ProffieOS

目前最新的版本是7.1x,多了一些新模式和操作,
但有一些也似乎還測試中,所以有可能稍微的會沒那麼穩定,
如果想要比較穩定的版本,當然也可考慮上一個版本6.x。
不管是哪個版本都可以在這個網站找到。

下載回來會是一個壓縮檔案
解壓縮後會有一個ProffieOS資料夾。

一個ProffieOS資料夾就是一包安裝資料,
任何跟這個安裝包的相關調整,如:config、prop,甚至你想自行調整底層的Code,
都要放在這個ProffieOS資料夾下。

不能跨資料夾存取,比如ProffieOS1去抓ProffieOS2的config,
想要ProffieOS2的config,就要把ProffieOS2的config丟到ProffieOS1裡再去編譯。

如果有多組OS的話,
可以在ProffieOS外在多包一層你看懂得資料夾,
但是要燒進板子的OS最後就是要包在一個叫ProffieOS的資料夾裡!

ProffieOS資料夾裡面雖然看起來還有分多資料夾,
但實際上比較會碰到的其實也就上面提到的config、props而已,
其他就OS的底層,如果沒有想要調其實就不太需要動。

props裡面主要是放前輩們已經寫好的操作設定,
其實也不太需要調,不過通常設定檔裡面作者也會放操作說明,
所以多少可以參考一下
裡面最常用的應該就是fett263大的設定檔了,
想要啟用可以直接在光劍上調整參數的EditMode的話,
就必須使用這個設定檔。

一、設定(Config)

config放的是光劍的相關設定檔,
包含要開啟甚麼設定、設定preset、設定有多少劍刃,或是要用哪種按鈕操作模式...等,
基本上就是最需要關心的檔案。
config資料夾有提供一些範例檔案可以參考,
可以直接用它們來修改,但一般來說還是會建議複製一份出來,
改個比較容易辨別的名字,再來做後續的調整比較好。

用文字檔打開一個config.h檔案,裡面大概會像這樣
※顏色只是方便區分區塊,實際開起來是沒有的喔~

#ifdef CONFIG_TOP
#include "proffieboard_v1_config.h"
#define NUM_BLADES 1
#define NUM_BUTTONS 2
#define VOLUME 1000
const unsigned int maxLedsPerStrip = 144;
#define CLASH_THRESHOLD_G 1.0
#define ENABLE_AUDIO
#define ENABLE_MOTION
#define ENABLE_WS2811
#define ENABLE_SD
#endif

#ifdef CONFIG_PROP
#include "../props/detonator.h"
#endif

#ifdef CONFIG_PRESETS
Preset presets[] = {
   { "TeensySF", "tracks/venus.wav",
    StyleNormalPtr<CYAN, WHITE, 300, 800>(), "cyan"},
   { "SmthJedi", "tracks/mars.wav",
    StylePtr<InOutSparkTip<EASYBLADE(BLUE, WHITE), 300, 800> >(), "blue"},
   { "TthCrstl", "tracks/mars.wav",
    StylePtr<InOutHelper<EASYBLADE(OnSpark<GREEN>, WHITE), 300, 800> >(), "green"},
   { "TthCrstl", "tracks/uranus.wav",
    StyleStrobePtr<WHITE, Rainbow, 15, 300, 800>(), "strobe"},
   { "TeensySF", "tracks/venus.wav",
    &style_pov, "POV"},
   { "SmthJedi", "tracks/mars.wav",
    &style_charging, "Battery\nLevel"}
};
BladeConfig blades[] = {
{ 0, WS2811BladePtr<144, WS2811_ACTUALLY_800kHz | WS2811_GRB>(), CONFIGARRAY(presets) },
};
#endif

#ifdef CONFIG_BUTTONS
Button PowerButton(BUTTON_POWER, powerButtonPin, "pow");
Button AuxButton(BUTTON_AUX, auxPin, "aux");
#endif

大致可以分為幾個主要區塊:
CONFIG_TOP: 基本設定,可以設定要開啟甚麼功能、設定初始音量、劍刃Led的長度、使用幾個操作按鈕、使用多少劍刃...等
CONFIG_PROP: 指定操作設定檔
CONFIG_PRESETS: 就是設定光效跟對應音效的地方啦
CONFIG_BUTTONS:對應按鈕設定

每個區塊的詳細說明可以參考ProffieOS的wiki

========== CONFIG_TOP ==========
這個區塊幾個主要和建議的設定

#include "proffieboard_v2_config.h"  // Proffieboard V2
如果確認使用板子的版本,直接設定對應版本即可

#define NUM_BLADES 1
設定使用幾個劍刃(2刃、3刃...等),
如果內膽包含水晶倉或是反應燈(AccentLED)要讓它們亮的話,也算劍刃喔。
這個設定也會和後面的 presets、BladeConfig 設定息息相關

#define NUM_BUTTONS 2
設定使用幾個按鈕操作,常見的是2鍵(pow&&aux)、或是1鍵(pow)。
這個就依內膽的實際設計設定即可

#define VOLUME 1000
音量設定,如果覺得聲音太大太小可以調這個數值。
但是不建議調太大,有可能會損壞喇叭

const unsigned int maxLedsPerStrip = 144;
劍刃最大Led數,一般都是設定144,不太會去改

#define CLASH_THRESHOLD_G 3.5
設定敲擊參數,數字愈大越難觸發,一般會取中間值3.5

#define ENABLE_AUDIO
#define ENABLE_MOTION
#define ENABLE_WS2811
#define ENABLE_SD
這4項一般就是都啟用

#define DISABLE_DIAGNOSTIC_COMMANDS
#define DISABLE_BASIC_PARSER_STYLES
因為板子是有記憶體限制的,一般來說都會建議DISABLE這兩項,
可以減少記憶體消耗(最後補充也會提到)

#define NO_REPEAT_RANDOM
這個設定會去記憶前一次撥放的音效/tracks,下一個撥放會盡量避開相同的音效

#define SAVE_STATE
會將On-the-fly的調整(color,volume,preset)記憶,如果沒有開的話,
一但切換preset,preset的調整就會被復原。
有好有壞,可以視自己的情況設置。
※設定後會在記憶卡建立 presets.ini 作為調整紀錄

#define IDLE_OFF_TIME 60 * 3 * 1000
#define MOTION_TIMEOUT 60 * 3 * 1000
這是設定一些自動休眠(非啟動下的水晶倉/反應燈發亮、動態感知)的時間(ex:3分鐘),
可以減少電力消耗。
尤其proffieboard本身沒有deepsleep模式,如果沒有做這個設定,電力會掉更快。

如果使用fett263的操作設定檔,會有更多的操作選項:
※不是使用fett263的props則無效

輯模式 EditMode
#define ENABLE_ALL_EDIT_OPTIONS
#define FETT263_EDIT_MODE_MENU
開啟On-the-fly設定,可以直接在光劍上做相關設定 ※極建議開啟
這兩個設定是綁定的,必須同時啟用才可以正常運作。
如果是OS6(含)以上版本,還會在編譯的時候提示錯誤

另外要注意的一點,
啟用EDIT_MODE_MENU,或是下面的SAY_BATTERY_PERCENT、SAY_COLOR_LIST...等,
都會需要在記憶卡中放置對應的Voice packs檔案才會聽的到提示音喔

Voice packs檔案可以在這邊選擇喜歡的下載
下載完後,解壓縮後將檔案放到記憶卡的common資料夾下即可。
※preset名稱也需要把;common加上去,才可以在每個preset聽到common資料夾的音效喔!

#define FETT263_SAY_BATTERY_PERCENT
#define FETT263_SAY_COLOR_LIST
#define FETT263_SAY_COLOR_LIST_CC
#define FETT263_CIRCULAR_VOLUME_MENU
#define FETT263_CIRCULAR_DIM_MENU
這幾個是配套建議啟用的設定

FETT263 Props適用的新功能
#define FETT263_MOTION_WAKE_POWER_BUTTON
按pow鍵時重新啟用動態感知(如果已經進休眠的情況下)

#define FETT263_FORCE_PUSH_ALWAYS_ON
#define FETT263_FORCE_PUSH_LENGTH 5
啟用force push操作,如果音效檔中有放push的音效時會撥放

#define FETT263_TWIST_ON_NO_BM
#define FETT263_THRUST_ON_NO_BM
TWIST/THRUST快速啟動時,不啟用Battle Mode

#define FETT263_THRUST_ON
#define FETT263_TWIST_ON
#define FETT263_TWIST_OFF
啟用體感操作THRUST/TWIST

#define FETT263_BM_CLASH_DETECT 6
#define FETT263_LOCKUP_DELAY 200
這個是針對Battle Mode下的一些建議設置

關於FETT263 props各項參數詳細可以參考FETT263的網站說明,
包含操作(1鍵,2/3鍵)說明都有詳細說明,強烈建議要去看一下~

proffieOS7 版本
proffieOS6 版本
Edit Mode Fot OS6 & OS7

========== CONFIG_PROP ==========

#include "../props/saber_fett263_buttons.h"
就是看要選用哪種操作系統,比較建議fett263大的設定

========== CONFIG_PRESETS ==========

PRESETS的設定在第2篇中的 3. 關於proffie的Preset
已經有提過大概了,還沒看過的可以先去了解一下

PRESETS區塊的最後會有一段 BladeConfig 的設定,
設定你的光劍會發光的劍刃、水晶倉、LED...的對應設定,
看起來會像這樣

BladeConfig blades[] = {
  { 0,
WS281XBladePtr<109, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
CONFIGARRAY(presets)
  },
};

前面有提過:
TOP區塊NUM_BLADES 參數和
PRESETS區塊 每組PRESET中的Style BladeConfig 中定義的組數是互相呼應的,
如果對不起來的話,編譯的時候就會報錯誤。舉幾個例子:

1. 假如光劍只有主刃:
(1)
WS281XBladePtr<90, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()
BladeConfig就像這樣設定一組即可。

90代表組劍刃的預設長度,最大可設定到TOP區塊中定義的長度(例: maxLedsPerStrip=144)
如果不知道要設多少,如果有啟用EditMode,可以先隨便設一個數,
然後在到光劍上直接調整即可。

(2)
#define NUM_BLADES 1
對應TOP區塊中的 NUM_BLADES 1刃設定

(3)
{ "TeensySF", "tracks/venus.wav",
    StyleNormalPtr<CYAN, WHITE, 300, 800>(),
  "cyan"},
PRESETS的Style區塊也僅需要設定1組即可

2.假如光劍內膽有設計水晶倉/AccentLED想要讓它亮:
(1)
WS281XBladePtr<90, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
WS281XBladePtr<8, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin4, bladePowerPin5> >(),
這邊就需要設定兩組,並使用不同的bladePin。
bladePin是依實際電路接線狀況設定,不過一般來說主刃就是bladePin,
多劍刃如十字光劍,2邊側刃通常就是bladePin2、bladePin3。

反應燈AccentLED一般來說也算是劍刃,所以依劍刃的設定 WS281XBladePtr<> 即可。

水晶倉一般來說會是顏色比較單純的LED,
就設定 SimpleBladePtr<> 即可,看起來大概像這樣:
SimpleBladePtr<CreeXPE2WhiteTemplate<550>, NoLED, NoLED, NoLED, bladePowerPin1, -1, -1, -1>()

(2)
#define NUM_BLADES 2
這邊也是設定成2刃

(3)
{ "TeensySF", "tracks/venus.wav",
    StyleNormalPtr<CYAN, WHITE, 300, 800>(),
StyleNormalPtr<CYAN, WHITE, 300, 800>(),
  "cyan"},
PRESETS的Style區塊也需要設定2組

...
如果有更多的劍刃或是LED要設定也是以此類推。

另外,
一般來說水晶倉/反應燈的Style盡量不要給得太複雜,
因為也會消耗板子的記憶體。

========== CONFIG_BUTTONS ==========

1鍵設定
Button PowerButton(BUTTON_POWER, powerButtonPin, "pow");

2鍵設定 ("pow"/"aux"可以反過來設定,就是交換兩個按鍵的操作)
Button PowerButton(BUTTON_POWER, powerButtonPin, "pow");
Button AuxButton(BUTTON_AUX, auxPin, "aux");


fett263大一樣很好心的幫大家做了個config的設定工具
除了PRESETS還是需要自己去設定外(因為這邊就是客製化你自己的光劍的部分)
其他大部分的設定透可以看說明來勾選。
只不過是英文的介面就是了~

PRESETS的部分其實也可以到fett263大的Style Library去直接找你要的style來做設計

設計好後直接依照前面說的PRESETS區塊把Code貼上去即可。
目前Style Library有分OS6和OS7,OS6的Style 100%可以運作在OS7上,
但OS7的不一定能完美執行在OS6,
因為OS7的Style可以針對Style做更多個人化的設定,這些操做OS6沒有

依照想要的設定設定好config後,
再來就是要把OS+config燒進proffie板子啦~

二、刷板(ProffieOS)

確定已完成前2篇的設定(安裝好Arduino、相關所需驅動...等),
如果沒有,請先回去參考第1篇

1.開啟一包ProffieOS,選擇目錄下的ProffieOS.ino

2.之後會開啟Arduino的視窗,也會直接開啟這一包ProffieOS的主設定檔,
如果沒有要調OS的底層的話,這檔案有99.99%的部分都不需要管它。

3.需要做的,只是告訴這一包OS要去吃哪個config的設定檔,
也就是前面的這個區塊,預設有放了很多設定檔的定義,
不過都是註解的狀態

※// 代表單行註解
※/* ... */ 代表多行註解

可以看一下是否存在未被註解的 #define CONFIG_FILE
如果有,然後也不是要使用的設定,就把它註解掉吧~
複製一行新的 #define CONFIG_FILE,
把註解拿掉,後面貼上剛辛苦設定好的config,
燒板子前的準備工作大致上到這邊就告一段落了

燒之前還有1件事可以做,
介面上有一個打勾的按鈕(Verify),這個可以先幫你編譯一次整包設定檔有沒有問題,

如果設定檔有問題,下面的結果就會顯示錯誤 Error compiling for board..
及錯誤的訊息,比如:
這個就是在說,如果設定了
ENABLE_ALL_EDIT_OPTIONS 就一定要一併設定
FETT263_EDIT_MODE_MENU
※這邊為了測試錯誤。所以先註解掉其中一個~

如果Code都沒問題,就會顯示Done compiling.
也會告知目前這包設定使用的容量是多少(如果超過容量也會報錯)

4.再來就是將傳輸線接到板子的micro usb上
※請確認已完成前2篇的設定(安裝好Arduino、相關所需驅動...等)
這個是proffieBoard插記憶卡的地方

每家廠商內膽的設計都不同,有的比較人性化,有的就....
所以操作時請小心不要太粗魯弄斷接線等。

另外,
操作時建議是把電池拔下來,或是有設置實體開關的內膽,先把開關切到斷電
接上mirco usb傳輸線,
接上線後,板子會透過USB供電,如果這時記憶卡有插在板子上時,
也可以聽到當前(最後一次使用)SoundFont的起始音效 (不要被嚇到了~)

如果之前燒在板子上的OS有啟用記憶卡功能的話,
也會像是一般操作記憶卡時會跳出記憶卡的視窗,
如果不需要使用,記得可以先操作作業系統退出記憶卡

5.到這邊都沒有問題的話,離成功就只剩下一點點了

※下來的動作一旦執行成功,就會跟目前板子上的OS跟設定說再見了,
想反悔這是最後的機會,不過正所謂不冒險就不會有進步,
既然決定踏入proffie的世界,豈有回頭的道理!衝吧!!

這次選擇打勾旁邊的按鈕(Upload),就會開始進行燒入板子的動作了。
一開始還是會再進行一次編譯Compling。如果之前有先Verify,這邊基本上不會有甚麼意外

編譯完就會開始寫入的動作,也可以在畫面上看到目前的進度

100%!看到這個訊息就代表執行成功啦~
板子會自行重啟,這時也會再次聽到當前SoundFont的起始音效
(不要被嚇到了 第2次)

因為板子重啟的關係,有啟用記憶卡設定的話,
作業系統記憶卡的畫面會再次跳出來(可能要等一下),
在移除傳輸線前,記得養成好習慣,先作業系統移除記憶卡~
比較不會造成記憶卡裡的資料損壞喔!

6.最後,小心移除傳輸線,
開始享受一把新設定後的光劍吧!

補充

1. #define KEEP_SAVEFILES_WHEN_PROGRAMMING
每次刷版(upload)都會重置(刪除)SD卡裡的.ini設置(setting, preset...等)
如果想保留之前在saber上的設定,可以開啟個選項。
但如果有開啟這個選項,在config裡設定新增/刪除preset就要很注意,
如果SD裡的ini對應不到,在切換音效時就會報錯

2. Saving Memory
如果Upload時看到錯誤訊息:  `.text' will not fit in region `FLASH'
就是說明記憶體爆了,ProffieOS的文件
提供了幾個可能的解決方案:

(1) 更新新版Arduino Proffieboard plug-in
新版提供更多可選選項,來解決一些問題

(2) Arduino 的 Tools 設定 Use "smallest size"
這會讓complied後的記憶體變小,但complie的時間也會久一些,
但為了記憶體,完全可以忽略那一點點的時間~

(3) 不要使用 POV style
說明是POV類型style會占用大量記憶體 ( "&pov_style" 可以看看style是否有使用類似語法),
不建議使用。不過這個style基本沒甚麼人在使用,所以幾乎可以不用理會

(4) 停用 diagnostic commands
這個很容易,只要CONFIG_TOP設定 #define DISABLE_DIAGNOSTIC_COMMANDS 即可

(5) 減少presets數量,或是使用簡單的styles
(6) 使用相同或是相近的 style
這兩項放一起講,
雖說Proffieboard可以幾乎做到任何事,但是記憶體還是有限。

使用相同的style在config中並不會消耗更多的記憶體。
所以可以透過使用幾乎相同的style,僅去更換顏色/或一些小設定,
來達到減少記憶體消耗的效果。

舉例,
如果全部使用如 GreyscaleFonts 提供的各種獨特又酷炫的style,
可能一把光劍放個5、6個音效就會是極限了;

如果選擇使用 fett263 library 中相對比較簡單的style,
並只針對搭配的音效進行小部分調整,
光劍中塞個10幾20甚至更多套presets都是完全沒問題的。

是想要可以適應各場合的萬花筒光劍,或是獨特酷炫的專用光劍,
完全取決於每位玩家自己。
(當然可以透過刷不同的config來達到切換)

(7) 停用 basic parser styles
這個一樣很容易,只要CONFIG_TOP設定 #define DISABLE_BASIC_PARSER_STYLES 即可

(8) 善用 ProffieOS Workbench、Edit Mode,或是調整 presets.ini 來達到共用style的目的
其實這就是 (5)(6) 兩項的延伸,除了直接對cofing進行調整後重新刷板

也可以透過 ProffieOS作者提供的 Workbench 頁面
或是Fett263 props提供的Edit Mode,
甚至於是直接編輯記憶卡上的presets.ini
presets.ini 需啟用 #define SAVE_PRESET 初次刷板完,且執行過後才會創建

透過複製、編輯的方式,
使用已經燒在板子上的font、styletrack 組成一個新的 preset ,
來達到共用style減少記憶體消耗的效果,也不用重新刷板子

========== 後記 ==========

目前想到的大概就這些,
沒想到距離前一篇居然隔了1年多...
但...總算也是有個完結了

有興趣的歡迎留言指教或交流心得

may the force be with you

創作回應

更多創作