7セグLED(4桁)キャリーボード@aitendo福袋2015KIT でスロットマシン、Timer2割り込みに改訂版
7セグLED(4桁)キャリーボード@aitendo福袋2015KIT でスロットマシン、Timer2割り込みに改訂版タイマー割り込みで数字を表示するタイプもできました。こちらは輝度が安定しているので目がチカチカしなくていいのですが、基本常時表示しているように見える(前回のは表示が消えている時間が長いため明暗がはっきりわかって数字がよく見える。)ので、かなり遅く表示しないと数字の区別がつかないので、いまいちです。まあ、こっちのほうが洗練されている感がありますが。//// アノードコモンの4ケタ7セグLEDを駆動する。 割り込みTimer2使用。// スロットマシンpro Ver.02////7セグLED(4桁)キャリーボード [IFB-7SEGX4LED]@aitendo との接続// arduino --- IFB-7SEGX4LED // 2pin --- a// 3pin --- b// 4pin --- c// 5pin --- d// 6pin --- e// 7pin --- f// 8pin --- g// 9pin --- dp// 10pin --- S1// 11pin --- S2// 12pin --- S3// 13pin --- S4// 5V --- VCC// GND --- GND//// 14pin --- SW1// 15pin --- SW2// 16pin --- SW3// 17pin --- SW4// 19pin --- VR1 (analogIN 表示Speed調整VR)// const int cathode_pins[] = {9, 8, 7, 6, 5, 4, 3, 2}; // カソードに接続するArduinoのピンconst int anode_pins[] = {13, 12, 11, 10}; // アノードに接続するArduinoのピンconst int switch_pins[] = {17, 16, 15, 14}; // タクトスイッチに接続するArduinoのピンconst int number_of_cathode_pins = sizeof(cathode_pins) / sizeof(cathode_pins[0]);const int number_of_anode_pins = sizeof(anode_pins) / sizeof(anode_pins[0]);const int number_of_switch_pins = sizeof(switch_pins) / sizeof(switch_pins[0]); int numbers_to_display = 0; // LEDに表示する数字を保持する変数 const int digits[] = { 0b11111100, // 0 0b01100000, // 1 0b11011010, // 2 0b11110010, // 3 0b01100110, // 4 0b10110110, // 5 0b10111110, // 6 0b11100000, // 7 0b11111110, // 8 0b11110110, // 9}; int analogInPin = 5; int j = 0;int k = 5;int l = 7;int m = 2;int jf = 0;int kf = 0;int lf = 0;int mf = 0;int tm = 100; //表示スピード初期値 // 1桁の数字(n)を表示するvoid display_number (int n) { for (int i = 0; i < number_of_cathode_pins; i++) { digitalWrite(cathode_pins[i], digits[n] & (1 f = 16000000 / (2 * 32 * 256) = 976 Hz OCR2A = 255; // 255クロックごとに割り込みをかける TCCR2B = 0b100; // 分周比を32に設定する bitWrite(TIMSK2, OCIE2A, 1); // TIMER2を} void loop () { for (int ii = 0; ii < 10; ii++) { if (jf == 0) { j = j + 1 ;} if (kf == 0) { k = k + 1 ;} if (lf == 0) { l = l + 1 ;} if (mf == 0) { m = m + 1 ;} j = j % 10 ; k = k % 10 ; l = l % 10 ; m = m % 10 ; int i2 = j*1000+k*100+l*10+m; set_numbers(i2); delay(tm); //delay(10); boolean ff1 = digitalRead(switch_pins[3]); if (ff1 == LOW) { jf = 1;} boolean ff2 = digitalRead(switch_pins[2]); if (ff2 == LOW) { kf = 1;} boolean ff3 = digitalRead(switch_pins[1]); if (ff3 == LOW) { lf = 1;} boolean ff4 = digitalRead(switch_pins[0]); if (ff4 == LOW) { mf = 1;} int ff = jf * kf * lf * mf; if(ff == 1){ tm = 5; // delay(1000); if (ff4 == LOW) { if (ff3 == LOW) { jf = 0; kf = 0; lf = 0; mf = 0; int sensorValue = analogRead(analogInPin); //VRアナログ入力 tm = map(sensorValue, 0, 1023, 20, 180); //表示スピード設定 delay(500); } } } }} ISR(TIMER2_COMPA_vect){ display_numbers();}