USART / 音を鳴らす

Example 5-4 serialOrgan.c listing on pp.102-103のコアな部分のみを実行してみる。
https://github.com/ti-nspire/AVR/tree/master/serialOrgan
f:id:ti-nspire:20190416102742p:plain:w360

//#include <avr/io.h>
//#include <util/delay.h>U
extern "C" {
    #include "organ.h"
    #include "USART.h"
    #include "scale16.h"
    //#include "pinDefines.h"
}

#define NOTE_DURATION     0xF000 // 音の長さ

int main(void) {
    DDRD |= (1 << PD6); // PD6のIOをOUTにする。
    
    initUSART();
    printString("\r\n---- Serial Organ ----\r\n");

    char fromCompy; // 受信した文字を格納するための変数

    const uint8_t keys[]   = { 'a', 'w', 's', 'e', 'd', 'f', 't',
                               'g', 'y', 'h', 'j', 'i', 'k', 'o',
                               'l', 'p', ';', ':' };
    const uint16_t notes[] = { G4, Gx4, A4, Ax4, B4, C5, Cx5,
                               D5, Dx5, E5, F5, Fx5, G5, Gx5,
                               A5, Ax5, B5, C6 };

    while(1){
        fromCompy = receiveByte();                 // 何か文字を受信したら、
        transmitByte('N');                         // 確認応答として'N'をターミナルに表示して、
        for(int i=0; i<sizeof(keys); i++) {        // keys排列を左から順に巡回して、
            if(fromCompy == keys[i]){              // 送られてきた文字が見つかったら、
                playNote(notes[i], NOTE_DURATION); // その文字に対応する音を鳴らして、
                break;                             // forループを抜ける。
            }
        }
    }                                           

    return 0;
}

f:id:ti-nspire:20190416103303j:plain:w500
これでChapter 5 Serial I/Oがおおむね終わり。