Jestem więc ZUPEŁNYM i kompletnym nowicjuszem w programowaniu. Zrobiłem kilka podstawowych rzeczy na Arduinos (dosłownie przełączając diody LED i wyświetlając coś na wyświetlaczu LCD) i staram się samemu nauczyć się programowania w C. Z zawodu jestem inżynierem sprzętu, ale przeszkadza mi, że nie mogę zrobić jakąkolwiek stronę oprogramowania / oprogramowania i nie ma wieczornych kursów, aby tego nauczyć, i chciałbym rozwinąć opcje kariery. Próbuję zrozumieć, w jaki sposób niektóre z tych poleceń idą w parze i napotkałem problem, którego po prostu nie mogę zrozumieć, dlaczego to nie działa.
Mam więc wejście i wyjście. Moje wyjście to przełączanie bramki FET, która włącza diodę LED. Dane wejściowe pochodzą z bramki AND. Tak więc moja dioda LED jest zawsze włączona, a gdy otrzymam sygnał wejściowy z bramki AND (spełnione są 2 warunki), chcę, aby wyjście (przełączanie diody LED) było NISKIE (wyłącz diodę. Ponieważ wyjście jest również podłączone do jedno z wejść AND, spowoduje to również zmianę sygnału wejściowego na NISKI.
Co chcę zrobić: chcę tylko odczytać wejście jako „spełnione warunki” i wyłączyć diodę LED. Następnie należy go wyłączyć na 1 sekundę i włączyć ponownie. Jeśli sygnał wejściowy ponownie stanie się WYSOKI, proces się powtarza. Używam prostego przycisku, aby zrobić przełącznik jako inne wejście bramki AND i zmierzyłem, że wyjście (wejście MCU) idzie wysoko po naciśnięciu przycisku, ale przełącznik LED (wyjście) nie wyłącza się. Mój kod jest (myślę) dość cholernie prosty, ale najwyraźniej nie rozumiem czegoś poprawnie, ponieważ to po prostu nie działa.
Oto kod, którego używam:
#include "mbed.h"
DigitalIn ip(D7);
DigitalOut op(D8);
int main() {
if (ip == 1){
op = 0;
wait (1.0);
op = 1;
}else{
op = 1;
}
}
I wydaje mi się to logiczne. W zwykłym stanie sygnał wyjściowy jest WYSOKI. Jeśli wejście otrzyma sygnał z bramki AND, dioda LED zgaśnie na 1 sekundę, a następnie ponownie się zaświeci.
Co zrobiłem źle, ponieważ wygląda to na logiczny sposób i po prostu nie rozumiem, dlaczego to nie działa?
Jeśli to pomoże, używam Nucleo F103RB. Kiedy używam kodu „mrugania” i po prostu włączam i wyłączam diodę LED w ten sposób, działa to dobrze, to tylko wtedy, gdy dodam instrukcję „if”, że idzie źle.
To jest uproszczony obwód:
symulacja tego obwodu - Schemat utworzony przy użyciu CircuitLab
PS Wiem, że nie dodałem ich do schematu, ale bramki AND mają rozwijane rezystory na wejściach i wyjściach.
DigitalIn
zawiera już volatile
.