Jadi, saya seorang LENGKAP dan pemula di pemrograman. Saya telah melakukan beberapa hal dasar pada Arduinos (secara harfiah mengubah LED dan menampilkan sesuatu pada LCD) dan saya mencoba untuk belajar sendiri tentang cara memprogram dalam C. Saya seorang insinyur perangkat keras berdagang, tetapi itu mengganggu saya bahwa saya tidak bisa lakukan salah satu sisi firmware / perangkat lunak dan tidak ada kursus malam untuk mengajarkannya, dan saya ingin melanjutkan opsi karir saya. Saya berjuang untuk memahami bagaimana beberapa dari perintah ini berjalan bersama dan telah mengalami masalah yang saya tidak bisa mengerti mengapa itu tidak berhasil.
Jadi, saya punya input dan output. Output saya adalah mengaktifkan gerbang FET yang menyalakan LED. Input berasal dari gerbang AND. Jadi, LED saya selalu menyala, dan ketika saya mendapatkan sinyal input dari gerbang AND (2 kondisi telah terpenuhi) Saya ingin output (LED toggle) menjadi RENDAH (matikan LED. Karena output juga terhubung ke salah satu input DAN, ini juga akan mengubah sinyal input RENDAH.
Yang ingin saya lakukan: Saya hanya ingin membaca input sebagai 'kondisi terpenuhi' dan mematikan LED. Kemudian harus dimatikan selama 1 detik, dan hidupkan kembali. Jika input menjadi TINGGI lagi, proses berulang. Saya menggunakan push sederhana untuk beralih sebagai input gerbang AND lainnya dan telah mengukur bahwa output (input MCU) menjadi tinggi ketika tombol ditekan, namun toggle LED (output) tidak akan mati. Kode saya (saya pikir) sangat sederhana, tetapi jelas saya tidak mengerti sesuatu dengan benar karena tidak berfungsi.
Jadi ini kode yang saya gunakan:
#include "mbed.h"
DigitalIn ip(D7);
DigitalOut op(D8);
int main() {
if (ip == 1){
op = 0;
wait (1.0);
op = 1;
}else{
op = 1;
}
}
Dan bagi saya, itu masuk akal. Dalam keadaan biasa, outputnya TINGGI. Jika input mendapatkan sinyal dari gerbang AND, LED akan mati selama 1 detik, lalu nyalakan lagi.
Apa yang saya lakukan salah karena itu terlihat seperti cara logis untuk melakukannya dan saya tidak mengerti mengapa itu tidak berhasil?
Jika itu membantu, saya menggunakan Nucleo F103RB. Ketika saya menggunakan kode 'blink' dan hanya menghidupkan dan mematikan LED seperti itu, itu berfungsi dengan baik, itu hanya ketika saya menambahkan pernyataan 'jika' itu salah.
Ini adalah sirkuit yang disederhanakan:
mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab
PS Saya tahu saya tidak menambahkannya dalam skema, tetapi gerbang DAN memang memiliki resistor pull-down pada input dan output.
DigitalIn
sudah termasuk volatile
.