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
6,056
Mesajlar
103,332
Üyeler
2,539
Son üye
TunahanC

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
deneyci wrote on hakan8470's profile.
Sibonge uNkulunkulu ngokuhlukahluka asinike kona.

Bu hangi dil? :)
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Back
Top