Sinh số ngẫu nhiên

Arduino:
Sinh số ngẫu nhiên

Làm thế nào:

Arduino cung cấp các hàm đơn giản để tạo số ngẫu nhiên: randomSeed()random(). Để bắt đầu, hãy khởi tạo bộ sinh số ngẫu nhiên để đảm bảo các dãy số khác nhau mỗi lần chương trình của bạn thực thi. Một phương pháp thường được sử dụng là khởi tạo với một đọc analog từ một chân không kết nối.

void setup() {
  Serial.begin(9600);
  // Khởi tạo giá trị hạt giống ngẫu nhiên
  randomSeed(analogRead(0));
}

void loop() {
  // Tạo một số ngẫu nhiên từ 0 đến 99
  int randomNumber = random(100);
  Serial.println(randomNumber);
  delay(1000); // Đợi một giây để dễ đọc kết quả
}

Chương trình trên khởi tạo máy phát số ngẫu nhiên trong hàm setup() và tạo ra một số mới từ 0 đến 99 trong mỗi lần lặp, xuất số đó ra Màn hình Nối tiếp.

Kết quả mẫu:

42
17
93
...

Tìm hiểu sâu

Hàm random() của Arduino bên dưới sử dụng máy phát số ngẫu nhiên giả (PRNG), theo dõi một dãy xác định nhưng trông như thống kê ngẫu nhiên. Giá trị ban đầu, hay giá trị hạt giống, của dãy ảnh hưởng đáng kể đến sự không dự đoán được của nó, do đó việc sử dụng chung randomSeed() với một đầu vào khá ngẫu nhiên là một điểm khởi đầu. Quan trọng là lưu ý rằng tính ngẫu nhiên được tạo ra bởi Arduino là đủ cho hầu hết các dự án của người hâm mộ nhưng có thể không đáp ứng được tiêu chí cho các ứng dụng bảo mật cao do tính dự đoán được của nó theo thời gian. Đối với các mục đích mật mã học, nên xem xét các thuật toán phức tạp hơn và máy phát số ngẫu nhiên phần cứng (HRNGs), có thể cung cấp tính ngẫu nhiên thực sự bằng cách sử dụng các quá trình vật lý.