Trò chơi phản xạ: Thời gian chờ ngẫu nhiên
Thuộc phần Dự án trong hành trình Arduino của Coddy. Bài học 5 trên 24.
Dự án tiếp theo là một trò chơi phản xạ. Bạn nhấn nút, bo mạch chờ, sau đó bật đèn LED và bạn nhấn lại nhanh nhất có thể.
Thời gian chờ là ngẫu nhiên, nếu không bạn sẽ học được nhịp. random(1000, 3001) cho ra một số nguyên từ 1000 đến 3000.
random() là một phép tính: sau mỗi lần bật nguồn, hàm này cho ra cùng các số theo cùng thứ tự. randomSeed() chọn điểm bắt đầu của dãy đó. Khởi tạo hạt giống bằng thời điểm nhấn nút, tính bằng micro giây, thời điểm này khác nhau trong mỗi ván:
randomSeed(micros());
waitTime = random(1000, 3001);Trò chơi là một máy trạng thái với ba trạng thái: READY (chờ nhấn nút), WAITING (thời gian chờ ngẫu nhiên) và LIT (đèn LED đang sáng). Thời gian chờ sử dụng millis(), nhờ đó các bước tiếp theo có thể theo dõi nút trong lúc chờ.
Phần code khởi đầu đã tính pressed: hiện tại nút đọc là LOW, còn lần trước đọc là HIGH. Nút này không bị nảy, nên không cần chống dội.
Thử thách
Trung bìnhNút nhấn nối với chân 2 và LED nối với chân 12. Điền ba trạng thái:
READY: khi nhấn nút, khởi tạo hạt giống bằngmicros(), chọn thời gian chờ từ 1000 đến 3000 ms, lưu thời điểm bắt đầu rồi chuyển sangWAITINGWAITING: khi hết thời gian chờ, bật LED rồi chuyển sangLITLIT: khi nhấn nút, tắt LED rồi chuyển sangREADY
Nhấn Chạy, chơi vài lượt, rồi nhấn Kiểm tra.
Tự làm thử
const int ledPin = 12;
const int buttonPin = 2;
// Ba trạng thái của một lượt chơi
enum State { READY, WAITING, LIT };
State state = READY;
int lastButton = HIGH; // Giá trị nút bấm ở lần đọc trước
unsigned long waitStart = 0; // Thời điểm bắt đầu chờ
unsigned long waitTime = 0; // Thời gian chờ kéo dài bao lâu
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
Serial.println("Press the button to start");
}
void loop() {
int button = digitalRead(buttonPin);
bool pressed = (button == LOW && lastButton == HIGH); // Vừa được nhấn
lastButton = button;
// READY: nhấn nút để bắt đầu chờ
// WAITING: khi hết thời gian chờ, bật đèn LED
// LIT: nhấn nút để tắt đèn LED và trò chơi sẵn sàng bắt đầu lại
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Dự án
2Trò chơi phản xạ
Trò chơi phản xạ: Thời gian chờ ngẫu nhiênTrò chơi phản xạ: Bộ hẹn giờTrò chơi phản xạ: Khởi động sớmTrò chơi phản xạ: Thời gian tốt nhấtTự luyện tập: Playground Arduino