Vì vậy, tôi là một người hoàn thành và hoàn toàn mới làm quen với lập trình. Tôi đã thực hiện một số nội dung cơ bản trên Arduinos (nghĩa là bật đèn LED và hiển thị thứ gì đó trên màn hình LCD) và tôi đang cố gắng tự dạy mình cách lập trình trong C. Tôi là một kỹ sư phần cứng bằng thương mại, nhưng điều đó làm phiền tôi rằng tôi không thể làm bất kỳ phần mềm / phần mềm nào và không có khóa học buổi tối nào để dạy nó, và tôi muốn tiếp tục các lựa chọn nghề nghiệp của mình. Tôi đang đấu tranh để hiểu làm thế nào một số các lệnh này đi cùng nhau và đã gặp phải một vấn đề mà tôi không thể hiểu được tại sao nó không hoạt động.
Vì vậy, tôi có một đầu vào và đầu ra. Đầu ra của tôi là bật cổng FET để bật đèn LED. Đầu vào đến từ một cổng AND. Vì vậy, đèn LED của tôi luôn sáng và khi tôi nhận được tín hiệu đầu vào từ cổng AND (đã đáp ứng 2 điều kiện), tôi muốn đầu ra (chuyển đổi LED) ở mức THẤP (tắt đèn LED. Vì đầu ra cũng được kết nối với một trong những đầu vào AND, điều này cũng sẽ biến tín hiệu đầu vào THẤP.
Điều tôi muốn làm: Tôi chỉ muốn đọc đầu vào là 'điều kiện được đáp ứng' và tắt đèn LED. Sau đó nên tắt trong 1 giây và bật lại. Nếu đầu vào trở lại CAO, quá trình lặp lại. Tôi đang sử dụng một nút ấn đơn giản để thực hiện chuyển đổi như đầu vào cổng AND khác và đã đo rằng đầu ra (đầu vào MCU) tăng cao khi nhấn nút, nhưng đèn LED bật (đầu ra) sẽ không tắt. Mã của tôi là (tôi nghĩ) khá đơn giản, nhưng rõ ràng tôi không hiểu một cái gì đó chính xác vì nó không hoạt động.
Vì vậy, đây là mã tôi đang sử dụng:
#include "mbed.h"
DigitalIn ip(D7);
DigitalOut op(D8);
int main() {
if (ip == 1){
op = 0;
wait (1.0);
op = 1;
}else{
op = 1;
}
}
Và với tôi, điều đó có vẻ hợp lý. Ở trạng thái thông thường, đầu ra là CAO. Nếu đầu vào nhận được tín hiệu từ cổng AND, đèn LED sẽ tắt trong 1 giây, sau đó bật lại.
Tôi đã làm gì sai vì nó trông giống như cách hợp lý để làm điều đó và tôi không thể hiểu tại sao điều đó không hiệu quả?
Nếu nó giúp, tôi đang sử dụng Nucleo F103RB. Khi tôi sử dụng mã 'nhấp nháy' và chỉ bật và tắt đèn LED như vậy, nó sẽ hoạt động tốt, chỉ khi tôi thêm câu lệnh 'nếu' thì nó bị lỗi.
Đây là mạch đơn giản hóa:
mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab
PS Tôi biết tôi đã không thêm chúng vào sơ đồ, nhưng cổng AND có điện trở kéo xuống trên đầu vào và đầu ra.
DigitalIn
đã bao gồm volatile
.