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();
    }
  • Aynı koduyu 3 kere açmışsınız , 2 sini kaldırın konuşalım.

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.