数字の①②③を手直しして
・スイッチ①を押すたびに音階の方向が切り替わる(ドレミファからドシラソファのように逆になる)
・スイッチ②を押す度に1オクターブ上下する(プリスケーラ設定をつかう)
の期限が迫っているにもかかわらず、ほとんど進んでいません。
よろしくお願いいたします。
#include <avr/io.h> #include <avr/wdt.h> #include <avr/interrupt.h> #define CTOP (0.5*F_CPU/1024-1) volatile unsigned char tone[8] = { 238, 212, 189, 178, 158, 141, 126, 118 }; volatile signed char n = -1; volatile signed char dir = 1; volatile unsigned char sw_cnt = 0;//値を確定するまでの繰り返し数 volatile unsigned char sw = 0;//スイッチの確定値 volatile unsigned char sw_flag = 0;//スイッチ状態の変化ビット unsigned char led[8]={0xAA}; //sw1,2のピン変化で起動 ISR(PCINT1_vect) { sw_cnt = 10;//2 x 10 mSec } //2mSecごとに起動 ISR(TIMER0_COMPA_vect) { static unsigned char sc = 0xfe; static unsigned char scan = 0; unsigned char sw_new; PORTB = 0; PORTD &= 0x3f; sc = (sc << 1) | (sc >> 7); scan = (scan + 1) & 7; PORTB = led[scan]; PORTC = (PORTC & 0xf0) | (sc & 0x0f); PORTD = (led[scan] & 0xc0) | (sc & 0x30) | (PORTD & 0x0f); if(sw_cnt) {//ピン変化割り込みがあれば if(--sw_cnt == 0) {//値が安定するまで待つ sw_new = (~PINC >> 4) & 3;//最新の読み取り値 sw_flag = sw ^ sw_new;//ON/OFF変化を検出 sw = sw_new;//読み取り値を更新 } } } ISR(TIMER1_COMPA_vect) { unsigned char i,k,m; n = (n + 1) & 7; ① OCR2A = tone[n]; //音階一の縦棒表示 k = 0x80 >> n; m = (TCCR2B & 1) * 3; led[0] ^=0xFF; for (i = 1; i < 3; i++) { led[m + i] = k; } } int main() { DDRB = 0x3f; DDRC = 0x0f; DDRD = 0xf8; PORTB = 0xc0; PORTC = 0xf0;//pull-up PC5,PC4 PORTD = 0x07; PCMSK1 = 0x30; PCICR = _BV(PCIE1); //Timer0 TCCR0A = 0x02;// TCCR0B = 0x04;//CTC,1/256 OCR0A = 124; TCNT0 = 0; TIFR0 = 0x07;//タイマフラグを全クリア TIMSK0 |= _BV(OCIE0A);//比較一致割り込み許可 //Timer1 TCCR1A = 0x00;//Compare Match Output Toggle COM2A,B TCCR1B = 0x0d;//CTC,1/1024 OCR1A = CTOP; TCNT1 = 0; TIFR1 = 0x07;//タイマフラグを全クリア TIMSK1 |= _BV(OCIE1A);//比較一致割り込み許 //Timer2 TCCR2A = 0x12;//Compare Match Output Toggle COM2B TCCR2B = 0x05;//CTC,1/64 OCR2A = 1; TCNT2 = 0; sei();//割り込み許可 for(;;){ wdt_reset(); //読み取り値に変化があれば if(sw_flag) { sw &= sw_flag;//sw_ON 変化のみ抽出 if(sw==1) { ② } if(sw==2) { ③ } sw_flag = 0; } } return 0; }
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
で、しつもんはなんでしょうか
ろくにプレビューせずに投稿したので、気づきませんでした。質問内容は、①②③をいじって
・スイッチ①を押すたびに音階の方向が切り替わる(ドレミファからドシラソファのように逆になる)
・スイッチ②を押す度に1オクターブ上下する(プリスケーラ設定をつかう)
の機能を持たせることです。
③はできたので①②お願いします
「よろしくお願いします」
というのは、そう書いておくとソースコードができあがってくる魔法の言葉かなにかだと思っているのでしょうか?
ここは質問するサイトであり、自分の力じゃ分からない事を聞く場所ですよね?何が言いたいんですか笑笑
ここがどういう場所かについては、teratailのヘルプより
https://teratail.com/help/question-tips
https://teratail.com/help/avoid-asking
をご一読くださいませ。言いたいことはそこに書いてあります。
あなたの挙げた文章とコードのどこにも「質問」が見当たりません。
あなたの回答
tips
プレビュー