!便利関数
!!fillAll(c1,c2)
全部塗りつぶす

!!box(sl,el,sa,ea,c1,c2)
指定範囲を塗りつぶす

!!lcd_Str(x,y,str,c2,c2)
文字表示

!便利変数
!!生入力
- sw0
- sw1
- sw2
- sw3

!!トリガー付き入力
0x00 - 0xffまで上がり続ける
- sw0_trig
- sw1_trig
- sw2_trig
- sw3_trig

!!和音エンジン音量
- vol[n]
合計が0xff以内になるように調整
!!和音エンジン音程
- d[n]


!サンプル
>> code cpp
class GameTask{
  public:
    GameTask* nextGt = NULL;
  protected:
    bool redraw;
    
  public:
    virtual void init();
    virtual void run();
    virtual void destroy();
};
<<

- redraw
-- 再描画要求フラグに使ってください
- nextGt
-- ココがNULLじゃなくなると、自分がdestroyされて、次のフレームからnextGtが動き始めます

!!例えばこんな感じ
>> code cpp
class SimpleMsg : public GameTask{
  private:
    int x,y;
    int xd, yd;
    int count;
  public:
    SimpleMsg();
    void init();
    void run();
    void destroy();
};

SimpleMsg::SimpleMsg(){}
void SimpleMsg::init(){
  redraw = false;
  fillAll(0B00000000, 0B00000000); // B
  x = 64;
  y = 64;
  xd = 0;
  yd = 0;
  count = 0;
}
void SimpleMsg::run(){
  count ++;
  xd = x;
  yd = y;
  x += 1;
  if(x > 128){
    y ++;
    if(y > 128){
      y = 0;
    }
    x = 0;
  }
  if(sw0_trig == 16){
    nextGt = new MainMenu();
  }
  redraw = true;
  if(redraw){
    redraw = false;
    //box(xd, xd + 8,yd , yd + 8,0B00000000, 0B00000000);
    box(x, x + 1,y , y + 1,count, count>>8);
  }
  delay(10);
}
void SimpleMsg::destroy(){
  
}
<<

!!melody
BGMを鳴らしたい場合こういうのを作って都度呼ぶ

- vol[n]
-- パートnの音量
- d[n]
-- パートnのNOTE

(nは0-4の5パート)

>> code cpp
MelodyTest::MelodyTest(){}
void MelodyTest::init(){
  count = 0;
  lcount = 0;
  vol[1] = 128;
}
void MelodyTest::run(){
  count ++;
  int melody[] = {
    NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};
  int noteDurations[] = {
    8, 4, 4, 8,8,8,8,8 };

  int accum = 0;
  int i;
  for(i = 0;i <= lcount; i++){
    accum += noteDurations[i];
  }
  if(count > accum){
    lcount ++;
    accum += noteDurations[i];
  }
  if((lcount)>7)  nextGt = new MainMenu();
  if(accum - count > 1){
    d[1] = (melody[(lcount)]);
  }else{
    d[1] = 0;
  }
  delay(50);
}
void MelodyTest::destroy(){
  
}

<<


!おまじない
!!MainMenu
たしか音の割り込みが入るようになるはず

TCCR2A,TCCR2Bはタイマの周期と方式を選んでる
TIMSK2はタイマ割り込みの有効化をしている
OCR2Bってなんだっけ
TCNT2もあまりはっきり覚えてない
>> code cpp
  // 3-pwm ,pwm
  TCCR2A = _BV(COM2B1)| _BV(WGM20);
  // clk/1 prescale
  TCCR2B = _BV(CS20); //1  		31250
  //TCCR2B = _BV(CS21); //8 	 	3906.25
  //1<<CS22 | 0<<CS21 | 1<<CS20; // clk/128 prescale
  //TCCR2B = TCCR2B & 0b11100000 | 0b00001; // pwm: 31250Hz

  TIMSK2 = 1<<TOIE2; // Timer/Counter2 Overflow Interrupt Enable
  OCR2B = 80; // for debug
  TCNT2 = timerLoadValue;
<<

!!MML
音の割り込みを一旦解除する
色々設定してるけどTIMSK2をいじるとタイマ割り込みは止まるはず
>> code cpp
  TIMSK2 = 0<<TOIE2; // Timer/Counter2 Overflow Interrupt Disable
<<

5643382
wiki
1379866534