اطلاعیه

Collapse
No announcement yet.

راه اندازی ماژول ultra sonic با interrupt (وقفه)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راه اندازی ماژول ultra sonic با interrupt (وقفه)

    سلام خسته نباشید من التراسونیک سه پایه دارم که عبارت هستند از vcc _ gnd_ ,signal اما از اونجایی که تعداد ماژول های من زیاد هست می خواهم بتوانم با استفاده interrupt این کار رو بکنم و از اون جایی که یک پایه برای ارسال و دیافت اطلاعات دارم باید مداوم آن را فعال وغیر فعال کنم و مداوم باید آن را به پایه دیجتال تعریف کنم :
    1. ایا این پایه ممی تواند به عنوان خروجی هم تعریف شود ؟
    2. در ضمن این کد من هستش اما در زمان اجرا فقط یک بار وارد تابع INTERRUPT می شه تا مقدار بگیره گاهی اوقات هم نمی گیره:
    کسی می تونه کمکم کنه ؟
    #define SIG 7

    volatile bool a=0;
    volatile int psl;
    unsigned long Time,Resault;
    void setup() {
    attachInterrupt(SIG,ultra_HIGH,RISING);
    Serial.begin(9600);
    ultraPing();




    }


    void loop() {
    psl_Update();
    Serial.println(Resault);


    }
    void ultra_HIGH (){
    if (a==0){
    psl=11;
    a=1;
    delayMicroseconds(1);
    }
    }
    void ultra_LOW(){
    if (a==1){
    psl=12;
    a=0;
    delayMicroseconds(1);
    }
    }
    int ultraRead(int micro){
    return micro*34000/1000000/2;
    }
    int ultraPing(){
    // noInterrupts();
    detachInterrupt(SIG);
    delayMicroseconds(2);
    digitalWrite(SIG,HIGH);
    delayMicroseconds(10);
    digitalWrite(SIG,LOW);
    delayMicroseconds(1);
    Serial.println ("aaaaaaaaaaaaaaaaa");


    //interrupts();
    attachInterrupt(SIG,ultra_HIGH,RISING);

    }
    void psl_Update(){
    if (psl==11){
    Time=micros();
    Serial.println ("good");

    detachInterrupt(SIG);
    attachInterrupt(SIG,ultra_LOW,FALLING) ;


    psl=0;



    }
    else if (psl==12){

    Time =micros()-Time;
    Resault=Time*34000/1000000/2;
    Serial.println ("hello");

    delayMicroseconds(3);

    ultraPing();
    psl=0;

    }
    else {return;}
    }
لطفا صبر کنید...
X