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

ساخت وبلاگ
سلام خسته نباشید من التراسونیک سه پایه دارم که عبارت هستند از vcc _ gnd_ ,signal اما از اونجایی که تعداد ماژول های من زیاد هست می خواهم بتوانم با استفاده interrupt این کار رو بکنم و از اون جایی که یک پایه برای ارسال و دیافت اطلاعات دارم باید مداوم آن را فعال وغیر فعال کنم و مداوم باید آن را به پایه دیجتال تعریف کنم :
1. ایا این پایه ممی تواند به عنوان خروجی هم تعریف شود ؟
2. در ضمن این کد من هستش اما در زمان اجرا فقط یک بار وارد تابع INTERRUPT می شه تا مقدار بگیره گاهی اوقات هم نمی گیره::16:
کسی می تونه کمکم کنه ؟
#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;}
}
دستگاه پوشال زن...
ما را در سایت دستگاه پوشال زن دنبال می کنید

برچسب : نویسنده : pushalzan بازدید : 162 تاريخ : دوشنبه 9 بهمن 1396 ساعت: 5:25