Итак, я ПОЛНЫЙ и полный новичок в программировании. Я сделал некоторые базовые вещи для Arduinos (буквально переключая светодиоды и отображая что-то на LCD), и я пытаюсь самостоятельно научиться программировать на C. Я по профессии аппаратный инженер, но меня беспокоит, что я не могу Если у вас есть какие-либо вопросы в отношении прошивки / программного обеспечения, то вечерних курсов для этого нет, и я бы хотел расширить свои карьерные возможности. Я изо всех сил пытаюсь понять, как некоторые из этих команд идут вместе и столкнулись с проблемой, которую я просто не могу понять, почему она не работает.
Итак, у меня есть вход и выход. Мой вывод переключает ворота FET, который включает светодиод. Вход поступает из логического элемента И Итак, мой светодиод всегда включен, и когда я получаю входной сигнал от логического элемента И (2 условия были выполнены), я хочу, чтобы выход (переключение светодиода) стал НИЗКИМ (выключить светодиод. Поскольку выход также подключен к один из входов AND, это также повернет входной сигнал НИЗКИМ.
Что я хочу сделать: я просто хочу прочитать входные данные как «условия выполнены» и выключить светодиод. Затем он должен быть выключен на 1 секунду и снова включен. Если вход снова становится ВЫСОКИМ, процесс повторяется. Я использую простое нажатие для переключения в качестве другого входа логического элемента И и измерил, что выход (вход MCU) становится высоким при нажатии кнопки, но переключение (выход) светодиода не выключается. Мой код (я думаю) чертовски прост, но, очевидно, я что-то не правильно понимаю, потому что он просто не работает.
Вот код, который я использую:
#include "mbed.h"
DigitalIn ip(D7);
DigitalOut op(D8);
int main() {
if (ip == 1){
op = 0;
wait (1.0);
op = 1;
}else{
op = 1;
}
}
И мне это кажется логичным. В обычном состоянии выход ВЫСОКИЙ. Если на вход поступает сигнал от логического элемента И, светодиод выключится на 1 секунду, а затем снова включится.
Что я сделал не так, потому что это выглядит логичным способом сделать это, и я просто не могу понять, почему это не работает?
Если это поможет, я использую Nucleo F103RB. Когда я использую «мигающий» код и просто так включаю и выключаю светодиод, он работает нормально, только когда я добавляю «если», он идет не так.
Это упрощенная схема:
смоделировать эту схему - схема, созданная с использованием CircuitLab
PS Я знаю, что я не добавил их в схему, но у вентилей AND есть резисторы понижающего напряжения на входах и выходах.
DigitalIn
уже включает volatile
.