Arduino ile iki adet LED'i birbirinden bagimsiz yakıp söndürmek

cemal1618

Üye
Katılım
13 Ağustos 2023
Mesajlar
14
Arduino ile İki adet LED'i birbirinden bagimsiz yakıp söndürmek için nasıl bir kod yazmalıyız? İsteğim 2 ledden birisinin 3 saniyede bir diğerinin 5 saniyede bir yanıp sönmesi ve 3 ve 5'in ortak katları olan 15. ve 15 in katları olan saniyelerde her iki ledin de aynı anda yandığını öğrencilerin gözlemlemesi.

digitalWrite ve delay kullanarak yapamadım. İnternette yaptığım araştırmada millis() veya interrupt kullanarak yapılabileceği yönünde bilgi edindim. Yardımcı olabilirseniz sevinirim.
 
İnterrupt kullanmadan yapılabilir


En düşük süreden daha kısa bir kontrol sıklığı gayet gerekli

1 sanlye aralıklı bir kontrol düşünebilirsiniz


Başlangıçta
Zaman1 =0
Zaman2=0
olur

Döngüde
her 1 saniyede süreler artsın

zaman1=3sn ise kırmızı led
Zaman2 =5sn ise yeşil led yakılır


İşin sırrı, en kısa süreden daha hızlı kontrol sağlamak.


timer interrupt ile daha iyi olur.

1sn timer ayarlanır. Tüm kontrol timer olayında yapılır. Zaman1 zaman2 global değişkenlerdir.


Benzer proje:

Bu projede LED'ler zaman kesmesi ile belirli sürelerde otomatik olarak yanacağı için, Arduino başka işlemleri de rahatça yapabilir


 
Son düzenleme:
Açıklamalarınız için çok teşekkür ederim. Kodlama bilgim yeterli değil. Belirttiğiniz projede gerekli değişiklikleri yaparak kedileri yakmaya çalışacağım.
 
Son düzenleme:
Alttaki mesajda bir şeyler yapmıştım.
Denemelerinizi yapın. Olmazsa yazarız
bir şekilde.


led1_durum ve led2_durum gibi iki
değişken daha ilave edin.
C:
led1_durum ^= 1;
digitalWrite(led1, led1_durum);
İle ledlerin durumunu değiştirin.
 
Alttaki mesajda bir şeyler yapmıştım.
Denemelerinizi yapın. Olmazsa yazarız
bir şekilde.


led1_durum ve led2_durum gibi iki
değişken daha ilave edin.
C:
led1_durum ^= 1;
digitalWrite(led1, led1_durum);
İle ledlerin durumunu değiştirin.
Açıklamalarınız için çok teşekkür ederim.
 
selam cemal ben bilgisayar ile kartı bağlıyamamış biri olarak sana şöyle yap böyle yap diyemem :)

Ancak önce 1 ledi yaksan sonra bu işi ilerletsen senin için daha kolay olur sanırım

kartı ve kullandığın dili ya da programı bilmiyorum fakat

ardunio Led blink diye aratırsan bir çok örnek bulabilirsin

github repoları burada senin için ekliyorum kolay gelsin
 
selam cemal ben bilgisayar ile kartı bağlıyamamış biri olarak sana şöyle yap böyle yap diyemem :)

Ancak önce 1 ledi yaksan sonra bu işi ilerletsen senin için daha kolay olur sanırım

kartı ve kullandığın dili ya da programı bilmiyorum fakat

ardunio Led blink diye aratırsan bir çok örnek bulabilirsin

github repoları burada senin için ekliyorum kolay gelsin
Açıklamalarınız için teşekkürler. Bir veya birden fazla ledi yakacak kadar bilgim var. Trafik lambası veya karaşimşek efekti yapabilirim. Ancak 2 ledi aurdino ile 3 ve 5' er saniye arayla birbirinden bağımsız anlık yanıp sönmesinin kolay bir yolu olması gerekir diye düşünüyorum.
 
Açıklamalarınız için teşekkürler. Bir veya birden fazla ledi yakacak kadar bilgim var. Trafik lambası veya karaşimşek efekti yapabilirim. Ancak 2 ledi aurdino ile 3 ve 5' er saniye arayla birbirinden bağımsız anlık yanıp sönmesinin kolay bir yolu olması gerekir diye düşünüyorum.
Bu iki sayının en büyük ortak bölenini alın okadar sanıyede bir led yakmak yerine bir counter arttırın ve if else if ile istediğiniz kosullara uygun mı diye bakın mesela counter ın üçe ve bese gore modunu alın eğer üçün modu sıfıra eşit beşin modu değil ise felan seklinde if else yapısı kurun
 
Son düzenleme:
Kod:
#define LED1 1
#define LED2 2

int STATE=0;

void setup() 
{
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
 
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
}

void loop()
{

   if((STATE%3)==0)
   {
     digitalWrite(LED1, HIGH);     
   }   
 
   if((STATE%5)==0)
   {
     digitalWrite(LED2, HIGH);
   }   
  
     delay(1000);   
     digitalWrite(LED1, LOW);
     digitalWrite(LED2, LOW);
     STATE++;
 
   if(STATE==15)
   {
    STATE=0; 
   }
}
 
Bu da benim yorumlamam. Jenerik bir tablo var, orada her saniye geçtikten sonra hangi led hangi durumda olacak tanımlıyorsun. İstediğin senaryoyu tanımla, ekle, çıkar ve çalıştır.

C++:
static unsigned int state_table[][4] =
{
  2, 0, 3, 0,
  2, 0, 3, 0,
  2, 0, 3, 0,
  2, 0, 3, 0,
  2, 0, 3, 0,
  2, 1, 3, 0,
  2, 1, 3, 0,
  2, 1, 3, 0,
  2, 1, 3, 0,
  2, 1, 3, 0,
  2, 0, 3, 1,
  2, 0, 3, 1,
  2, 0, 3, 1,
  2, 0, 3, 1,
  2, 0, 3, 1,
  2, 1, 3, 1,
  2, 1, 3, 1,
  2, 1, 3, 1,
  2, 1, 3, 1,
  2, 1, 3, 1,
};

static unsigned int index = 0;
static unsigned int timer;

void setup()
{
  pinMode(state_table[0][0], OUTPUT);
  pinMode(state_table[0][2], OUTPUT);
}

void loop()
{
  if ((millis() - timer) >= 1000)
  {
    timer = millis();
    while (millis() == timer)
    {
      ;
    }
    digitalWrite(state_table[index][0], state_table[index][1]);
    digitalWrite(state_table[index][2], state_table[index][3]);
    index = (index + 1) % (sizeof(state_table) / sizeof(state_table[0]));
  }
}
 
3. saniyede 1. led 1sn süreyle
5.saniyede 2. led 1sn süreyle yanacak sönecek. 15. Saniyede ...




C++:
uint8_t led1 = 2, led2 = 3;
 
uint32_t zaman = 0;

 
void setup()
{
 
 
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);

}
void loop()
{
  delay(1000);
  zaman++;
 
  if (zaman==3) digitalWrite(led1, HIGH); // 3.saniye
  if (zaman==5) digitalWrite(led2, HIGH); // 5.saniye
  if (zaman==4) digitalWrite(led1, LOW); // 4.saniyede sön
  if (zaman==6) digitalWrite(led2, LOW); // 6.saniye sönsün
 
 
  // 15.saniye olmuşsa ortaya bir karışık yap

   if (zaman==15) {
   digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
   delay(1000); // 1sn süreyle ikisi de aktif

   digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);

   zaman = 0;


   }

}
 
Son düzenleme:
Alttaki mesajda bir şeyler yapmıştım.
Denemelerinizi yapın. Olmazsa yazarız
bir şekilde.


led1_durum ve led2_durum gibi iki
değişken daha ilave edin.
C:
led1_durum ^= 1;
digitalWrite(led1, led1_durum);
İle ledlerin durumunu değiştirin.
Açıklamalarınız için çok teşekkür ederim.
 
3. saniyede 1. led 1sn süreyle
5.saniyede 2. led 1sn süreyle yanacak sönecek. 15. Saniyede ...




C++:
uint8_t led1 = 2, led2 = 3;
 
uint32_t zaman = 0;

 
void setup()
{
 
 
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);

}
void loop()
{
  delay(1000);
  zaman++;
 
  if (zaman==3) digitalWrite(led1, HIGH); // 3.saniye
  if (zaman==5) digitalWrite(led2, HIGH); // 5.saniye
  if (zaman==4) digitalWrite(led1, LOW); // 4.saniyede sön
  if (zaman==6) digitalWrite(led2, LOW); // 6.saniye sönsün
 
 
  // 15.saniye olmuşsa ortaya bir karışık yap

   if (zaman==15) {
   digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
   delay(1000); // 1sn süreyle ikisi de aktif

   digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);

   zaman = 0;


   }

}
Açıklamalarınız için çok teşekkür ederim.
 
Bu da benim yorumlamam. Jenerik bir tablo var, orada her saniye geçtikten sonra hangi led hangi durumda olacak tanımlıyorsun. İstediğin senaryoyu tanımla, ekle, çıkar ve çalıştır.

C++:
static unsigned int state_table[][4] =
{
  2, 0, 3, 0,
  2, 0, 3, 0,
  2, 0, 3, 0,
  2, 0, 3, 0,
  2, 0, 3, 0,
  2, 1, 3, 0,
  2, 1, 3, 0,
  2, 1, 3, 0,
  2, 1, 3, 0,
  2, 1, 3, 0,
  2, 0, 3, 1,
  2, 0, 3, 1,
  2, 0, 3, 1,
  2, 0, 3, 1,
  2, 0, 3, 1,
  2, 1, 3, 1,
  2, 1, 3, 1,
  2, 1, 3, 1,
  2, 1, 3, 1,
  2, 1, 3, 1,
};

static unsigned int index = 0;
static unsigned int timer;

void setup()
{
  pinMode(state_table[0][0], OUTPUT);
  pinMode(state_table[0][2], OUTPUT);
}

void loop()
{
  if ((millis() - timer) >= 1000)
  {
    timer = millis();
    while (millis() == timer)
    {
      ;
    }
    digitalWrite(state_table[index][0], state_table[index][1]);
    digitalWrite(state_table[index][2], state_table[index][3]);
    index = (index + 1) % (sizeof(state_table) / sizeof(state_table[0]));
  }
}
Açıklamalarınız için çok teşekkür ederim.
 
Bu kadar farklı ve değerli çözüm önerilerine bu kadar kısa sürede ulaşmak çok güzel ve insanın ufkunu açıyor. Herkese cevapları için çok teşekkür ediyorum.
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,841
Mesajlar
99,642
Üyeler
2,480
Son üye
mozcelikors

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top