Şimdi Ara

led kontrolü

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
6
Cevap
0
Favori
323
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • sa. arkadaslar
    uno ile yapmaya çalıştığım bir devrede takılıp kaldım yardımlarınızı bekliyorum
    sıkıntı su

    5 adet ledimiz ve iki adet butonumuz var 1. butona bastığımızda 4 adet led 1 dk yanacak ve bu 1 dk içerisinde 5. ledi 2. butonla yak söndür yapmaya çalışmaktayım.
    programı bildiklerim kadar yazdım. google amcadan birazda kopya çektim, lakin gene olmadı.
    ne yaptıysam 1. butona bastığımda 4 led yanıyor ama 2. butonla 5. ledi yak sondur yapamıyorum, ne zamanki 4led sönüyor ondan sonra 5. ledi 2. butonla kontrol edebiliyorum
    kod yazmada azıcık acemiyim :)

    led kontrolü

    int para_pin = 2;
    int para_deger = 0;
    int led=12;
    int buton=3;
    int butonDurum;
    int ledDurum=0;
    int led1 = 8; //
    int led2 = 9; //
    int led3 = 10; //
    int led4 = 11; //
    int x=0;

    void setup(){
    pinMode(led, OUTPUT);
    pinMode(buton, INPUT);
    pinMode ( para_pin , INPUT);
    pinMode ( led1, OUTPUT);
    pinMode ( led2, OUTPUT);
    pinMode ( led3, OUTPUT);
    pinMode ( led4, OUTPUT);

    }

    void loop(){
    butonDurum=digitalRead(buton);
    if(butonDurum==HIGH && x==0){
    x=1;
    if(ledDurum==0) ledDurum=1;
    else if(ledDurum==1) ledDurum=0;
    }
    else if(butonDurum==LOW && x==1){
    x=0;
    }

    if (ledDurum==1){
    digitalWrite(led, HIGH);
    }
    else{
    digitalWrite(led, LOW);

    }
    {
    para_deger = digitalRead(para_pin);
    if (para_deger == HIGH)

    {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(60000);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);

    }


    }
    }







  • sorun 1dk bekleme kısmında. Bunu yanlış anladığınız için hatayı göremiyorsunuz. delay(60000) kısmında arduino, 1dk bekliyor. yani 2. butondan gelen veriyi alamıyor çünkü arduino sürenin dolmasını bekliyor. bu bekleme işimi while döngüsü ile yapmanız lazım. mesela aklıma gelen bir yol: 1. buton aktif olduğu andaki zamanı kaydedin ve zamanı kaydettikten sonra bir while döngüsü oluşturun. Her bir döngüde 2. butondaki veriyi kontrol edin ve döngünün en sonundaki zamanı da kaydedin. bu iki zamanı kıyaslayarak, oluşturduğunuz döngüyü 1 dk ile sınırlayabilirsiniz. Yanış hatırlamıyorsam micros() gibi bir fonksiyon var zamanı veren. yine de bir bakın tekrardan.
  • Aynen arkadaşın dediği gibi baş belası delay komutundan oluyor.
    Duraklama yapmak için millis komutunu araştırın.



    < Bu mesaj bu kişi tarafından değiştirildi symbolcu -- 4 Şubat 2019; 11:43:41 >
  • #kaskas123 ve #symbolcu ilginizden dolayı tesekkur ederim.
    uzun zamandır yazamadım kusura bakmayın. farklı bir yol izleyerek bu sorunu hallettim kodu paylaşıyorum.
    yalnız bir ihtiyac daha dogdu bu devrede 1 adet ledimizi herseyden bağımsız bir sekilde 5 yada 10 sn yanıp sönmesi gerekiyor.bu konuda bir tavsiye verebilirmisiniz.

    #define BUTON_TIMER 2
    #define BUTON_LED 3
    #define LED1 9
    #define LED2 10
    #define LED3 11
    #define LED4 12
    #define LED5 13
    long sayac=0;
    int READ_TIMER=0;
    int READ_LED=0;
    int control1=0;
    int control2=0;
    int LED_OUTPUT=0;


    void setup() {

    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);
    pinMode(LED3, OUTPUT);
    pinMode(LED4, OUTPUT);
    pinMode(LED5, OUTPUT);
    pinMode(BUTON_TIMER, INPUT);
    pinMode(BUTON_LED, INPUT);
    Serial.begin(9600);
    }


    void loop() {
    LED_OUTPUT=0;
    digitalWrite(LED2,LED_OUTPUT);
    READ_TIMER=0;
    READ_TIMER = digitalRead(BUTON_TIMER);

    while(READ_TIMER == 1){

    digitalWrite(LED1,1);
    sayac++;
    delay(10);


    READ_LED=digitalRead(BUTON_LED);
    if(READ_LED==1){
    control1=1;
    sayac++;
    delay(10);
    }



    if(control1==1){
    READ_LED = digitalRead(BUTON_LED);
    if(READ_LED == 0){
    sayac++;
    delay(10);
    control2 = 1;
    }
    }


    if (control1 == 1 && control2==1){
    LED_OUTPUT=!LED_OUTPUT;
    digitalWrite(LED2,LED_OUTPUT);
    control1=0;
    control2=0;
    }

    if(sayac>6000){
    digitalWrite(LED1, LOW);
    sayac=0;
    break;
    }

    }

    }




  • Dediğim aynen geçerli.Millis komutu ile her şeyden bağımsız led yakıp söndürebilirsin.
    Tabii komutu iyi anlayıp fonksiyon kurman gerek.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.