Soru & Cevap

Arduino , buton ile blink kontrolü ...

23.10.2019 - 10:35

Arkadaşlar merhaba, proje ödevim ile alakalı yardımcı olurmusunuz?

2 Nolu pin giriş pini olucak

12 Nolu pin çıkış pini olucak

13 Nolu pin çıkış pini olucak

 

2 Nolu pinde bulunan butona 1000ms basıldığında

13 Nolu pinde bulunan led 5 kere 1000ms yanıcak 1000ms sönecek.

 

Fakat bunlardan bağımsız olarak elektrik verilmesiyle beraber 12 nolu pindeki led devamlı olarak 500 ms yanıp 500 ms sönecek. (Bu sürekli olacak)

 

120 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-260685-1571908439.jpg
canuruk
25.10.2019 - 10:21

Sorunlar çok çıktı bu nedenle kodu değiştirdim

https://www.tinkercad.com/things/a8KdxT1pXmi-zaman-kesmeli-ve-/editel?sharecode=ItIXUMzVt55dFClI-KvDlCtbesLKW-Q3bApIEzrvUkg=

 

 

int buttondurumu = 0;
boolean led_durumu = LOW;
unsigned long eskiZaman=0;
unsigned long yeniZaman;
int LEDdurumu = 0;
unsigned long eskiZaman2=0;
unsigned long yeniZaman2;
int LEDdurumu2 = 0;
int icdongu = 0;

void setup()
{
  pinMode(2, INPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  attachInterrupt(0,buttonlu, RISING);
 
}

 


void buttonlu() {

//button basılma durumu
buttondurumu=1;
    
  

}


void loop()
{
  if (buttondurumu>0){
    
     
yeniZaman2 = millis(); 
    if(yeniZaman2-eskiZaman2 > 1000){
     if(LEDdurumu2 == 1){
      digitalWrite(13,HIGH);
      LEDdurumu2 = 0;
     }else{
      
       digitalWrite(13,LOW);
       icdongu = icdongu +1;
      LEDdurumu2 = 1;
       
     } 
     /* Eski zaman değeri yeni zaman değeri ile güncelleniyor */
     eskiZaman2= yeniZaman2;
      if(icdongu>4){
        buttondurumu=0;
        icdongu=0;
        
      }
  }
    
}
 yeniZaman = millis(); 
    if(yeniZaman-eskiZaman > 500){
     if(LEDdurumu == 1){
      digitalWrite(12,LOW);
      LEDdurumu = 0;
     }else{
      digitalWrite(12,HIGH);
      LEDdurumu = 1;
     } 
     /* Eski zaman değeri yeni zaman değeri ile güncelleniyor */
     eskiZaman = yeniZaman;
  }
}

picture-260685-1571908439.jpg
canuruk
24.10.2019 - 02:11

https://www.tinkercad.com/things/a8KdxT1pXmi-glorious-gogo-bruticus/editel?sharecode=ItIXUMzVt55dFClI-KvDlCtbesLKW-Q3bApIEzrvUkg=

 

bu şekilde yapabilirsin.


int buttondurumu = 0;
boolean led_durumu = LOW;


void setup()
{
  pinMode(2, INPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  attachInterrupt(0,buttonlu, RISING);
 cli();

  // Timer1 kesmesi ayarlanıyor
  TCNT1  = 0;
  TCCR1A = 0;
  TCCR1B = 0;
  OCR1A = 15624;  // 1 saniye çalışması için gerekli zaman kesmesi frekansı
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS12) | (1 << CS10);
  TIMSK1 |= (1 << OCIE1A);
  sei();
}


ISR(TIMER1_COMPA_vect){     //Her kesmeye girildiğinde otomatik çalıştırılacak fonksiyon.
 led_durumu = !led_durumu;
  digitalWrite(12, led_durumu);
}

void buttonlu() {
buttondurumu=digitalRead(2);
//button basılma durumu
if (buttondurumu == 1){
    for(int i=0; i<5; i++) { 
digitalWrite(13, HIGH);
delay(1000);  
digitalWrite(13, LOW);
delay(1000);     
}
  buttondurumu=0;
}
}


void loop()
{
 
delay(500);
 
}

  

/sites/default/files/cevaplar/dosya/2020/file-glorious_gogo-bruticus.png