đây là bài tớ làm lại cho các bạn tham khảo, mình dùng INPUT_PULLUP nhé int ct=2; int led=4; void setup() { pinMode(ct,INPUT_PULLUP); pinMode(led,OUTPUT); digitalWrite(led,LOW); Serial.begin(9600); } void loop() { int trangthai=digitalRead(ct); int ttled=digitalRead(led); Serial.println(trangthai); if(trangthai==0){ digitalWrite(led,!ttled); } delay(200); }
Dùng cách giải này bị sai bạn ạ. Vì nếu trường hợp nút nhấn vẫn đang giữ chưa kịp nhả ra, thì đèn lại nhấp nháy. Nên giải bài toán nút nhấn hoán đổi trạng thái này theo hàm if-else. Nhưng sẽ đếm tổng số lần nhấn nút, nếu tổng số lần chia cho 2 dư (số lẻ) --> thì đèn sáng, và ngược lại số chẵn thì đèn tắt.
cái lệnh là if trangthai=1 kìa. Giả sử đèn đang tắt thì mình nhấn nút cái cho nó sáng lên rồi buông nút ra khi đó thì trạng thái lại về 0 ko cần biết điều kiện sau đúng hay ko nhưng trạng thái về 0(buông công tắc nên về 0) tức là ko đâp ứng cái lenh if nên nó lại ko cấp điện. Nghĩa là mỗi lần nhấn nút cái đèn led chỉ nháy sáng lên rồi tắt vì sáng lên thì điều kiện if ko còn đáp ứng nên nó lại ngắt điện. Nên chỉ nháy sáng rồi tắt mỗi khi nhấn
int congtac=3; int led=2; int ledsang=0; void setup() { pinMode(congtac, INPUT_PULLUP); pinMode(led, OUTPUT); Serial.begin(9600); digitalWrite(led, LOW); } void loop() { int trangthai=digitalRead(congtac); if(trangthai==0) { digitalWrite(led, !ledsang); delay(500); ledsang=!ledsang; } } em viết gọn vào ntn có bị thay đổi gì so với cấu trúc của a không ạ
cái lệnh là if trangthai=1 kìa. Giả sử đèn đang tắt thì mình nhấn nút cái cho nó sáng lên rồi buông nút ra khi đó thì trạng thái lại về 0 ko cần biết điều kiện sau đúng hay ko nhưng trạng thái về 0(buông công tắc nên về 0) tức là ko đâp ứng cái lenh if nên nó lại ko cấp điện. Nghĩa là mỗi lần nhấn nút cái đèn led chỉ nháy sáng lên rồi tắt vì sáng lên thì điều kiện if ko còn đáp ứng nên nó lại ngắt điện. Nên chỉ nháy sáng rồi tắt mỗi khi nhấn. Giải đáp giúp em vs ạ
làm điều khiển đọc thẻ từ khi quet thẻ rồi dọc ten nhân viên hay làm cho con nít tập học nói di anh e cảm ơn , chúc kenh a phat triển, kênh rất hay lượng view it nhung có giá trị cao cố lên anh
anh ơi, thay vì chống dội phím bằng Delay như anh thì em muốn bấm nút xong nhả ra nó mới bắt đầu lặp lại để xét trạng thái thì làm thế nào à em đã thử sử dụng while(trangthai==1){}; nhưng ko được ạ mong anh giúp em, em cảm ơn
chào bạn, mình có làm khoảng 8 hiệu ứng 5 led bằng 8 chương trình con. Lấy nút nhấn để chuyển đổi hiệu ứng. Nhấn lần đầu tiên thì nút nhấn thay đổi 0-1 rất nhanh, nhưng nhấn lần 2 để chuyển hiệu ứng thì lúc được lúc không (hoặc nhấn giữ khá lâu , vài giây gì đó, mặc dù mình cho delay nhấn 200ms). Không biết nguyên nhân ở đâu, mong bạn phản hồi
sao anh dùng 2 biến trạng thái cho led vậy ? EM dùng 1 biến cũng đc mà a int but = 5; int led = 4; void setup() { pinMode(led, OUTPUT); pinMode(but, INPUT); digitalWrite(led, LOW); Serial.begin(9600); } void loop() { int ttbut = digitalRead(but); int ttled = digitalRead(led); if(ttbut == 1){ digitalWrite(led, !ttled); delay(500); } }
dựa vô bài này e hiểu đc nguyên lý 2 công tắc 1 bóng thường đc mắc ở cầu thang :))), cảm ơn thầy nhiều
đây là bài tớ làm lại cho các bạn tham khảo, mình dùng INPUT_PULLUP nhé
int ct=2;
int led=4;
void setup() {
pinMode(ct,INPUT_PULLUP);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
Serial.begin(9600);
}
void loop() {
int trangthai=digitalRead(ct);
int ttled=digitalRead(led);
Serial.println(trangthai);
if(trangthai==0){
digitalWrite(led,!ttled);
}
delay(200);
}
int button = 2;
int led = 3;
int Led_status = 0;
void setup()
{
pinMode(button, INPUT);
pinMode(3,OUTPUT);
digitalWrite(3,LOW);
Serial.begin(9600);
}
void loop()
{
int Status = digitalRead(button);
Serial.println(Status);
if(Status == 1){
digitalWrite(led, !Led_status);
Led_status = !Led_status;
}
}
em làm giống thầy mà bật lên ko tắt được nên em sửa đoạn if bỏ trạng thái đèn đi chỉ xét trạng thái nút thôi thì lại được 😂😂
Dùng cách giải này bị sai bạn ạ. Vì nếu trường hợp nút nhấn vẫn đang giữ chưa kịp nhả ra, thì đèn lại nhấp nháy. Nên giải bài toán nút nhấn hoán đổi trạng thái này theo hàm if-else. Nhưng sẽ đếm tổng số lần nhấn nút, nếu tổng số lần chia cho 2 dư (số lẻ) --> thì đèn sáng, và ngược lại số chẵn thì đèn tắt.
a nói rõ được hong ạ
cái lệnh là if trangthai=1 kìa. Giả sử đèn đang tắt thì mình nhấn nút cái cho nó sáng lên rồi buông nút ra khi đó thì trạng thái lại về 0 ko cần biết điều kiện sau đúng hay ko nhưng trạng thái về 0(buông công tắc nên về 0) tức là ko đâp ứng cái lenh if nên nó lại ko cấp điện. Nghĩa là mỗi lần nhấn nút cái đèn led chỉ nháy sáng lên rồi tắt vì sáng lên thì điều kiện if ko còn đáp ứng nên nó lại ngắt điện. Nên chỉ nháy sáng rồi tắt mỗi khi nhấn
int congtac=3;
int led=2;
int ledsang=0;
void setup()
{
pinMode(congtac, INPUT_PULLUP);
pinMode(led, OUTPUT);
Serial.begin(9600);
digitalWrite(led, LOW);
}
void loop()
{
int trangthai=digitalRead(congtac);
if(trangthai==0)
{
digitalWrite(led, !ledsang);
delay(500);
ledsang=!ledsang;
}
}
em viết gọn vào ntn có bị thay đổi gì so với cấu trúc của a không ạ
Đủ mới đc. Còn gọn thì k
cái lệnh là if trangthai=1 kìa. Giả sử đèn đang tắt thì mình nhấn nút cái cho nó sáng lên rồi buông nút ra khi đó thì trạng thái lại về 0 ko cần biết điều kiện sau đúng hay ko nhưng trạng thái về 0(buông công tắc nên về 0) tức là ko đâp ứng cái lenh if nên nó lại ko cấp điện. Nghĩa là mỗi lần nhấn nút cái đèn led chỉ nháy sáng lên rồi tắt vì sáng lên thì điều kiện if ko còn đáp ứng nên nó lại ngắt điện. Nên chỉ nháy sáng rồi tắt mỗi khi nhấn. Giải đáp giúp em vs ạ
làm điều khiển đọc thẻ từ khi quet thẻ rồi dọc ten nhân viên hay làm cho con nít tập học nói di anh
e cảm ơn , chúc kenh a phat triển, kênh rất hay lượng view it nhung có giá trị cao cố lên anh
Thầy cho em hỏi tại sao giữa 2 chương trình 1 lúc nút nhấn ==1 và 1 lúc nút nhấn ==0
anh ơi, thay vì chống dội phím bằng Delay như anh thì em muốn bấm nút xong nhả ra nó mới bắt đầu lặp lại để xét trạng thái thì làm thế nào à
em đã thử sử dụng while(trangthai==1){}; nhưng ko được ạ
mong anh giúp em, em cảm ơn
code như nào để dù nhả nút bấm ra mà led vẫn sấng vậy ạ
b làm ra chưa ạ? nếu ra rồi chỉ mình nữa.
@@technologicalprocess-1251 mình dùng 2 đèn bạn ạ 😅
chào bạn, mình có làm khoảng 8 hiệu ứng 5 led bằng 8 chương trình con. Lấy nút nhấn để chuyển đổi hiệu ứng. Nhấn lần đầu tiên thì nút nhấn thay đổi 0-1 rất nhanh, nhưng nhấn lần 2 để chuyển hiệu ứng thì lúc được lúc không (hoặc nhấn giữ khá lâu , vài giây gì đó, mặc dù mình cho delay nhấn 200ms). Không biết nguyên nhân ở đâu, mong bạn phản hồi
2 năm rồi vẫn ch ai phản hồi cho b:))
@@anLinh-zs2lr thế là bỏ luôn, ko có nhúng nhiếc gì nữa😅
sao anh dùng 2 biến trạng thái cho led vậy ? EM dùng 1 biến cũng đc mà a
int but = 5;
int led = 4;
void setup()
{
pinMode(led, OUTPUT);
pinMode(but, INPUT);
digitalWrite(led, LOW);
Serial.begin(9600);
}
void loop()
{
int ttbut = digitalRead(but);
int ttled = digitalRead(led);
if(ttbut == 1){
digitalWrite(led, !ttled);
delay(500);
}
}
Người mới kho hiểu e.
Cho em hỏi , tại sao cái lỗi xuất hiện ở dòng đỏ mà sao anh lại phát hiện lỗi ở " ledssang" hay vậy
Do khai báo biến thôi bạn. ledsang và ledssang dư chữ s
Không ghi serial.begin dc k anh
Dc bạn. Nhưng không in thông tỉna serial để xem đc.
Thay vì nhấn nút để thay đổi trạng thái. Muốn giữ nút nhấn trong 5s 10s 15s để thay đổi trạng thái của led thì làm như nào ạ
Khi bắt đầu nhấn bạn gán biến thoigain=millis();
Nếu millis()-thoigian là bội của 5000 hoặc 10000 hoặc 15000 thì tiến hành đổi trạng thái.