سلام
حتما شده که می خوایید یه صفحه کلید رو به میکرو وصل کنید ولی خب واقعا خیلی پین میگیره. یه روشی که استفاده میشه به نام صفحه کلید نردبانی مقاومتی (R2R Button Resistor Ladder) مشهوره ولی به نظر میرسه خیلی ها از همچین تکنیکی بی خبر هستن. من تصمیم گرفتم اینو توضیح بدم. به تصویر زیر نگاه کنید:

همون طور که می بینید می تونید با این روش فقط 1 پین رو در مورد استفاده قرار بدید! اگه دقت کنید یکی از پین ها زمین شده، یکی 5v و یکی دیگه هم به ADC خورده. حالا با خوندن مقدار خروجی از سیم که به ADC متصل شده می تونید بفهمید که کدوم کلید فشرده شده. به این کد آردوینو دقت کنید:
کدها خیلی روانه. خصوصا که گفته چی کار میکنه. ابتدا روال اولیه پیکربندی طی شده. پریفرال سریال و ADC که پیکربندی شده بعدش هر دکمه ای فشرده بشه مقدار ADC از پورت سریال ارسال میشه. بعد چک میکنه کدوم فشرده شده و دوباره توی پورت سریال میگه کدوم فشرده شده. به همین سادگی!
حتما شده که می خوایید یه صفحه کلید رو به میکرو وصل کنید ولی خب واقعا خیلی پین میگیره. یه روشی که استفاده میشه به نام صفحه کلید نردبانی مقاومتی (R2R Button Resistor Ladder) مشهوره ولی به نظر میرسه خیلی ها از همچین تکنیکی بی خبر هستن. من تصمیم گرفتم اینو توضیح بدم. به تصویر زیر نگاه کنید:

همون طور که می بینید می تونید با این روش فقط 1 پین رو در مورد استفاده قرار بدید! اگه دقت کنید یکی از پین ها زمین شده، یکی 5v و یکی دیگه هم به ADC خورده. حالا با خوندن مقدار خروجی از سیم که به ADC متصل شده می تونید بفهمید که کدوم کلید فشرده شده. به این کد آردوینو دقت کنید:
کد:
#define AnalogBtnPin A0 int AnalogBtn =0; int Button1Cnt =0; int Button2Cnt =0; int Button3Cnt =0; int Button4Cnt =0; int Button5Cnt =0; void setup() { // put your setup code here, to run once: Serial.begin(115200); } void loop() { // put your main code here, to run repeatedly: AnalogBtn = analogRead(AnalogBtnPin); Serial.println( AnalogBtn); if(AnalogBtn >= 508 && AnalogBtn <= 510) { Button1Cnt +=1; Serial.print("Button 1 pressed "); Serial.print(Button1Cnt); Serial.println(" times."); } if(AnalogBtn >= 888 && AnalogBtn <= 890) { Button2Cnt +=1; Serial.print("Button 2 pressed "); Serial.print(Button2Cnt); Serial.println(" times."); } if(AnalogBtn >= 970 && AnalogBtn <= 972) { Button3Cnt +=1; Serial.print("Button 3 pressed "); Serial.print(Button3Cnt); Serial.println(" times."); } if(AnalogBtn >= 1003 && AnalogBtn <= 1005) { Button4Cnt +=1; Serial.print("Button 4 pressed "); Serial.print(Button4Cnt); Serial.println(" times."); } if(AnalogBtn >= 1014 && AnalogBtn <= 1016) { Button5Cnt +=1; Serial.print("Button 5 pressed "); Serial.print(Button5Cnt); Serial.println(" times."); } }
دیدگاه