Yani, ben bir TAMAM ve programlama konusunda acemi oldum. Arduinos üzerinde bazı temel şeyler yaptım (kelimenin tam anlamıyla LED'leri değiştiriyor ve bir LCD'de bir şey gösteriyor) ve kendime C'de nasıl programlanacağını kendim öğretmeye çalışıyorum, ticaretle donanım mühendisiyim, ama beni herhangi bir firmware / yazılım tarafı yapın ve öğretmek için akşam kursları yoktur ve kariyer seçeneklerimi daha da ileriye taşımak istiyorum. Bu komutlardan bazılarının nasıl bir araya geldiğini ve neden işe yaramadığı konusunda kafamı bulamadığım bir sorunla karşılaştıklarını anlamaya çalışıyorum.
Yani, bir girdi ve çıktı var. Çıktım, bir LED'i açan bir FET'in kapısını açıyor. Giriş bir AND geçidinden geliyor. Yani, LED'im her zaman açık ve AND geçidinden bir giriş sinyali aldığımda (2 koşul karşılandı) Çıkışın (LED geçişi) DÜŞÜK (LED'i kapatmasını) istiyorum. Çıkış da bağlı olduğundan AND girişlerinden biri, bu giriş sinyalini DÜŞÜK duruma getirir.
Ne yapmak istiyorum: Sadece girişi 'koşullar karşılandı' olarak okumak ve LED'i kapatmak istiyorum. Daha sonra 1 saniye kapalı olmalı ve tekrar açılmalıdır. Giriş tekrar YÜKSEK ise işlem tekrarlanır. Diğer AND geçidi girişi olarak anahtar yapmak için basit bir itme kullanıyorum ve düğmeye basıldığında çıkışın (MCU girişi) yüksek olduğunu ölçtüm, ancak LED değiştirme (çıkış) kapanmayacak. Benim kod (sanırım) oldukça basit, ama açıkça işe yaramıyor gibi bir şey doğru anlamıyorum.
Yani bu kod kullanıyorum:
#include "mbed.h"
DigitalIn ip(D7);
DigitalOut op(D8);
int main() {
if (ip == 1){
op = 0;
wait (1.0);
op = 1;
}else{
op = 1;
}
}
Bana göre bu mantıklı görünüyor. Normal durumda, çıktı YÜKSEK. Giriş sinyali AND geçidinden alırsa, LED 1 saniye boyunca söner ve sonra tekrar açılır.
Yanlış yaptığım şey, bunun mantıklı bir yolu gibi görünüyor ve bunun neden işe yaramadığını anlayamıyorum?
Yardımcı olursa, Nucleo F103RB kullanıyorum. 'Göz kırpma' kodunu kullandığımda ve LED'i bu şekilde açıp kapadığımda iyi çalışıyor, sadece 'if' ifadesini yanlış gittiğinde eklediğimde.
Bu basitleştirilmiş devredir:
bu devreyi simüle et - CircuitLab kullanılarak oluşturulan şematik
PS Şematikte onları eklemediğimi biliyorum, ancak AND kapılarının giriş ve çıkışta açılan dirençleri var.
DigitalIn
Zaten içerdiği tanımın umarız volatile
.