사이먼: 무작위 순서
Coddy Arduino 여정의 프로젝트 섹션에 포함된 레슨. 24개 중 14번째.
이제 보드가 차례를 맡습니다. 버튼을 놓는 첫 순간 게임이 시작됩니다. 보드는 무작위 색상 네 개를 골라 배열에 저장한 다음 재생합니다.
random(4)는 0, 1, 2 또는 3을 반환합니다. 즉, 색상 하나입니다. for 루프가 배열을 채웁니다. 반응 게임에서처럼 버튼을 누를 때 micros()를 시드로 사용하세요. 그렇지 않으면 매 게임마다 같은 색상이 재생됩니다.
randomSeed(micros());
for (int i = 0; i < 4; i++) {
sequence[i] = random(4);
}for 루프가 패턴을 재생합니다. 색상에 해당하는 음을 재생하고, 기다린 다음, 불을 끄고 다시 기다립니다. 색상이 연속해서 두 번 나올 때 두 번째 대기가 중요합니다. 대기가 없으면 빨간색, 빨간색이 긴 빨간색 하나처럼 보입니다. 이제 플레이어는 보기만 하므로 delay()를 사용해도 괜찮습니다.
for (int i = 0; i < 4; i++) {
lightOn(sequence[i]);
delay(400);
lightOff(sequence[i]);
delay(200);
}playing이라는 bool은 게임이 시작되었음을 기억하므로, 첫 번째 누름만 게임을 시작합니다.
챌린지
중급보드가 패턴을 재생하도록 하세요:
int sequence[4];와bool playing = false;를 추가하세요- 버튼에서 손을 떼었을 때
playing이false이면: 시드를 설정하고, 배열을random(4)로 채우고,playing을true로 설정한 다음 패턴을 재생하세요 - 패턴: 500 ms 기다린 다음, 각 색상을 해당 음과 함께 400 ms 동안 재생하고, 그 뒤 200 ms 동안 소리를 멈춥니다
그 후 버튼은 이전처럼 불이 켜지고 소리가 납니다. Run을 누르고, 버튼을 누른 다음 Check를 누르세요.
직접 해보기
// 색상별로 하나씩: 빨강, 초록, 파랑, 노랑
const int ledPins[4] = {9, 10, 11, 12};
const int buttonPins[4] = {2, 3, 4, 5};
const int notes[4] = {262, 330, 392, 523}; // C, E, G와 높은 C
const int buzzerPin = 8;
int lastState[4] = {HIGH, HIGH, HIGH, HIGH}; // 각 버튼의 마지막 읽기 값
// 색상 i의 불을 켜고 해당 음을 연주합니다.
void lightOn(int i) {
digitalWrite(ledPins[i], HIGH);
tone(buzzerPin, notes[i]);
}
// 색상 i의 불을 끄고 소리를 멈춥니다.
void lightOff(int i) {
digitalWrite(ledPins[i], LOW);
noTone(buzzerPin);
}
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
pinMode(buttonPins[i], INPUT_PULLUP);
}
}
void loop() {
for (int i = 0; i < 4; i++) {
int state = digitalRead(buttonPins[i]);
if (state == LOW && lastState[i] == HIGH) { // 눌림
lightOn(i);
}
if (state == HIGH && lastState[i] == LOW) { // 뗌
lightOff(i);
}
lastState[i] = state;
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
프로젝트의 모든 레슨
직접 연습해 보세요: Arduino 플레이그라운드