プッチ神父回路

はじめに

 これは素数を表示させるだけの回路です。

つなぎかた

f:id:kyokucho1989:20160903150042j:plain:w500

こんなかんじ。

ぷろぐらむ

//参考 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);
}