!便利関数
!!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