ラジオ、ときどきラーメン2

ラジオ、ときどきラーメン2

PR

×

カレンダー

サイド自由欄




2015.01.31
XML
カテゴリ: 福袋
DSC_0035-R.jpg


このキャリーボード、7segLEDの各桁にタクトスイッチが付属するようなレイアウト。
これを見たら連想するのは。。。。。。やっぱりスロットマシンですね。
これをシールドに取り付けて遊べるようにしたいと思います。

ということで、ソフト作ってみました。ほぼできました。
とりあえず暫定ですが、こんな感じで。

//
// アノードコモンの4ケタ7セグLEDを駆動する。 
// スロットマシンpro Ver.01

//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

// 12pin --- S3
// 13pin --- S4
// 5V --- VCC
// GND --- GND
//

// 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]);

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 = 15; //表示スピード初期値

// 1桁の数字(n)を表示する
void display_number (int n) {
for (int i = 0; i < number_of_cathode_pins; i++) {
digitalWrite(cathode_pins[i], digits[n] & (1 << i) ? LOW : HIGH);
}
}

// カソードをすべてHIGHにする(負論理なのでHIGHで消灯)
void clear_segments() {
for (int j = 0; j < number_of_cathode_pins; j++) {
digitalWrite(cathode_pins[j], HIGH);
}
}

void display_numbers (int n) {
for (int i = 0; i < number_of_anode_pins; i++) {
digitalWrite(anode_pins[i], LOW);
display_number(n % 10); // 最後の一桁を表示する
delay(tm);
clear_segments();
digitalWrite(anode_pins[i], HIGH);
n = n / 10; // 10で割る
}
}

// setup() は,最初に一度だけ実行される
void setup() {
for (int i = 0; i < number_of_cathode_pins; i++) {
pinMode(cathode_pins[i], OUTPUT); // cathode_pinsを出力モードに設定する
}
for (int i = 0; i < number_of_anode_pins; i++) {
pinMode(anode_pins[i], OUTPUT); // anode_pinを出力モードに設定する
digitalWrite(anode_pins[i], HIGH);
}
for (int i = 0; i < number_of_switch_pins; i++) {
pinMode(switch_pins[i], INPUT); // switch_pinを入力モードに設定する
//digitalWrite(anode_pins[i], HIGH);
}

}

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;

display_numbers(i2);
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, 10, 50); //表示スピード設定
delay(500);
}
}
}
}
}





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2015.02.01 04:28:27
コメントを書く


■コメント

お名前
タイトル
メッセージ
画像認証
上の画像で表示されている数字を入力して下さい。


利用規約 に同意してコメントを
※コメントに関するよくある質問は、 こちら をご確認ください。


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: