// 使用する端子(PD○○)の情報を記述(変数を定数として宣言).
const int LED_A = 2;
const int LED_B = 3;
const int LED_C = 4;
const int LED_D = 5;
const int LED_E = 6;
const int LED_F = 7;
const int LED_G = 8;
const int LED_DP = 9;
// ダイナミック点灯のプログラムで必要になる変数を宣言.
const int DIG4 = 13; // 7セグメントLEDのピン配置は6
const int DIG3 = 12; // 7セグメントLEDのピン配置は8
// LED設定
const int LED_RED = 10;
const int LED_YELLOW = 11;
void setup() {
// 使用する端子(PD○○)の入出力の設定を記述.
pinMode(DIG4, OUTPUT);
pinMode(DIG3, OUTPUT);
pinMode(LED_A, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(LED_C, OUTPUT);
pinMode(LED_D, OUTPUT);
pinMode(LED_E, OUTPUT);
pinMode(LED_F, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_DP, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
randomSeed(analogRead(0)); // アナログピンの値をシードに設定
Serial.begin(9600); // シリアル通信開始(確認用)
}
void loop() {
int sum;
int answer;
int randomNumber;
randomNumber = random(2); // 0 or 1の乱数を生成
digitalWrite(DIG3, HIGH);
if(randomNumber == 0){ // 乱数が0なら赤のLEDを点滅, 足し算を行う
sum = 0;
for(int i=0; i<3; i++){
analogWrite(LED_RED, 255);
delay(200);
analogWrite(LED_RED, 0);
delay(200);
}
// 7セグメントLEDでランダムに数字を表示させる(1s)
for (int i=0; i<3; i++) {
randomNumber = random(10); // 0から9までの乱数を生成
number(randomNumber); // 7セグメントLEDで表示させるために関数呼び出し
// 7セグメントLEDで表示(500ms)
digitalWrite(DIG4, LOW); // LOWで点灯
delay(500);
digitalWrite(DIG4, HIGH);
delay(500);
sum += randomNumber;
}
}
else if(randomNumber == 1){// 乱数が1なら黄のLEDを点滅, 掛け算を行う
sum = 1;
for(int i=0; i<5; i++){
analogWrite(LED_YELLOW, 255);
delay(200);
analogWrite(LED_YELLOW, 0);
delay(200);
}
// 7セグメントLEDでランダムに数字を表示させる(1s)
for (int i=0; i<3; i++) {
randomNumber = random(10); // 0から9までの乱数を生成
number(randomNumber); // 7セグメントLEDで表示させるために関数呼び出し
// 7セグメントLEDで表示(500ms)
digitalWrite(DIG4, LOW);
delay(500);
digitalWrite(DIG4, HIGH);
delay(500);
sum = sum * randomNumber;
}
digitalWrite(DIG4, HIGH); // 消灯
}
// 一定時間ユーザーに入力を待つ
unsigned long startTime = millis();
while (millis() - startTime < 10000) { // 10000ミリ秒(10秒)入力を待つ
if (Serial.available() > 0) {
answer = Serial.parseInt(); // シリアルポートから数値を読み取る
// 入力後, シリアルポートのバッファをクリアする
while (Serial.available() > 0) {
Serial.read();
}
if (answer == sum) {
Serial.print("正解!答えは");
Serial.println(sum);
delay(3000);
} else {
Serial.print("残念!答えは");
Serial.println(sum);
delay(3000);
}
for(int i=0; i<100; i++){
number(sum / 10);
digitalWrite(DIG4, HIGH);
digitalWrite(DIG3, LOW);
delay(5);
number(sum % 10); // 一の位
digitalWrite(DIG3, HIGH);
digitalWrite(DIG4, LOW);
delay(5);
}
break;
}
}
}
// void loop()の中に書くとややこしいので、関数として
void number(int num){
switch (num) {
case 0:
num0();
break;
case 1:
num1();
break;
case 2:
num2();
break;
case 3:
num3();
break;
case 4:
num4();
break;
case 5:
num5();
break;
case 6:
num6();
break;
case 7:
num7();
break;
case 8:
num8();
break;
case 9:
num9();
break;
default:
break;
}
}
void num0(){
digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_E, HIGH);
digitalWrite(LED_F, HIGH);
digitalWrite(LED_G, LOW);
}
void num1(){
digitalWrite(LED_A, LOW);
digitalWrite(LED_B, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, LOW);
digitalWrite(LED_E, LOW);
digitalWrite(LED_F, LOW);
digitalWrite(LED_G, LOW);
}
void num2(){
digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, HIGH);
digitalWrite(LED_C, LOW);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_E, HIGH);
digitalWrite(LED_F, LOW);
digitalWrite(LED_G, HIGH);
}
void num3(){
digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_E, LOW);
digitalWrite(LED_F, LOW);
digitalWrite(LED_G, HIGH);
}
void num4(){
digitalWrite(LED_A, LOW);
digitalWrite(LED_B, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, LOW);
digitalWrite(LED_E, LOW);
digitalWrite(LED_F, HIGH);
digitalWrite(LED_G, HIGH);
}
void num5(){
digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, LOW);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_E, LOW);
digitalWrite(LED_F, HIGH);
digitalWrite(LED_G, HIGH);
}
void num6(){
digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, LOW);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_E, HIGH);
digitalWrite(LED_F, HIGH);
digitalWrite(LED_G, HIGH);
}
void num7(){
digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, LOW);
digitalWrite(LED_E, LOW);
digitalWrite(LED_F, LOW);
digitalWrite(LED_G, LOW);
}
void num8(){
digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_E, HIGH);
digitalWrite(LED_F, HIGH);
digitalWrite(LED_G, HIGH);
}
void num9(){
digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_E, LOW);
digitalWrite(LED_F, HIGH);
digitalWrite(LED_G, HIGH);
}