回答受付終了まであと7日

Arduinoで、7セグを使ってフラッシュ暗算を作ろうとしています。

C言語関連32閲覧

回答(2件)

(b7a21aa2eさん) 起動後ボタンを押すと1秒後に出題されます 出題後は2秒間ボタンが押されないと判定されます 例: #define SEGa 2 #define SEGg 8 #define LEDg 10 #define LEDr 11 #define SW 12 #define QT 1000 //数字の表示時間 #define sw digitalRead(SW) byte sg[12]={ 0b00111111, //0 0b00000110, //1 0b01011011, //2 0b01001111, //3 0b01100110, //4 0b01101101, //5 0b01111100, //6 0b00000111, //7 0b01111111, //8 0b01100111, //9 0b00001000, //_ (10) 0b00000000 // (11) }; unsigned long tm; int val=0; int ans,r; byte swr=HIGH; void setSeg(byte v){ byte i,b=0b00000001; for(i=SEGa;i<=SEGg;i++){ digitalWrite(i,sg[v]&b); b <<= 1; } } void setup() { for(int i=SEGa;i<=SEGg;i++){ pinMode(i,OUTPUT); } pinMode(LEDg,OUTPUT); pinMode(LEDr,OUTPUT); pinMode(SW,INPUT_PULLUP); setSeg(10); randomSeed(analogRead(0)); } void loop() { byte swn,f; while(sw==HIGH); digitalWrite(LEDg,LOW); digitalWrite(LEDr,LOW); delay(1000); que(); f=1; tm=millis(); while(f){ swn=sw; if(swn==LOW && swr==HIGH){ val++; tm=millis(); } swr=swn; if(millis()-tm >= 2000)f=0; delay(20); } if(val==ans){ digitalWrite(LEDg,HIGH); }else{ digitalWrite(LEDr,HIGH); } } void que(){ ans=0; val=0; for(int i=0;i<3;i++){ r=random(10); ans += r; setSeg(r); delay(QT); setSeg(11); delay(100); } setSeg(10); }

画像

この回答はいかがでしたか? リアクションしてみよう

書いているとおりだけど・・・ 具体的に何が分からないんですか?