YS電子工作ラボ
  第82回PICクラブ 情報交換会 (開催日 2021.11.22)
<紹介作品

MSP2807 by Legato
    
 タッチ式オーディオプレーヤ
以下、 第82回情報交換会報告(後閑さん、FaceBook Picfun.club.より)
   ■ 講評 …… 後閑さん
   
(2) タッチパネル操作のオーディオ再生 :斎藤さん
 PIC32MZの開発ツールにQVGAのタッチパネル付きLCD表示器を追加してタッチ操作で音楽再生をするアプリの開発の報告です。
Harmony V3を基本としてグラフィックにはLegatoを使って開発されています。詳細は斎藤さんのウェブサイトで見ることができます。

以下、紹介に際し使用した資料
 
  MSP2807 by Legato
  タッチ式オーディオプレーヤ
  2021.11.21 PIC情報交換会資料 
  YS電子工作デザイン http://www.ys-labo.com/  斎藤
  YS電子工作ショップ http://ys-labo.shop-pro.jp/
1.  概要
  1.1 要約
 ・PIC32MZによるグラフィック液晶MSP2807をもちいたタッチパネル式オーディオプレーヤ
 ・VS1053Bの内臓デコーダにより、MP3、WMA、AAC、Ogg、WAVなどのファイルが再生可能
 ・SDカードに収納されているサブフォルダを含む全ファイルを再生
 ・Tera Termに、SDカード内の全ファイル、及び演奏中のファイルを表示
 ・グラフィック液晶への表示 及び操作
  ① SDカード内の全ファイル名をリスト表示。  尚、ファイルはフルパスで表示
  ② リストのファイル名をタッチすることによって選曲、再生開始
  ③ スライダーウィジェットのノブのドラッグによる音量調整
  ④ ボタンタッチによる再生(再開) 及び再生一時停止操作
 
         
  1.2. システム構成

2.  外観

3.  回路図(→PDFファイル
4.
  開発環境
 ・ Harmony ver.3 MHC 3.8.0  グラフィックライブラリ: Legato   コンパイラ:XC32 ver.3.01 
 ・ PIC: PIC32MZ2048EFH100
5.   動作結果
  1. 動画   →  YouTube (1080pのHD動画)       
2.. 画面抜粋
 2.1 演奏ファイル選択のリスト画面
起動時の画面 タッチで別の曲を選択して演奏している画面  スクロールして最後のアイテム(ファイル)が表示されている画面

 2.2 音量変更画面
スライドバーのノブ付近をドラッグして音量を変更する 


 2.3 再生(再開)/一時停止操作
    ボタンウィジェットをタッチする毎に、再生(再開)モードと一時停止モードが変更となる。
ボタンにタッチしていない状態 ボタンにタッチしている状態


3. Tera Termログ

6.  プログラムの作成プロセス 及び内容
 
1. Project Viewに所要のコンポーネントを配置、及び結線をおこない、各コンポーネントの諸元を設定する。

2. MSP2807、VS1053B、キャラクタ液晶SC1602などのライブラリ関数をプロジェクトに追加する。
MSP2807_lib_XC32.h
MSP2807_AsciiFont.h
MSP2807_Pictures.h
MSP2807_lib_XC32.c
VS1053_MZ10.h
VS1053_MZ10.c
1lcd_lib_XC32.h
1lcd_lib_XC32.c
3. Legato Graphic Composer で スクリーンに Listウィジェット、Sliderウィジェット、Buttonウィジェットを配置した後、 Schemeマネージャから色調、Assetマネージャからフォント、文字列などのオブジェクトを作成しながら各ウィジェットのプロパティを設定する。 


4. プロジェクトファイルのソースコードを生成する。

                                                 
5. 全体の流れ
 ・ main.cファイル
int main ( void )
{
  SYS_Initialize ( NULL );
  while ( true )
  {
    SYS_Tasks ( );
  }
  return ( EXIT_FAILURE );
}

 ・ tasks.cファイル
void SYS_Tasks (void)
{
  SYS_FS_Tasks( ); //ファイルシステム
  RV_SDSPI_Tasks(sysObj.drvSDSPI0); //デバイスドライバー
  DRV_ExternalController_Update(); //グラフィックハードウェアドライバーなど
  ys_DRV_TOUCH_MSP2807(); //タッチ検出、タッチ種類、タッチ位置をシステムに注入
  Legato_Tasks(); //グラフィックライブラリLegato //液晶画面アップデート
          //ウィジェットのイベント検出(演奏曲変更、音量ノブ位置、再生再開/一時停止)
  SYS_INP_Tasks(); //タッチシステム
 APP_Tasks(); //アプリケーション
}

 ・ app.cファイル
void APP_Tasks (void)
{
  switch ( appData.state )
  {
    case APP_STATE_INIT: //初期化
       …… break;
    case APP_STATE_WAIT_FOR_DEVICE_ATTACH : //SDカード挿入確認
       …… break;
    case APP_STATE_DISK_SCANNING : //SDカードスキャン、ファイルテーブル作成
       …… break;
    case APP_STATE_OPEN_FILE : //再生ファイルオープン
       …… break;
    case APP_STATE_SEND_DATA : //再生実行、VS1053へ音声データ送信、
       …… break; //再生ファイル変更検出 
    case APP_STATE_NEXT_FILE : //次の再生ファイル分岐判断 
       …… break;
    case APP_STATE_IDLE ; //アイドル状態、再生一時停止の場合など 
       …… break;
  }
}


main.c











tasks.c













app.c
6.  スクリーンを制御する主な関数があるファイル le_gen_screen_Screen0.c
leResult screenInit_Screen0(void); // スクリーン初期化
leResult screenShow_Screen0(void); // スクリーン表示
void screenUpdate_Screen0(void); // スクリーンアップデート、ファイルリスト追加

void event_Screen0_PlayPauseBtn_OnPressed(leButtonWidget* btn);
              //再生開始/一時停止ボタンが押された時のイベント関数
void event_Screen0_ListWidget0_OnSelectionChanged(leListWidget* wgt, uint32_t idx, leBool selected);
             //リストのアイテムが変更になった時のイベント関数
void event_Screen0_SliderWidget0_OnValueChanged(leSliderWidget* scr);
             //スライダーの値が変更になった時のイベント関数

 



le_gen_screen_Screen0.c
7. その他
  ・ 動的文字列(dynamic text) ……参考技術情報(WiKi) →URL
  ・ 所要関数の探索(例)…… Listウィジェット、  legato_widget_list.c、 フルパス: "C:\HarmonyPrj\_Wk_v3X\Hp_v3X\20 gfx380\41h 2807player fixed\firmware\src\config\default\gfx\legato\widget\list\legato_widget_list.c" 
   
   
   
     
7. 参考
1. YS電子工作ラボHP での紹介/プロジェクトファイル
 
     
PIC32MZ Harmony v3版   → URL