楽しく遊ぼ。

楽しいものをつくりたい!

Arduinoで作る電子ルーレット

昔に作った電子ルーレットで、YouTubeにアップしていたところ

プログラムを公開希望を頂いたので掲載します。

素人作りのプログラムなので、ご参考ていどに・・

 

www.youtube.com

 

ピン接続は次の通りです。

 

 1

 2 - 圧電スピーカ

 3 - 赤色LED

 4 - 緑色LED

 5 - 赤色LED

 6 - 緑色LED

 7 - 赤色LED

 8 - 緑色LED

 9 - 赤色LED

10 - 緑色LED

11 - 赤色LED

12 - 緑色LED

13 

14 - 赤ボタン

15 - 緑ボタン

16 - モードセレクト用トグルスイッチ

 

 

 

/////////////////////////
/// ルーレット & ジャッジマシン
///  10LED 2ボタン モード切り替え 1sw
/// 
/////////////////////////

int i;
int rdm;
int tt;
int nn;
int mm;
int gbtn;
int rbtn;
#define spk 2 ///スピーカ2番ピン

////////////////////////
void redon() { /// 赤LED ON
digitalWrite(3,HIGH);
digitalWrite(5,HIGH);
digitalWrite(7,HIGH);
digitalWrite(9,HIGH);
digitalWrite(11,HIGH);
}
void greenon() { /// 緑LED ON
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(10,HIGH);
digitalWrite(12,HIGH);
}
void ledoff() { /// LED 全OFF
for(tt=3;tt<=12;tt++) {
digitalWrite(tt,LOW);
}
}

void beep() { // ピ
tone(spk,700,25);
}
void beepp() { // ピー音
tone(spk,700,500);
}
void beepb() { // ブー音
tone(spk,120,600);
}
void beepl() { // ピポ音
delay(300);
tone(spk,960,200);
delay(250);
tone(spk,770,600);
}
void beepm() { // ピポピポ音
delay(300);
tone(spk,960,200);
delay(200);
tone(spk,770,250);
}
//////////////////////////
void disp(int num) { /// ルーレット表示
switch(num){
case 1: /////
for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(80+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(3,HIGH);
beepl();
break;
case 2: /////
for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(80+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(3,HIGH);
beep();
delay(350);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
beepl();
break;
case 3: /////
for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(80+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(3,HIGH);
beep();
delay(350);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
beep();
delay(380);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
beepl();
break;
case 4: /////
for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(80+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(3,HIGH);
beep();
delay(350);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
beep();
delay(380);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
beep();
delay(410);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
beepl();
break;
case 5: /////
for(nn=3;nn<=6;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(140+10*nn);
digitalWrite(nn,LOW);
}
digitalWrite(7,HIGH);
beepl();
break;
case 6: /////
for(nn=3;nn<=7;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(130+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(8,HIGH);
beepl();
break;
case 7: /////
for(nn=3;nn<=8;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(120+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(9,HIGH);
beepl();
break;
case 8: /////
for(nn=3;nn<=9;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(110+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(10,HIGH);
beepl();
break;
case 9: /////
for(nn=3;nn<=10;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(100+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(11,HIGH);
beepl();
break;
case 10: /////
for(nn=3;nn<=11;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(90+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(12,HIGH);
beepl();
break;
}
}
////////////////////////
void setup() {
randomSeed(analogRead(4));
// Serial.begin(9600);
for(i=3; i<=12; i=i+1) {
pinMode(i, OUTPUT);
}
pinMode(14,INPUT_PULLUP); // 赤ボタン
pinMode(15,INPUT_PULLUP); // 緑ボタン
pinMode(16,INPUT_PULLUP); // モードセレクト
}
//////////////////////////
void loop() {

if (digitalRead(16)==LOW) { //ルーレットモード選択
int c=0; int ff=0;
rdm = random(1,11);
if (digitalRead(15)==LOW) {
ledoff();
for(mm=0;mm<=50;mm++) {

for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(35);
digitalWrite(nn,LOW);
if (digitalRead(14)==LOW)
ff=1;}
if (ff==1) break;
}
// Serial.println(rdm);
for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(30+5*nn);
digitalWrite(nn,LOW);
}
disp(rdm);
}
}
else {
/////// ジャッジマシンモード
ledoff();
if (digitalRead(14)==LOW) { // NG
redon();
beepb();delay(700);beepb();
delay(3000);
}

if (digitalRead(15)==LOW) { // OK
greenon();
beepm();delay(200);beepm();
delay(3000);
}
}
}

/////////// end