Arduino pin low süresi okuma ve dallanma?

Başlatan Andromeda, 16 Mart 2021, 16:49:27

Andromeda

Bir pinin low(veya high) olma süresini milisaniye cinsinden okuyup belirli değerler arasında ise 4 adet ledi değişik şekilde yakacağım.. bunu en basit şekilde nasıl yapabilirim..timer ve if yapısı kullanacağım ama özellikle timer yapısına yabancıyım arduino da..örneğin 1000 ms den küçükse kırmızı yansın,1000-1300 arası ise sarı led yansın gibi..
devre alt yapısı şu şekilde hazır;
ışık sensörü digital girişe bağlı,4 adet led digital çıkışa bağlı..
basit bir program yazdım..
ışığı engel ile kesince bir adet ledi yakıyorum.. engel kalkınca sönüyor..
bu noktadan ilerleyebilirmiyiz..
0
void setup() {
// put your setup code here, to run once:
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(11,INPUT);
unsigned int sayac;
}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(2,LOW);
int sayac = digitalRead(11); // 11 nolu pini oku ve sayac değişkenine ata
if (sayac==1)
digitalWrite(2,HIGH);
}
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

sadogan

pulseIn fonsiyonu var.
low da kalma süresini bü şekilde ölçebilirsiniz.
sayac=pulseIn(pin,HIGH)

fide

@sadogan çözümüne alternatif olarak şunu deneyebilirsiniz.
#define sw 11
state=digitalRead(sw);
sayac=0;
while(state==0)
{sayac+=1;
delay(1);
state=digitalRead(sw);
}

Döngü çıkışındaki sayac değeri milisaniye cinsinden beklediği süreyi verir.
if (sayac <1000)
{Bla;bla;bla

}



if ((sayac >=1000)&& (sayac<1300))
{Bla;bla;bla

}

...
Şeklinde devam edersin.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

Andromeda

" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

Andromeda

#4
Aşağıdaki kodu çalıştıramadım..sensör çıkışı normalde 0..
engel gelince 1 oluyor..
amaç: engel 3 saniyeden uzunsa kırmızı yansın..küçükse yeşil 1 saniye yanıp sönsün..
ama yeşil led sürekli yanıp sönüyor..
kafam durdu..  :)
unsigned long darbe;

void setup() {
  // put your setup code here, to run once:
   pinMode(2, OUTPUT);
   pinMode(3, OUTPUT);
   pinMode(4, OUTPUT);
   pinMode(5, OUTPUT);
   pinMode(11,INPUT);
   unsigned int sayac;
   
}

void loop() {
 digitalWrite(3,LOW);
  darbe = pulseIn(11, HIGH);
  if (darbe>3000000)
  
  digitalWrite(2,HIGH); //kırmızı led 
  
  digitalWrite(3,HIGH);// yeşil led
  delay(1000);
   digitalWrite(3,LOW);
}
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

muuzoo

Kodunuzda sadece darbe 3 sn'den uzunsa kırmızı yansın demişsiniz. Ardından da hiç bir koşula bağlı olmadan yeşil ledi yakmışsınız. O yüzden yeşil ledin yandığını görmeniz normal.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

Andromeda

#6
doğru.. kafa durdu dedim ya..gosub gibi birşey yok bu dilde, etiket var ..alışamadım..
ne yapacam..?
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

Andromeda

Alıntı yapılan: Andromeda - 17 Mart 2021, 10:25:44doğru.. kafa durdu dedim ya..gosub gibi birşey yok bu dilde, etiket var ..alışamadım..
ne yapacam..?
google a arduino dallanma diye yaz ..herşeyide sorma..kendin uğraş..
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

ilyas KAYA

void dallanma()    // Basic de  dallanma : 

{
.... işlemler

}



void main() 

{

dallanma ();  // gosub dallanma gibi  


}


C ve türevlerinde bu şekilde yapılıyor bu arduino ya has bir durum değil. Sanırım Pic basic kullanıyorsun yada proton. Bu şekilde daha çok avantajı var kullanmaya başlayınca göreceksiniz.