Entonces, soy un principiante COMPLETO y absoluto en programación. He hecho algunas cosas básicas en Arduinos (literalmente encender LED y mostrar algo en una pantalla LCD) y estoy tratando de aprender por mí mismo cómo programar en C. Soy un ingeniero de hardware de oficio, pero me molesta que no pueda haga cualquier parte del firmware / software y no hay cursos nocturnos para enseñarlo, y me gustaría ampliar mis opciones de carrera. Me cuesta entender cómo algunos de estos comandos se juntan y se han topado con un problema que simplemente no puedo entender por qué no funciona.
Por lo tanto, tengo una entrada y una salida. Mi salida es alternar la puerta de un FET que enciende un LED. La entrada proviene de una puerta AND. Entonces, mi LED está siempre encendido, y cuando recibo una señal de entrada de la puerta AND (se han cumplido 2 condiciones) quiero que la salida (interruptor de LED) vaya hacia BAJA (apague el LED. Como la salida también está conectada a Una de las entradas AND, esto también hará que la señal de entrada sea BAJA.
Lo que quiero hacer: solo quiero leer la entrada como "condiciones cumplidas" y apagar el LED. Debería estar apagado durante 1 segundo y volver a encenderlo. Si la entrada se vuelve ALTA otra vez, el proceso se repite. Estoy usando un simple impulso para hacer el cambio como la otra entrada de la compuerta AND y he medido que la salida (entrada de MCU) se eleva cuando se presiona el botón, pero el interruptor de LED (salida) no se apagará. Mi código es (creo) bastante simple, pero claramente no entiendo algo correctamente, ya que simplemente no funciona.
Este es el código que estoy usando:
#include "mbed.h"
DigitalIn ip(D7);
DigitalOut op(D8);
int main() {
if (ip == 1){
op = 0;
wait (1.0);
op = 1;
}else{
op = 1;
}
}
Y para mí, eso parece lógico. En el estado habitual, la salida es ALTA. Si la entrada recibe la señal de la compuerta AND, el LED se apagará durante 1 segundo y luego se volverá a encender.
¿Qué es lo que he hecho mal, ya que parece ser la forma lógica de hacerlo y no puedo entender por qué no funciona?
Si ayuda, estoy usando el Nucleo F103RB. Cuando uso el código 'parpadear' y simplemente enciendo y apagando el LED de esa manera, funciona bien, es solo cuando agrego la declaración 'if' de que va mal.
Este es el circuito simplificado:
PD: Sé que no los agregué en el esquema, pero las puertas AND tienen resistencias desplegables en las entradas y salidas.