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);
}
pulseIn fonsiyonu var.
low da kalma süresini bü şekilde ölçebilirsiniz.
sayac=pulseIn(pin,HIGH)
@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.
Sağolun.. :)
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);
}
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.
doğru.. kafa durdu dedim ya..gosub gibi birşey yok bu dilde, etiket var ..alışamadım..
ne yapacam..?
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ş..
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.