Code vi điều khiển về Nút nhấn với vòng lặp while

Các anh/chị/bạn cho mình hỏi, khi mình học vi điều khiển có 1 bài tập như thế này:

Ấn nút On đèn sáng, ấn Off đèn tắt.

Theo mình biết thì nút nhấn sau khi ấn trạng thái sẽ tích cực mức thấp nhưng khi thả ra sẽ quay lại mức 1. Minh code như này

while(!input(on)) {...}

vậy khi thả tay ra điều kiện trong while sẽ không đúng nữa thì chương trình không chạy. nhưng sao kết quả ra vẫn đúng đèn vẫn sáng?

PS1: Tiện thể cho mình hỏi thêm khi nào chúng ta sử dụng lệnh while(); (có chấm phẩy) vậy?

PS2: À 1 câu nữa nhé, theo mình biết thì khi nhập biến chúng ta chưa gán giá trị cho nó thì nó là 1 giá trị ngẫu nhiên hay giá trị rác. Vậy tại sao trong 1 bài tập mẫu đại khái như này

int dem;
...
void abc() {
    if(dem<10) 
        ...
    if(dem<5)
        ...
    else (dem=0; ...)
}

Tại sao khi chạy trên kit nó vẫn chạy đúng từ đầu đến cuối? Có phải do IDE của em dùng mặc định là khi mình chưa gán gì thì biến đó = 0, hay là vừa chạy thì do tất cả điều kiện sai nên nó nhảy vào else cho = 0 rồi mới chạy lại?

Cám ơn mọi người

1… Tích cực 0 hay 1 là do thiết kế mạch.
2… Khi điều kiện không đúng thì nó không chạy code trong {} mà bỏ qua và chạy các lệnh dưới. Do không gặp chỗ clear nên nó cứ giữ sáng như thế.
3… Dùng while(codition); là để chương trình chờ ở đấy đến khi codition sai.
4… hỏi không rõ :smile:

1 Like

Cám ơn anh, anh cho em hỏi chỗ clear là gì được không?
Còn câu dưới em hỏi ý là tại sao em chưa gán giá trị cho biến mà khi chạy chương trình nó vẫn đúng. Có phải do phần mềm viết code của em nó mặc đinh giá trị chưa gán = 0 không?

Set là cách gọi của việc gán giá trị của 1 bit hoặc 1 IO hoặc Flag (cờ) lên mức tích cực ( thường là 1).
Còn Clear thì ngược lại, tức là gán về 0.

Việc IDE tự gán biến = 0 thì mình không rõ là có iDE như vậy không. Nhưng những IDE mình đã dùng qua (khoảng 5 IDE) thì không cái nào gán = 0 cả.
Tức là nếu không set lúc khởi tạo thì nó có giá trị ngẫu nhiên.

Việc chương trình của bạn chạy đúng cũng có thể do ngẫu nhiên. Hoặc nó đã gán dem = 0 tại else cuối cùng (lần đầu có thể bị sai nhưng sau thì đúng)

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?