Então, eu sou um novato completo e absoluto na programação. Eu fiz algumas coisas básicas em Arduinos (alternando literalmente LEDs e exibindo algo em um LCD) e estou tentando me ensinar como programar em C. Sou engenheiro de hardware, mas me incomoda que não consiga faça qualquer parte do firmware / software e não há cursos noturnos para ensiná-lo, e gostaria de aprimorar minhas opções de carreira. Estou lutando para entender como alguns desses comandos se encaixam e se deparam com um problema que simplesmente não consigo entender por que não está funcionando.
Então, eu tenho uma entrada e uma saída. Minha saída está alternando o portão de um FET que acende um LED. A entrada é proveniente de um portão AND. Assim, meu LED está sempre aceso e, quando recebo um sinal de entrada da porta AND (duas condições foram atendidas), quero que a saída (alternância de LED) fique LOW (desligue o LED. Como a saída também está conectada a uma das entradas AND, isso também tornará o sinal de entrada LOW.
O que eu quero fazer: Eu só quero ler a entrada como 'condições atendidas' e desligar o LED. Ele deve ser desligado por 1 segundo e ligado novamente. Se a entrada for ALTA novamente, o processo será repetido. Estou usando um simples toque para fazer a troca como a outra entrada AND e medi que a saída (entrada MCU) fica alta quando o botão é pressionado, mas a alternância do LED (saída) não se apaga. Meu código é (acho) bem simples, mas claramente não entendo algo corretamente, pois simplesmente não está funcionando.
Portanto, este é o código que estou 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;
}
}
E para mim, isso parece lógico. No estado usual, a saída é ALTA. Se a entrada receber o sinal da porta AND, o LED se apagará por 1 segundo e depois acenderá novamente.
O que fiz de errado, pois parece a maneira lógica de fazê-lo e simplesmente não consigo entender por que isso não funciona?
Se ajudar, estou usando o Nucleo F103RB. Quando uso o código 'piscar' e apenas acendo e apagando o LED dessa maneira, ele funciona bem; é apenas quando adiciono a instrução 'if' que dá errado.
Este é o circuito simplificado:
simular este circuito - esquemático criado usando o CircuitLab
PS: Sei que não os adicionei no esquema, mas os portões AND têm resistores de pulldown nas entradas e saídas.
DigitalIn
já inclua volatile
.