Yükselen Kenar kullanırken programın çalışmaması - aynı kodu tekrar yüklediğimde olmaması sapıtması
  • Arduino leonardoya aşağıdaki kodları yüklediğimde düzgün çalışmıyor. Olmasını istedğim şey ise 2 kızıl ötesi kapalı sensör, 1 role kartı kullanarak (role arduinodan gelen 0V ile çalışıyor);

    1.) 1. sensör gördüğü anda role 200 MS çekecek. Sonra sensor inaktif olacak.
    2.) 1. sensör gördüyse, 2. sensör aktif olacak. 2. sensör gördükten sonra, görmeyi kestiği anda (düşen kenar) role yine 200 MS çıkış verecek.
    3.)Role çıkış verdikten sonra 1. sensör aktif olup 2.si inaktif olacak. Bu hep böyle devam edicek.
    4.)Bir buton olacak ve butona basıldğında 200 MS role çıkış verecek.

    Günlerdir bununla uğraşıyorum birini hallediyorum diğeri sorun çıkartıyor. Bazen yükselen kenarlar çalışmıyor. Bazen sistem tamamen çalışmıyor bu durumda aynı kodları tekrar yüklüyorum. O zamanda farklı şeklide davranıyor. Aşağıdaki kodları yüklediğimde 1. sensör 200 ms çıkış verip inaktif oluyordu(ta ki ben manuel butonu ekliyene kadar). Sorunu acil olarak çözmem lazım yoksa aynı işi PLC ile yapmak zorunda kalacağım ve maliyetimin ne kadar yüksek olabileceğini tahmin edebilirsiniz. Şimdiden teşekkür ediyorum.

    kod:

    boolean sensor1gordu;
    boolean sensor2gordu;
    int sensor1 = 4;
    int sensor2 = 5;
    int role1 = 6;
    int buton = 8;

    void setup() {
    // put your setup code here, to run once:
    pinMode(13, OUTPUT);
    pinMode(sensor1, INPUT);
    pinMode(sensor2, INPUT);
    pinMode(buton, INPUT);
    pinMode(role1, OUTPUT);
    digitalWrite(role1, HIGH);

    attachInterrupt(0, sensor1pasif, RISING);
    attachInterrupt(1, sensor2pasif, RISING);
    attachInterrupt(4, manuelStart, RISING);
    }

    void loop() {
    // put your main code here, to run repeatedly:
    if (digitalRead(sensor1) == LOW && sensor1gordu == LOW && sensor2gordu == LOW) {
    digitalWrite(role1, LOW);
    delay(200);
    digitalWrite(role1, HIGH);
    digitalWrite(3, HIGH);
    }

    if (digitalRead(sensor2) == LOW && sensor1gordu == HIGH && sensor2gordu == LOW) {
    digitalWrite(role1, LOW);
    delay(200);
    digitalWrite(role1, HIGH);
    }


    if (sensor1gordu == HIGH && sensor2gordu == HIGH && digitalRead(sensor2) == HIGH) {
    digitalWrite(role1, LOW);
    delay(200);
    digitalWrite(role1, HIGH);
    pasifSifirla();
    }

    }

    void sensor1pasif() {
    sensor1gordu = HIGH;
    digitalWrite(3, !sensor1gordu);
    }

    void sensor2pasif() {
    sensor2gordu = HIGH;
    digitalWrite(2, !sensor2gordu);
    }
    void pasifSifirla() {
    sensor1gordu = LOW;
    sensor2gordu = LOW;
    }
    void manuelStart(){
    digitalWrite(role1, LOW);
    delay(200);
    digitalWrite(role1, HIGH);
    pasifSifirla();
    }
  • sensorler sırayla tetıklenıyorsa 2. sensor devreye gırmeden oncekı işini bitirmesi lazım. birde adım adım yapsanız once 1. sensoru defalarca hatasız olacak şekılde test edın sonra diğer sonsoru ayrı test edın ve en son beraber hepsı çalışacak şekılde deneyın, ır sensorler zemın parlaklıgından etkılenebılır ona dıkkat edın kablolar kısa olursa ıyı olur etraftan gurultu alıp gereksız tetıklemeler olmasın. arduıno elektrıktekı dalglanma ve parazıtlerden etkılenır endustrıyel ortamlar ıcın elektrıksel fıltrelemeler yapmanız lazım en kötü ihtimal 5v uclarını ek 100nf kutupsuz kondansatorle dengeleyın ır girişlere seri 100 ohm luk direnç bağlayarak girilerın hassasıyetını bıraz azaltabılırsınız aklıma gelen bunlar
  • Teşekkür ederim önerilerinizi deneyeceğim.
  • Sensörleri ayrı ayrı denediğimde oluyor ama kodları birleştrdiğimde 1. sensör gördüğünde 200 MS yerine sürekli çıkış veriyor. Bilen birisi yok mu ?

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.