Arduino mesafe sensörü yardımı

Kodla Büyü

nmk

Site Gezgini
Mesajlar
98
Arduino da 3 adet ledi millis() ile farklı zamanlara göre(1.ledi 10saniyeliğine yakıp sonra söndürme, 2.ledi 5saniyeliğine yakıp sonra söndürme, 3.ledi ise 10saniyeliğine yakıp söndürmek için. Ancak trafik ışıklarındaki gibi ledler aynı anda birden fazlası yanmayacak. :( Çözüm önerilerinizi bekliyorum...
 
Son düzenleme:
Hocam ledleri açıp kapatmak için veya ultrasonik sensörden veri almak için timer kesmesini kullanınız.
 
Hocam ledleri açıp kapatmak için veya ultrasonik sensörden veri almak için timer kesmesini kullanınız.
Teşekkür ederim hocam yarın da zaman timer ile deneyeceğim. Trigger ve Echo pinleri herhangi bir dijital pin olabilir mi. Yoksa interrupt pinleri mi olmalıdır.
 
hocam ulaşmak istediğiniz sonuç nedir? ultrasonik sensörden aldığınız veriye göre ledin yanıp sönme süresini mi arttırıp azaltmak istiyorsunuz? Ultrasonic sensör kütüphanesi trig pininin aktif edilmesinden sonra echo pininden gelen cevabın süresi ölçerek, sensör önündeki engelin mesafesini hesaplar. donanım kesmesi kullanmanız arduino uno nun 2 ve 3 nolu pinlerine dışardan lojik seviyelerini değiştirecek durumlarda kullanırız. Bunun için herhangi pinleri ultrasonik sensör için kullanabilirsiniz. zamanlama kesmelerinde ayarladığınız süre geldiğinde çalışmasını istediğiniz kod çalışır, diğer zamanlarda loop içerisindeki kodlar çalışmasını devam ettirir. Siz ister timer kesmesi içinde ultasonik sensörden verialın isterseniz ledleri açıp kapatın. Tabi devre şemanızı ve ledlerin ne kadar süre açılıp kapandığını bilmiyoruz. Çalışmanızın detaylarını belirtirseniz daha fazla yardımcı olan çıkacaktır.
 
hocam ulaşmak istediğiniz sonuç nedir? ultrasonik sensörden aldığınız veriye göre ledin yanıp sönme süresini mi arttırıp azaltmak istiyorsunuz? Ultrasonic sensör kütüphanesi trig pininin aktif edilmesinden sonra echo pininden gelen cevabın süresi ölçerek, sensör önündeki engelin mesafesini hesaplar. donanım kesmesi kullanmanız arduino uno nun 2 ve 3 nolu pinlerine dışardan lojik seviyelerini değiştirecek durumlarda kullanırız. Bunun için herhangi pinleri ultrasonik sensör için kullanabilirsiniz. zamanlama kesmelerinde ayarladığınız süre geldiğinde çalışmasını istediğiniz kod çalışır, diğer zamanlarda loop içerisindeki kodlar çalışmasını devam ettirir. Siz ister timer kesmesi içinde ultasonik sensörden verialın isterseniz ledleri açıp kapatın. Tabi devre şemanızı ve ledlerin ne kadar süre açılıp kapandığını bilmiyoruz. Çalışmanızın detaylarını belirtirseniz daha fazla yardımcı olan çıkacaktır.
Teşekkür ederim Sayın hocam verdiğiniz bilgiler ışığında yarın deneyeceğim olmazsa tekrar yardım isterim. Projem, sensöre göre araçları algılayarak trafik ışıklarını değiştiren bir çalışma.
 
Arduino editöründe

Örnekler -> 02.Digital -> BlinkWithoutDelay

Örneğini inceleyebilirsiniz.
 
Millis ile 3 farklı ledi farklı sürelerle nasıl çalıştırabilirim.Mesela led1i 10saniye yakıp led2 ve led3sönük olacak. Sonrasındaysa led2yi 5saniye, led3ü 20saniye yanıp diğerleri sönük kalacak.

int led1durum = LOW;
int led2durum = LOW;
int led3durum = LOW;
int zaman=0;
int mesafe=0;
const long sure=5000;
unsigned long oncekizaman=0;
unsigned long simdikizaman=0

void setup()
{ pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
Serial.begin(9600);
}

void loop()
{ simdikizaman=millis();
if((simdikizaman-oncekizaman)>=sure)
{ oncekizaman=simdikizaman;
if((led1durum == LOW))
{ led1durum =HIGH;
led2durum =LOW;
led3durum = LOW;
}
if((led2durum == LOW))
{ led1durum =LOW;
led2durum =HIGH;
led3durum = LOW;
}
if((led3durum == LOW))
{ led1durum =LOW;
led2durum =LOW;
led3durum = HIGH;
}
digitalWrite(led1, led1durum);
digitalWrite(led2, led2durum);
digitalWrite(led3, led3durum);
}

}
 
devre.jpg
 
Kod:
int led1=10;
int led2=11;
int led3=12;
int led1durum = LOW;
int led2durum = LOW;
int led3durum = LOW;
int saniyeSay=0;
const long sure=1000;
unsigned long oncekizaman=0;
unsigned long simdikizaman=0

void setup()
{ pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}

void loop()
{
simdikizaman=millis();
if((simdikizaman-oncekizaman)>=sure)
{
oncekizaman=simdikizaman;
saniyeSay++;
}

if(saniyeSay==0) 
{
led1durum =HIGH;
led2durum =LOW;
led3durum = LOW;
}
if(saniyeSay==10 )
{
 led1durum =LOW;
led2durum =HIGH;
led3durum = LOW;
}
if(saniyeSay==15)
{
 led1durum =LOW;
led2durum =LOW;
led3durum = HIGH;
}
digitalWrite(led1, led1durum);
digitalWrite(led2, led2durum);
digitalWrite(led3, led3durum);

if(saniyeSay==35)
{
saniyeSay=0;
}

}

Hocam, bilgisayar başına oturacak zaman bulamadım, hata varsa kusura bakma, deneyemedim. Telefondan bu kadar oldu.
 
Kod:
int led1=10;
int led2=11;
int led3=12;
int led1durum = LOW;
int led2durum = LOW;
int led3durum = LOW;
int saniyeSay=0;
const long sure=1000;
unsigned long oncekizaman=0;
unsigned long simdikizaman=0

void setup()
{ pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}

void loop()
{
simdikizaman=millis();
if((simdikizaman-oncekizaman)>=sure)
{
oncekizaman=simdikizaman;
saniyeSay++;
}

if(saniyeSay==0)
{
led1durum =HIGH;
led2durum =LOW;
led3durum = LOW;
}
if(saniyeSay==10 )
{
 led1durum =LOW;
led2durum =HIGH;
led3durum = LOW;
}
if(saniyeSay==15)
{
 led1durum =LOW;
led2durum =LOW;
led3durum = HIGH;
}
digitalWrite(led1, led1durum);
digitalWrite(led2, led2durum);
digitalWrite(led3, led3durum);

if(saniyeSay==35)
{
saniyeSay=0;
}

}

Hocam, bilgisayar başına oturacak zaman bulamadım, hata varsa kusura bakma, deneyemedim. Telefondan bu kadar oldu.
Çok teşekkür ederim hocam. Malzemelerim okulda kaldı en kısa sürede okuldan malzemeleri alıp yazdığınız kodları deneyeceğim:)
 
Kod:
int led1=10;
int led2=11;
int led3=12;
int led1durum = LOW;
int led2durum = LOW;
int led3durum = LOW;
int saniyeSay=0;
const long sure=1000;
unsigned long oncekizaman=0;
unsigned long simdikizaman=0

void setup()
{ pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}

void loop()
{
simdikizaman=millis();
if((simdikizaman-oncekizaman)>=sure)
{
oncekizaman=simdikizaman;
saniyeSay++;
}

if(saniyeSay==0)
{
led1durum =HIGH;
led2durum =LOW;
led3durum = LOW;
}
if(saniyeSay==10 )
{
 led1durum =LOW;
led2durum =HIGH;
led3durum = LOW;
}
if(saniyeSay==15)
{
 led1durum =LOW;
led2durum =LOW;
led3durum = HIGH;
}
digitalWrite(led1, led1durum);
digitalWrite(led2, led2durum);
digitalWrite(led3, led3durum);

if(saniyeSay==35)
{
saniyeSay=0;
}

}

Hocam, bilgisayar başına oturacak zaman bulamadım, hata varsa kusura bakma, deneyemedim. Telefondan bu kadar oldu.
Kodlar sorunsuz çalıştı hocam sağolun
 
Geri
Üst