生きていればピンチな状況に陥ることもある。人によっては落ち着く方法を持っている。彼らは独自のルーティンによって呼吸を整え、思考をクリアにすることができる。エンリコ=プッチは素数を数える。
落ち着け……心を平静にして考えるんだ…こんな時どうするか……
2… 3 5… 7… 11… 13… 17… 19
落ち着くんだ… 『素数』を数えて落ち着くんだ…
『素数』は1と自分の数でしか割ることができない孤独な数字……私に勇気を与えてくれる
私も素数を数えたいがなかなか覚えられない。ということで素数を表示させる回路をつくり、落ち着くことにした。
必要なもの
品名 | 金額 | 個数 |
---|---|---|
ダイナミック接続4桁青色7セグLED([OSL40562-LB) | ¥250 | 1個 |
220Ω抵抗 | ¥100(100個入り) | 8個 |
ブレッドボード・ジャンパーワイヤ EIC-J-L | ¥400(1パック) | 1個 |
ブレッドボード・ジャンパーコード(オス-オス)(10cm) | ¥180(1セット) | 1セット |
抵抗はLEDが光れば良いので、適当なものを使おう。ジャンパワイヤーも繋がればいいので、既に持っていれば新たに買う必要はない。
つなぎかた
写真で紹介。
- 数字の小数点が手前側に来るように、7セグLEDを設置する。
- 220Ω抵抗を写真のようにつなげる。
- 7セグLEDの六本足の左側と一番左の抵抗の位置を揃えること。六本足の右端はまだ接続しない。
- 六本足の右側からジャンパワイヤーを伸ばし、写真のように接続する。
- 今度は上側。左から二番目の足からジャンパワイヤーをぐるりと伸ばし、一番右の抵抗に接続する。
- 右隣も同様にぐるりと伸ばし、右から二番目の抵抗に接続する。
- 一番右の足もぐるり。
- 最後に曲がるジャンパワイヤーを写真のように接続する。
完成。
接続の状態を表にまとめた。足の番号はこのように割り振る。
足の番号 | 接続状態 |
---|---|
1 | -220Ω-8番pin |
2 | -220Ω-7番pin |
3 | -220Ω-6番pin |
4 | -220Ω-5番pin |
5 | -220Ω-4番pin |
6 | -9番pin |
7 | -3番pin |
8 | -10番pin |
9 | -11番pin |
10 | -2番pin |
11 | -1番pin |
12 | -12番pin |
プログラム
//参考 LED site:(http://happy-arduino.blogspot.jp/2012/08/17_27.html) //ブッチ神父回路 #include <MsTimer2.h> // タイマー割り込みを利用する為に必要なヘッダファイル const int led_1 = 9; // 7segLED the one's place const int led_10 = 10; // 7segLED the ten's place const int led_100 = 11; const int led_1000 = 12; int state = 2; // LEDの状態(0ならオフ、1ならオン) int state_1=2; // the one's digit int state_10 =0; // the ten's digit int state_100 =0; int state_1000 =0; int j=2; void setup(){ //1~8番ピン デジタル出力へセット for (int i=1; i<=8; i++){ pinMode(i,OUTPUT); } pinMode(led_10, OUTPUT); // 7segLED はoutput pinMode(led_1, OUTPUT); pinMode(led_100, OUTPUT); pinMode(led_1000, OUTPUT); MsTimer2::set(1000, count_up); // 1000ms毎に割込み関数を呼び出す様に設定 MsTimer2::start(); // タイマー割り込み開始 } //LEDレイアウトを定義 boolean Num_Array[11][8]={ {1,1,1,0,1,0,1,1},{0,0,1,0,1,0,0,0},{1,0,1,1,0,0,1,1},{1,0,1,1,1,0,1,0}, {0,1,1,1,1,0,0,0},{1,1,0,1,1,0,1,0},{1,1,0,1,1,0,1,1},{1,1,1,0,1,0,0,0}, {1,1,1,1,1,0,1,1},{1,1,1,1,1,0,1,0},{0,0,0,0,1,0,0} }; //LED表示関数を定義 void NumPrint(int Number){ for (int w=0; w<=7; w++){ digitalWrite(w+1,Num_Array[Number][w]); } } void count_up(){ state=state+1; while(state!=j){ while(state % j !=0){ j=j+1; } if(state==j){ j=2; break; } state=state+1; j=2; } state = state % 10000; state_1 = state % 10; state_10 = state /10 % 10; state_100 = state /100 % 10; state_1000 = state /1000 % 10; } void loop(){ digitalWrite(led_1000,1); digitalWrite(led_100,1); digitalWrite(led_10,1); digitalWrite(led_1,0); NumPrint(state_1); delay(3); digitalWrite(led_1000,1); digitalWrite(led_100,1); digitalWrite(led_10,0); digitalWrite(led_1,1); NumPrint(state_10); delay(3); digitalWrite(led_1000,1); digitalWrite(led_100,0); digitalWrite(led_10,1); digitalWrite(led_1,1); NumPrint(state_100); delay(3); digitalWrite(led_1000,0); digitalWrite(led_100,1); digitalWrite(led_10,1); digitalWrite(led_1,1); NumPrint(state_1000); delay(3); }
- タイマー割り込みを使い、1秒ごとに素数を数えるようにプログラムしている。
- NumPrint()という関数を使い、一桁の整数を飛ばせば数字通りにLEDが光るようになっている。
- 桁数の指定はdigitalWriteのON/OFFを使う。一桁ごとにLEDを点灯させている。delay(3)の数字を大きくするとそれがわかる。
- 素数を求めるプログラムはcout_up()のところ。もう少し速く計算させたい。
うごきます。
またくだらないものをつくってしまった。
参考
ジョジョの奇妙な冒険 第6部 カラー版 1 (ジャンプコミックスDIGITAL)
- 作者: 荒木飛呂彦
- 出版社/メーカー: 集英社
- 発売日: 2013/12/20
- メディア: Kindle版
- この商品を含むブログを見る