Ba tùy chọn mà tôi suy nghĩ:
1) End void loop()
với while(1)
... hoặc tương đương như tốt ... while(true)
void loop(){
//the code you want to run once here,
//e.g., If (blah == blah)...etc.
while(1) //last line of main loop
}
Tùy chọn này chạy mã của bạn một lần và sau đó đá Ard vào vòng lặp vô hình "vô hình". Có lẽ không phải là cách tốt nhất để đi, nhưng theo như xuất hiện bên ngoài, nó được công việc làm.
Ard sẽ tiếp tục vẽ hiện tại trong khi nó quay chính nó trong một vòng tròn vô tận ... có lẽ người ta có thể thiết lập một loại hẹn giờ chức năng đặt Ard ngủ sau rất nhiều giây, phút, v.v. looping ... chỉ là một ý nghĩ ... chắc chắn có thư viện ngủ khác nhau ở đó ... xem ví dụ, Monk, Lập trình Arduino: Bước tiếp theo, pgs., 85-100 để thảo luận thêm về điều này.
Thứ hai) Tạo chức năng "dừng vòng lặp chính" với điều khiển có điều kiện cấu trúc làm cho thử nghiệm ban đầu của nó thất bại trong lần vượt qua thứ hai.
Điều này thường đòi hỏi phải khai báo một biến toàn cầu và có chức năng " " dừng vòng lặp chính "chuyển đổi giá trị của biến khi chấm dứt. Ví dụ:
boolean stop_it = false; //global variable
void setup(){
Serial.begin(9600);
//blah...
}
boolean stop_main_loop(){ //fancy stop main loop function
if(stop_it == false){ //which it will be the first time through
Serial.println("This should print once.");
//then do some more blah....you can locate all the
// code you want to run once here....eventually end by
//toggling the "stop_it" variable ...
}
stop_it = true; //...like this
return stop_it; //then send this newly updated "stop_it" value
// outside the function
}
void loop{
stop_it = stop_main_loop(); //and finally catch that updated
//value and store it in the global stop_it
//variable, effectively
//halting the loop ...
}
Được cấp, điều này có thể không đặc biệt đẹp, nhưng nó cũng hoạt động.
Nó đá Ard vào vòng lặp vô hình "vô hình" khác, nhưng thời gian này là trường hợp liên tục kiểm tra các điều kiện if(stop_it == false)
trong stop_main_loop()
mà tất nhiên không vượt qua mọi lần sau lần đầu tiên.
3rd) Một lần nữa có thể sử dụng biến toàn cục nhưng sử dụng cấu trúc if (test == blah){}
đơn giản thay vì chức năng "dừng vòng chính" ưa thích.
boolean start = true; //global variable
void setup(){
Serial.begin(9600);
}
void loop(){
if(start == true){ //which it will be the first time through
Serial.println("This should print once.");
//the code you want to run once here,
//e.g., more If (blah == blah)...etc.
}
start = false; //toggle value of global "start" variable
//Next time around, the if test is sure to fail.
}
Chắc chắn có những cách khác để "stop" mà pesky vô tận vòng lặp chính nhưng ba cũng như những người đã được đề cập nên giúp bạn bắt đầu.
Làm cách nào để ngăn chặn bộ xử lý? – Brent
@Brent: Bằng cách tắt ngắt và đưa bộ xử lý vào trạng thái ngủ. Bạn có thể bọc nó trong một vòng lặp vô hạn để thực hiện chắc chắn hơn không bao giờ tiếp tục. –
Tôi nghĩ rằng "return" sẽ làm như vậy –