سلام بنده می خواستم برای اینکه بتونم با زدن یه کلید فشاری مثلا یه مقدار ثابتی به یه شمارنده ای اضافه بشه و با نگه داشتنش به مدت فرضا 2 ثانیه از مقدار اون شمارنده یه مقدار ثابتی کم بشه . برای این من اومدم از پین وقفه شماره 3 برد یونو استفاده کردم و با کدهای IF , While هم که امتحان کردم جواب نداد برای حالت دومش و نمی دونم چطور باید این رو ایجاد کرد کسی اطلاعی داره یا می تونه راهنمایی کنه ؟ چون داخل تابع وقفه دیگر توابع مربوط به تایمر جواب نمی ده مثل همین millis() . با یه همچین کدی براي تابع وقفه باز هم جواب نداد
کد:
void ButtonFun1() {
// read the state of the pushbutton value:
Treshold=Treshold+4;
// buttonState[0] = digitalRead(interrupt_buttonPin);
// buttonState[1] = digitalRead(interrupt_buttonPin);
// if (buttonState[0] == HIGH && buttonState[1] == HIGH) {
// Treshold=Treshold-4;
// }
//while (buttonState[0] == HIGH && buttonState[1] == HIGH) {
// Treshold=Treshold-4;
// }
}
با دو تا تابع وقفه جداي از هم كه با تاخير 1 ثانيه اي كار كنند هم جواب نداد طوري كه مثلا در اين 1 ثانيه كه كليد وصل است از شمارنده كم كند
کد:
attachInterrupt(digitalPinToInterrupt(interrupt_buttonPin), ButtonFun1 ,RISING);
detachInterrupt(digitalPinToInterrupt(interrupt_buttonPin));
delay(1000);
attachInterrupt(digitalPinToInterrupt(interrupt_buttonPin), ButtonFun2 ,RISING);
detachInterrupt(digitalPinToInterrupt(interrupt_buttonPin));
کدهای بالا در Void Loop گذاشتم با توابع وقفه زیر :
void ButtonFun1() {
// read the state of the pushbutton value:
Treshold=Treshold+4;
}
void ButtonFun2() {
Treshold=Treshold-4;
}