Ich bin also ein VOLLSTÄNDIGER und absoluter Anfänger im Programmieren. Ich habe einige grundlegende Dinge mit Arduinos gemacht (buchstäblich LEDs umschalten und etwas auf einem LCD anzeigen) und ich versuche mir selbst beizubringen, wie man in C programmiert. Ich bin von Beruf Hardware-Ingenieur, aber es stört mich, dass ich nicht kann Machen Sie eine der Firmware- / Software-Seiten und es gibt keine Abendkurse, um sie zu unterrichten, und ich möchte meine Karriereoptionen fördern. Ich habe Probleme zu verstehen, wie einige dieser Befehle zusammenpassen, und bin auf ein Problem gestoßen, bei dem ich einfach nicht verstehen kann, warum es nicht funktioniert.
Ich habe also eine Eingabe und eine Ausgabe. Mein Ausgang schaltet das Gate eines FET um, der eine LED einschaltet. Der Eingang kommt von einem UND-Gatter. Meine LED leuchtet also immer und wenn ich ein Eingangssignal vom UND-Gatter erhalte (2 Bedingungen wurden erfüllt), soll der Ausgang (LED-Umschalter) auf LOW gehen (LED ausschalten. Da der Ausgang auch angeschlossen ist) Bei einem der UND-Eingänge wird auch das Eingangssignal auf LOW gestellt.
Was ich tun möchte: Ich möchte nur die Eingabe als "Bedingungen erfüllt" lesen und die LED ausschalten. Es sollte dann 1 Sekunde lang ausgeschaltet und wieder eingeschaltet sein. Wenn die Eingabe wieder auf HIGH geht, wird der Vorgang wiederholt. Ich benutze einen einfachen Druck, um den Schalter als anderen UND-Gatter-Eingang zu betätigen, und habe gemessen, dass der Ausgang (MCU-Eingang) hoch geht, wenn die Taste gedrückt wird, aber der LED-Schalter (Ausgang) nicht ausgeschaltet wird. Mein Code ist (glaube ich) verdammt einfach, aber ich verstehe etwas offensichtlich nicht richtig, da es einfach nicht funktioniert.
Das ist also der Code, den ich benutze:
#include "mbed.h"
DigitalIn ip(D7);
DigitalOut op(D8);
int main() {
if (ip == 1){
op = 0;
wait (1.0);
op = 1;
}else{
op = 1;
}
}
Und das scheint mir logisch. Im Normalzustand ist der Ausgang HIGH. Wenn der Eingang das Signal vom UND-Gatter erhält, erlischt die LED 1 Sekunde lang und leuchtet dann wieder auf.
Was habe ich falsch gemacht, da dies logisch aussieht und ich einfach nicht verstehen kann, warum das nicht funktioniert?
Wenn es hilft, verwende ich den Nucleo F103RB. Wenn ich den "Blink" -Code verwende und die LED einfach so ein- und ausschalte, funktioniert das einwandfrei. Nur wenn ich die "if" -Anweisung hinzufüge, geht das schief.
Dies ist die vereinfachte Schaltung:
simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab
PS Ich weiß, dass ich sie nicht im Schaltplan hinzugefügt habe, aber die UND-Gatter haben Pulldown-Widerstände an den Ein- und Ausgängen.
DigitalIn
bereits enthält volatile
.