Quindi, sono un principiante COMPLETO ed assolutamente programmatore. Ho fatto alcune cose di base sugli Arduinos (letteralmente alternando i LED e mostrando qualcosa su un LCD) e sto cercando di auto-insegnarmi come programmare in C. Sono un ingegnere hardware di professione, ma mi dà fastidio che non posso fare qualsiasi parte del firmware / software e non ci sono corsi serali per insegnarlo, e vorrei migliorare le mie opzioni di carriera. Faccio fatica a capire come alcuni di questi comandi vanno insieme e si sono imbattuti in un problema che non riesco proprio a capire perché non funziona.
Quindi, ho un input e un output. La mia uscita sta attivando il gate di un FET che accende un LED. L'ingresso proviene da un gate AND. Quindi, il mio LED è sempre acceso e quando ricevo un segnale di ingresso dalla porta AND (sono state soddisfatte 2 condizioni) voglio che l'uscita (interruttore a LED) diventi BASSA (spengo il LED. Poiché anche l'uscita è collegata a uno degli ingressi AND, questo trasformerà anche il segnale di ingresso BASSO.
Cosa voglio fare: voglio solo leggere l'ingresso come "condizioni soddisfatte" e spegnere il LED. Dovrebbe quindi essere spento per 1 secondo e riaccendere. Se l'ingresso torna di nuovo ALTO, il processo si ripete. Sto usando una semplice spinta per fare il cambio come l'altro ingresso della porta AND e ho misurato che l'uscita (ingresso MCU) diventa alta quando si preme il pulsante, ma il LED (uscita) non si spegne. Il mio codice è (penso) dannatamente semplice, ma chiaramente non capisco qualcosa di corretto in quanto semplicemente non funziona.
Quindi questo è il codice che sto 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 a me sembra logico. Nel solito stato, l'uscita è ALTA. Se l'ingresso riceve il segnale dalla porta AND, il LED si spegne per 1 secondo, quindi si riaccende.
Che cosa ho fatto di sbagliato in quanto sembra il modo logico per farlo e non riesco proprio a capire perché non funziona?
Se aiuta, sto usando il Nucleo F103RB. Quando uso il codice "lampeggio" e accendo e spengo il LED in quel modo, funziona bene, è solo quando aggiungo l'istruzione "if" che va storto.
Questo è il circuito semplificato:
simula questo circuito - Schema creato usando CircuitLab
PS So di non averli aggiunti nello schema, ma le porte AND hanno resistori a discesa sugli ingressi e sull'uscita.
DigitalIn
includa già volatile
.