※如果看的到我,建議可以開啟闇黑模式觀看
距離上一篇過了好像..有點久了
剛好最近有想幫手邊的光劍升級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、style、track 組成一個新的 preset ,
來達到共用style減少記憶體消耗的效果,也不用重新刷板子
========== 後記 ==========
目前想到的大概就這些,
沒想到距離前一篇居然隔了1年多...
但...總算也是有個完結了
有興趣的歡迎留言指教或交流心得
may the force be with you