বাটন ডিবাউন্স Beginner দের জন্য খুবই একটি কমন সমস্যা। তবে এভাবে বাটন দিয়ে কমান্ড দিলে দেখা যাবে একবার বাটন চাপলে কয়েকবার কমান্ড নিবে। এটা হয় ডিবাউন্সের কারণে। বাটন একবার চাপলেও মেকানিক্যাল ত্রুতিগত কারণে কিছু স্পাইক দেখা দেয়। আর এই কারণেই মাইক্রোকন্ট্রোলারে বাটন দিয়ে কমান্ড দিলে স্পাইকের কারণে মাইক্রোকন্ট্রোলার কয়েকটি কমান্ড একত্রে নিয়ে নেয়। তাই এই সমস্যা দূর করতে হয় স্পাইক দূর করতে হয় নাহয় একবার কমান্ড নেয়ার পর কিছুক্ষণ অপেক্ষা করতে হয়।
স্পাইক দূর করতে হলে বাটনের সাথে সমান্তরালে একটি ক্যাপাসিটর লাগাতে হয়। এতে স্পাইক বা নয়েজ ক্যাপাসিটর দ্বারা ফিল্টার হয়ে যায়।
আর যদি একবার কমান্ড নেয়ার পর কিছুক্ষণ অপেক্ষা করতে চাই তাহলে কমান্ডের পর কিছুক্ষণ Delay দিলেই হবে।
1
2
3
4
if(bit_is_clear(PINB, 3)){
_delay_ms(100);
PORTB| = (1<<4);
}
তবে আমার মতে সবচেয়ে ভালো পদ্ধতি হল ডিবাউন্সের সময়টুকু একটি লুপের মধ্যে ফেলে দেয়া। এতে ঠিক যতটুকু সময় ডিবাউন্স হয় ঠিক ততটুকু সময় একটি খালি লুপ চলে। এতে কোডের Execution এর সময় কমে এবং প্রায় নির্ভুলভাবে ডিবাউন্স রোধ করা যায়। অতিরিক্ত কোন সময় অপেক্ষা করতে হয় না।
কোডটি হবে এরকম
1
2
3
4
if(bit_is_clear(PINB, 3)){
while(bit_is_clear(PINB, 3));
PORTB| = (1<<4);
}