10秒間数えて±1秒、つまり9秒~11秒なら合格でそれ以外の記録なら不合格というゲームです。
有機ELのSSD13331と一般的なタクトスイッチを使用しました。
プログラムは以下の通りです。
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1331.h>
#include <SPI.h>
#define sclk 13
#define mosi 11
#define cs 10
#define rst 9
#define dc 8
// Color definitions
#define BLACK 0x0000
#define RED 0xF800
Adafruit_SSD1331 display = Adafruit_SSD1331(&SPI, cs, dc, rst);
//STOPWATCHのための変数定義
unsigned long time_mil; //変数定義
unsigned long time_mic; //変数定義
unsigned long time_1; //変数定義
int mode_flg = 0; //フラグでモードを設定
float count_s; //計算した秒数
void setup(void) {
pinMode(2,INPUT_PULLUP);//スイッチの番号とプルップ設定
display.begin(); //ディスプレイの開始
display.fillScreen(BLACK);
display.setCursor(20,20);
display.setTextSize(2);
display.print("PUSH");
}
void loop() {
time_mil = millis(); //millis()関数の戻り値を変数に格納
//フラグが0でボタンが押されたらSTART
if(digitalRead(2) == LOW && mode_flg == 0){
time_1 =millis(); //STARTの時間というか時刻を代入
display.fillScreen(BLACK);
display.setTextSize(2);
display.setTextColor(RED);
display.setCursor(20,20);
display.print("????");
mode_flg =1;//フラグを1にする
delay(300);
}
//2回目はSTOP、フラグを1で押されたとき
if(digitalRead(2) == LOW && mode_flg == 1){
time_mil = millis()- time_1; //STARTからの時間を計算
count_s = (float)time_mil/1000; //秒に表示するために行う計算
if(count_s >= 9 && count_s <= 11){
//合格の時
display.fillScreen(BLACK);
display.setTextSize(2);
display.setTextColor(RED);
display.setCursor(10,10);
display.print("GOOD!!");
display.setCursor(10,35);
display.print(count_s);
}else
{
//不合格のとき
display.fillScreen(BLACK);
display.setTextSize(2);
display.setTextColor(RED);
display.setCursor(10,10);
display.print("NO GOOD");
display.setCursor(10,35);
display.print(count_s);
}
mode_flg =0; //フラグを戻す
delay(3000);
//最初の画面にする
display.fillScreen(BLACK);
display.setCursor(20,20);
display.setTextSize(2);
display.setTextColor(0xffffff);
display.print("PUSH");
}
}