所以,我是一个完整的编程新手。我在 Arduinos 上做了一些基本的事情(字面意思是切换 LED 并在 LCD 上显示一些东西),我正在尝试自学如何用 C 编程。我是一名硬件工程师,但我不能做任何固件/软件方面的工作,没有晚上的课程可以教它,我想进一步选择我的职业。我正在努力理解其中一些命令是如何组合在一起的,并且遇到了一个我无法理解为什么它不起作用的问题。
所以,我有一个输入和一个输出。我的输出是切换打开 LED 的 FET 的栅极。输入来自与门。所以,我的 LED 一直亮着,当我从 AND 门(满足 2 个条件)获得输入信号时,我希望输出(LED 切换)变为低电平(关闭 LED。因为输出也连接到AND 输入之一,这也会将输入信号变为低电平。
我想要做什么:我只想将输入读取为“满足条件”并关闭 LED。然后它应该关闭 1 秒钟,然后重新打开。如果输入再次变为高电平,则重复该过程。我正在使用一个简单的按钮将开关作为另一个与门输入,并测量到按下按钮时输出(MCU 输入)变为高电平,但 LED 切换(输出)不会关闭。我的代码(我认为)非常简单,但显然我无法正确理解某些内容,因为它无法正常工作。
所以这是我正在使用的代码:
#include "mbed.h"
DigitalIn ip(D7);
DigitalOut op(D8);
int main() {
if (ip == 1){
op = 0;
wait (1.0);
op = 1;
}else{
op = 1;
}
}
对我来说,这似乎是合乎逻辑的。在通常状态下,输出为 HIGH。如果输入从与门得到信号,LED 将关闭 1 秒钟,然后再次打开。
我做错了什么,因为这看起来是合乎逻辑的做法,我只是不明白为什么这不起作用?
如果有帮助,我正在使用 Nucleo F103RB。当我使用“闪烁”代码并像这样打开和关闭 LED 时,它工作正常,只是当我添加“if”语句时它出错了。
这是简化的电路:
PS 我知道我没有在原理图中添加它们,但是与门在输入和输出上确实有下拉电阻。