-현재 듣고 있는 곡-
ザムザ / てにをは feat.初音ミク
플레이 리스트에 나도 모르게 들어있었던 노래였는데, 최근 찾아볼 정도로 좋아하고 있다
특유의 次(つぎ)발음이 좋다
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// LCD 모듈 설정
LiquidCrystal_I2C lcd(0x27, 16, 2); // 주소 0x27에 16x2 크기의 LCD 모듈을 사용합니다.
const int buttonPinA = 2; // 버튼 핀을 디지털 핀 2에 연결합니다.
const int buttonPinB = 3;
const int buttonPinC = 4;
const int buttonPinD = 5;
// 이전 버튼 상태 변수 초기화
int previousButtonStateA = LOW;
int previousButtonStateB = LOW;
int previousButtonStateC = LOW;
int previousButtonStateD = LOW;
int level = 1;
int gameend = 0;
void setup() {
// 버튼 핀을 입력으로 설정
pinMode(buttonPinA, INPUT);
pinMode(buttonPinB, INPUT);
pinMode(buttonPinC, INPUT);
pinMode(buttonPinD, INPUT);
// LCD 초기화
lcd.init();
lcd.backlight();
// 시리얼 통신 시작
Serial.begin(9600);
}
void loop() {
// 버튼 상태 읽기
int buttonStateA = digitalRead(buttonPinA);
int buttonStateB = digitalRead(buttonPinB);
int buttonStateC = digitalRead(buttonPinC);
int buttonStateD = digitalRead(buttonPinD);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("flash plus");
lcd.setCursor(0, 1);
lcd.print("press to start");
delay(50);
if (buttonStateA == HIGH && previousButtonStateA == LOW) {
while(true){
int time_c = 0;
int randomNumberA = random(1, level*10);
int randomNumberB = random(1, level*10);
int randomNumberC = random(1, level*10);
int randomNumberD = random(1, level*10);
int randomNumberE = random(1, level*10);
int sum = randomNumberA + randomNumberB + randomNumberC + randomNumberD + randomNumberE;
int answer = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("start");
lcd.setCursor(0, 1);
lcd.print("level ");
lcd.print(level);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Plus all number");
lcd.setCursor(0, 1);
lcd.print(randomNumberA);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Plus all number");
lcd.setCursor(0, 1);
lcd.print(randomNumberB);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Plus all number");
lcd.setCursor(0, 1);
lcd.print(randomNumberC);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Plus all number");
lcd.setCursor(0, 1);
lcd.print(randomNumberD);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Plus all number");
lcd.setCursor(0, 1);
lcd.print(randomNumberE);
delay(1000);
unsigned long startTime = millis();
while(millis() - startTime < 10000){
buttonStateB = digitalRead(buttonPinB);
buttonStateC = digitalRead(buttonPinC);
buttonStateD = digitalRead(buttonPinD);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Answer is");
lcd.setCursor(0, 1);
lcd.print(answer);
delay(50);
if (buttonStateB == HIGH && previousButtonStateB == LOW) {
answer += 100;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Answer is");
lcd.setCursor(0, 1);
lcd.print(answer);
delay(50);
}
if (buttonStateC == HIGH && previousButtonStateC == LOW) {
answer += 10;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Answer is");
lcd.setCursor(0, 1);
lcd.print(answer);
delay(50);
}
if (buttonStateD == HIGH && previousButtonStateD == LOW) {
answer += 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Answer is");
lcd.setCursor(0, 1);
lcd.print(answer);
delay(50);
}
previousButtonStateA = buttonStateA;
previousButtonStateB = buttonStateB;
previousButtonStateC = buttonStateC;
previousButtonStateD = buttonStateD;
}
if(answer == sum){
level += 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You are right!");
lcd.setCursor(0, 1);
lcd.print("Soon next level");
delay(5000);
}
else{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You are lose");
lcd.setCursor(0, 1);
lcd.print("Game End");
gameend = 1;
delay(5000);
}
if(gameend == 1)
break;
previousButtonStateA = buttonStateA;
previousButtonStateB = buttonStateB;
previousButtonStateC = buttonStateC;
previousButtonStateD = buttonStateD;
}
}
if(gameend == 1){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Last level is ");
lcd.print(level);
lcd.setCursor(0, 1);
lcd.print("Game End");
delay(10000);
previousButtonStateA = buttonStateA;
previousButtonStateB = buttonStateB;
previousButtonStateC = buttonStateC;
previousButtonStateD = buttonStateD;
}
gameend = 0;
}
현재 아두이노로 구현된 플레시 암산 게임기이다
여기에 버튼을 누르면 소리가 나게 해보려 한다
일단 부저 소리의 매커니즘을 까먹었으니, 이전에 만든 코드를 살펴보자
https://github.com/NoNamed02/College/blob/main/Arduino/lecture/servo_senser_buser.ino
(이전에 만든 자동 정수기 매커니즘이다)
우선 부저 핀을 #define으로 설정해준다
사실 int로 해도 될거 같지만, 그냥 그러려니 하자
여기에 tone()함수를 사용하여 소리를 낸다
tone(부저핀(디지털), 주파수) 로 사용한다
그럼 부저 음계를 살펴보자
3도 도의 음계는 대충 130이다
이렇게 하면 시작 버튼을 누르면 소리가 난다
문제가 생겼다
이렇게, 도 - 솔 - 미 - 솔 의 멜로디를 넣으니, 중간 중간의 딜레이 때문에 버튼이 인식되는 타이밍이 꼬였다
즉, 버튼을 눌러도, 딜레이 다음에 걸리면 버튼이 눌리지 않은 취급이 된다
if문으로 하면 좀 나아지나 싶었지만, 큰 차이가 없다
그냥 딜레이를 물리적으로 줄이는 걸로 타협하자
그후, 승리, 패배, 다음 스테이지 등 효과음을 추가하여 마무리 했다
https://github.com/NoNamed02/College/blob/main/Arduino/lecture/flash%20plus.ino
그렇게 완성된 플레이 암산 게임기이다
'개발일지 > 기타' 카테고리의 다른 글
[QT] QT creator - 간단 작곡 코드 생성 프로그램 만들기(C++) - 5 종료 버튼, 멜로디 듣기 버튼 (0) | 2024.05.20 |
---|---|
[QT] QT creator - 간단 작곡 코드 생성 프로그램 만들기(C++) - 4 효과음, 배경음악 넣기 (0) | 2024.05.20 |
[QT] QT creator - 간단 작곡 코드 생성 프로그램 만들기(C++) - 3 (0) | 2024.05.20 |
[QT] QT creator - 간단 작곡 코드 생성 프로그램 만들기(C++) - 2 (0) | 2024.05.19 |
[QT] QT creator - 간단 작곡 코드 생성 프로그램 만들기(C++) - 1 (0) | 2024.05.19 |