#include <MsTimer2.h>
#include <Adafruit_SSD1306.h>
#include <PinChangeInterrupt.h>
#define LCD_ADDRESS 0x3C
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define BUZZER_POS_PIN 8
#define TACT_SW_A_PIN 9
#define TACT_SW_B_PIN 10
#define TACT_SW_C_PIN 11
#define TACT_SW_D_PIN 12
#define TACT_SW_DETECT_PIN 2
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
volatile uint8_t swNum = 0;
void callbackTactSw() {
if(swNum == 0) {
if (digitalRead(TACT_SW_A_PIN) == HIGH) {
swNum += 1;
}
if (digitalRead(TACT_SW_B_PIN) == HIGH) {
swNum += 2;
}
if (digitalRead(TACT_SW_C_PIN) == HIGH) {
swNum += 4;
}
if (digitalRead(TACT_SW_D_PIN) == HIGH) {
swNum += 8;
}
}
}
void callbackTactSwA() {
//swNum = 1;
if (digitalRead(TACT_SW_A_PIN) == HIGH) {
swNum = 1;
}
}
void callbackTactSwB() {
//swNum = 2;
if (digitalRead(TACT_SW_B_PIN) == HIGH) {
swNum = 2;
}
}
void callbackTactSwC() {
//swNum = 4;
if (digitalRead(TACT_SW_C_PIN) == HIGH) {
swNum = 4;
}
}
void callbackTactSwD() {
//swNum = 8;
if (digitalRead(TACT_SW_D_PIN) == HIGH) {
swNum = 8;
}
}
void setup() {
Serial.begin(115200);
// 入力ピン
pinMode(TACT_SW_A_PIN, INPUT);
pinMode(TACT_SW_B_PIN, INPUT);
pinMode(TACT_SW_C_PIN, INPUT);
pinMode(TACT_SW_D_PIN, INPUT);
pinMode(TACT_SW_DETECT_PIN, INPUT);
// LCD (SSD1306)
display.begin(SSD1306_SWITCHCAPVCC, LCD_ADDRESS);
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
// 外部割込み
//attachInterrupt(digitalPinToInterrupt(TACT_SW_DETECT_PIN), callbackTactSw, RISING);
attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(TACT_SW_A_PIN), callbackTactSwA, RISING);
attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(TACT_SW_B_PIN), callbackTactSwB, RISING);
attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(TACT_SW_C_PIN), callbackTactSwC, RISING);
attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(TACT_SW_D_PIN), callbackTactSwD, RISING);
// タイマー割り込み
//MsTimer2::set(1000, count); // 1000msごと
//MsTimer2::start();
}
void loop() {
if (swNum) {
/*
if ((swNum == 1) && (digitalRead(TACT_SW_A_PIN) == HIGH)) {
Serial.println(swNum);
}
if ((swNum == 2) && (digitalRead(TACT_SW_B_PIN) == HIGH)) {
Serial.println(swNum);
}
if ((swNum == 4) && (digitalRead(TACT_SW_C_PIN) == HIGH)) {
Serial.println(swNum);
}
if ((swNum == 8) && (digitalRead(TACT_SW_D_PIN) == HIGH)) {
Serial.println(swNum);
}*/
Serial.println(swNum);
swNum = 0;
}
display.clearDisplay();
display.setCursor(37, 10);
display.println("Mini Game");
display.setCursor(50, 30);
display.println("Start");
display.display();
delay(5);
}