USART / 音を鳴らす
Example 5-4 serialOrgan.c listing on pp.102-103のコアな部分のみを実行してみる。
https://github.com/ti-nspire/AVR/tree/master/serialOrgan
//#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; }
これでChapter 5 Serial I/Oがおおむね終わり。