Sử dụng Arduino cho hiệu ứng ánh sáng đồng thời


7

Tôi đang xây dựng một máy tính cho con trai tôi (tôi). Tôi đang cố gắng khơi dậy sự quan tâm của anh ấy đối với công nghệ máy tính, vì vậy ý ​​tưởng của tôi là điều khiển nhiều hiệu ứng ánh sáng trường hợp bằng bộ vi xử lý hoặc bộ điều khiển. Tôi đã đi với arduino qua pi vì sự đơn giản của hệ thống.

Có một số hiệu ứng ánh sáng tôi muốn lái xe, đồng thời, và đó là nơi tôi tự hỏi liệu arduino có phù hợp hay không, bởi vì các hiệu ứng này cần phải sử dụng độ trễ () và với nó là một luồng tôi đang vật lộn để tìm ra làm thế nào để làm cho mỗi đầu ra hoạt động độc lập.

Để cung cấp cho bạn ý tưởng về những gì vi điều khiển cần để lái đồng thời:

  1. Mẫu nhấp nháy sử dụng các giá trị độ trễ ngẫu nhiên cho ánh sáng trường hợp bên ngoài
  2. Mô hình nhịp tim cho khối làm mát CPU
  3. Ánh sáng đèn LED đen / UV cho dòng làm mát.
  4. Đèn LED nhấp nháy nhắm vào người hâm mộ để làm cho họ trông đứng yên.

Cố gắng chạy tất cả các hiệu ứng này trong một vòng lặp tuyến tính với các toán tử delay () dường như không khả thi.

Tôi có cần lấy UNO cho mỗi hiệu ứng không? Hoặc có cách nào để làm cho các đầu ra này hoạt động độc lập?

Câu trả lời:


6

Tránh trì hoãn () và sử dụng thời gian cụ thể của các hành động tiếp theo và so sánh chúng với millis (). Trong một thời gian ngẫu nhiên, hãy đặt một cái gì đó như:

now=millis();
...
if(nextFlicker < now) {
   toggleFlicker();
   nextFlicker=now+random(10000);
}
if(nextPulse < now) {
   nextPulse=now+ isPulseOn? 100 : 1000 ;
   togglePulse();
}

...

Nếu bạn đang chạy quá thời gian cuộn hơn 50 ngày của millis (), bạn có thể cần một chút cẩn thận để xử lý các lỗi tràn. Xem http://playground.arduino.cc/Code/TimingRollover

Đối với các đèn led nhấp nháy, hãy điều tra các đầu ra đầu ra được điều khiển bằng bộ đếm thời gian.


2

Dựa trên mẫu đúng thời gian, thay vì sử dụng độ trễ. Ví dụ, nếu thời gian hiện tại tính bằng giây nếu lẻ, đèn led sẽ sáng. Nếu nó thậm chí nó sẽ được tắt. Điều này tạo ra một hiệu ứng led nhấp nháy mà không sử dụng bất kỳ độ trễ.

Một số mã ví dụ:

long seconds = millis()/1000;
if( (seconds % 2)==0 )// even
  digitalWrite(led, HIGH);
else // odd
  digitalWrite(led, LOW);

Ví dụ, để nó nhấp nháy nhanh hơn, thay đổi 1000giá trị thấp hơn.

Ví dụ: để làm cho đèn led ngắn hơn thay đổi %2thành ví dụ %4( ví dụ: 1 giây bật, tắt 3 giây)

Vân vân.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.