সুচিপত্র:
- ধাপ 1: উপকরণ
- ধাপ 2: প্রোটোটাইপিং
- ধাপ 3: কেস কাটার লেজার
- ধাপ 4: সোল্ডারিং আর্কেড বোতাম
- ধাপ 5: বোতামগুলি স্ট্যাক করুন এবং তাদের আপনার বোর্ডের সাথে সংযুক্ত করুন
- ধাপ 6: কোডিং হেল
- ধাপ 7: সবকিছু কাজ করে
ভিডিও: প্লাগ এবং প্লে আর্কেড বোতাম: 7 ধাপ (ছবি সহ)
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 08:02
আমি সম্প্রতি আমার প্রকল্পগুলি তৈরি করতে Arduino ব্যবহার শুরু করেছি। একজন ডিজাইনার হিসাবে আমি আমার গেম/ইন্টারেক্টিভ প্রকল্পগুলির জন্য কাস্টম ইন্টারফেস তৈরি করতে পছন্দ করি।
সিরিয়াল যোগাযোগ ব্যবহার করে আমি যে সমস্যাটি পেয়েছিলাম তা বেশ জটিল এবং সমস্যা এবং বাগের প্রবণ এবং আমি আমার গেমগুলি নিয়ন্ত্রণ করার জন্য বাহ্যিক বোতামগুলি ব্যবহার করার অনুমতি দেওয়ার জন্য একটি দ্রুত এবং সহজ সমাধান চেয়েছিলাম।
যেহেতু আমি একটি প্লাগ এবং প্লে ডিভাইস চাইছিলাম যা আপনি যে কোনও কম্পিউটারে তাত্ক্ষণিকভাবে ব্যবহার করতে পারেন, আমি একটি আরডুইনো লিওনার্দো কিনেছি। এটি প্রায় একটি ইউনোর অনুরূপ, কিন্তু কয়েকটি পার্থক্য সহ। এই প্রকল্পের জন্য আমি আমার সুবিধার জন্য যে প্রধান পার্থক্য ব্যবহার করব তা হল এটি একটি HID হিসাবে কাজ করার ক্ষমতা। একটি এইচআইডি, বা হিউম্যান ইন্টারফেস ডিভাইস একটি ইউএসবি প্রোটোকল যা আপনার কম্পিউটারকে প্রতিটি ডিভাইসের জন্য কাস্টম ড্রাইভার ইনস্টল না করেই কীবোর্ড এবং একটি কম্পিউটার মাউস থেকে ইনপুট চিনতে এবং গ্রহণ করতে দেয়।
দ্রষ্টব্য: যদি আপনি ফার্মওয়্যার আপডেট করেন তবে আপনি এখানে একটি ইউনো ব্যবহার করতে পারেন।
ধাপ 1: উপকরণ
এই প্রকল্পের জন্য আপনার প্রয়োজন হবে:
1x HID সক্ষম মাইক্রোকন্ট্রোলার (Arduino micro, Due & leonardo এর মত কিছু আছে, আমি Arduino Leonardo ব্যবহার করব)
1x ইউএসবি থেকে আরডুইনো ক্যাবল (লিওনার্দোর জন্য এটি ইউএসবি মাইক্রো)
3x আর্কেড বোতাম (আমি এগুলো কিনেছি)
1x ঝালহীন রুটিবোর্ড
3x 10k ওহম প্রতিরোধক
3x 220 ohm প্রতিরোধক
জাম্পার তার
আপনি অবশ্যই আরও বোতাম যুক্ত করতে পারেন, বা জিনিসগুলিকে আরও স্থায়ী করার জন্য রুটিবোর্ডে সবকিছু সোল্ডার করতে পারেন।
ধাপ 2: প্রোটোটাইপিং
সুতরাং, আমি যে আর্কেড বোতামগুলি ব্যবহার করতে চেয়েছিলাম তা কেনার আগে আমি স্ট্যান্ডার্ড পুশ বোতামগুলি দিয়ে এটি পরীক্ষা করেছি। স্ট্যান্ডার্ড উপায়ে বোতামগুলি আপ করুন, আমি বিশ্বাস করি আমি 10K ওহম প্রতিরোধক ব্যবহার করেছি।
প্রোগ্রামিং, লিওনার্দোকে ধন্যবাদ, বেশ সহজ। আপনাকে কীবোর্ড লাইব্রেরি অন্তর্ভুক্ত করতে হবে। আমি আমার কোডের ভিত্তি হিসাবে Arduino স্ট্যান্ডার্ড উদাহরণ "কীবোর্ড বার্তা" ব্যবহার করেছি।
এখন প্রশ্ন হল আপনি কিভাবে আপনার বোতামগুলি কাজ করতে চান। আপনার কাছে মূলত দুটি পছন্দ আছে, একক বোতাম টিপুন এবং ধাক্কা দিলে অক্ষরের ধারাবাহিক প্রবাহ। এটা সত্যিই আপনার প্রকল্পের উপর নির্ভর করে আপনি কি চান।
যদি আপনি কোন কিছুর একটি একক দৃষ্টান্ত ঘটতে চান যদি একটি কী চাপানো হয়, যেমন একটি জাম্প বা অন/অফ সুইচ তাহলে আপনি একক ধাক্কা পদ্ধতি বেছে নেবেন। এই পদ্ধতির সাহায্যে আপনি বোতামের অবস্থা দেখুন, এটি কি উপরে বা নিচে? তারপরে আপনি এটিকে আগের অবস্থার সাথে তুলনা করুন, এটি কি ইতিমধ্যে উপরে বা নীচে ছিল? যদি আগের বাটনের অবস্থা বর্তমান বাটনের অবস্থার মতো হয় তবে কিছুই হবে না। কিন্তু যদি বোতামের অবস্থা পরিবর্তন হয়, যেমন আপনি একটি বোতাম টিপুন বা ছেড়ে দিন কিছু ঘটে। আমার কোডে এটি কেবল একটি অক্ষর টাইপ করে যখন বোতামটি ধাক্কা দেওয়া হয়, যখন মুক্তি পায় না তবে আপনি এটি পরিবর্তন করতে পারেন।
#অন্তর্ভুক্ত "কীবোর্ড.এইচ"
const int buttonLeft = A0; // pushbutton এর জন্য ইনপুট পিন
const int buttonRight = A1; const int buttonUp = A2;
int previousButtonStateLeft = HIGH; // একটি pushButton অবস্থা পরীক্ষা করার জন্য
int previousButtonStateRight = HIGH; int previousButtonStateUp = HIGH;
অকার্যকর সেটআপ() {
// pushButton পিন একটি ইনপুট করুন: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // কীবোর্ডের উপর নিয়ন্ত্রণ শুরু করুন: Keyboard.begin (); }
অকার্যকর লুপ () {
// pushbutton পড়ুন: int buttonStateLeft = digitalRead (buttonLeft); // যদি বোতামের অবস্থা পরিবর্তিত হয়, যদি ((buttonStateLeft! = previousButtonStateLeft) // এবং এটি বর্তমানে চাপা থাকে: && (buttonStateLeft == HIGH)) {// টাইপ করুন একটি বার্তা Keyboard.print ("a"); } // পরের বার তুলনার জন্য বর্তমান বোতামের অবস্থা সংরক্ষণ করুন: previousButtonStateLeft = buttonStateLeft;
// pushbutton পড়ুন:
int buttonStateRight = digitalRead (buttonRight); // যদি বোতামের অবস্থা পরিবর্তিত হয়, যদি ((buttonStateRight! = previousButtonStateRight) // এবং এটি বর্তমানে চাপা থাকে: && (buttonStateRight == HIGH)) {// টাইপ করুন একটি বার্তা Keyboard.print ("w"); } // পরের বার তুলনার জন্য বর্তমান বোতামের অবস্থা সংরক্ষণ করুন: previousButtonStateRight = buttonStateRight;
// pushbutton পড়ুন:
int buttonStateUp = digitalRead (buttonUp); // যদি বোতামের অবস্থা পরিবর্তিত হয়, যদি ((buttonStateUp! = previousButtonStateUp) // এবং এটি বর্তমানে চাপা থাকে: && (buttonStateUp == HIGH)) {// টাইপ করুন একটি বার্তা Keyboard.print ("d"); } // পরের বার তুলনার জন্য বর্তমান বোতামের অবস্থা সংরক্ষণ করুন: previousButtonStateUp = buttonStateUp; }
আপনি যদি বাটন চাপলে যতক্ষণ অবিরাম কিছু ঘটতে চান, যেমন আপনি বাম বা ডানদিকে চলাচলের জন্য চান, ঠিক আগের বোতামের অবস্থা যাচাই না করেই তাকে একটি চিঠি লিখতে দিন। এটিকে পাগল হওয়া থেকে বিরত রাখতে এবং আপনার বোতামগুলির যে কোনও বাউন্স প্রতিহত করতে একটি ছোট বিলম্ব যুক্ত করতে ভুলবেন না। এই সমস্যা সমাধানের আরো মার্জিত উপায় আছে, কিন্তু এটি সহজ এবং দ্রুত।
#অন্তর্ভুক্ত "কীবোর্ড.এইচ"
const int buttonLeft = A0; // pushbutton এর জন্য ইনপুট পিন
const int buttonRight = A1; const int buttonUp = A2;
অকার্যকর সেটআপ() {
// pushButton পিন একটি ইনপুট করুন: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // কীবোর্ডের উপর নিয়ন্ত্রণ শুরু করুন: Keyboard.begin (); }
অকার্যকর লুপ () {
// pushbutton পড়ুন: int buttonStateLeft = digitalRead (buttonLeft); যদি (buttonStateLeft == HIGH) // যদি বোতাম টিপে থাকে {// টাইপ করুন একটি বার্তা Keyboard.print ("a"); বিলম্ব (50); // বাউন্সের জন্য বিলম্ব এবং আপনাকে কম্পিউটার ধরতে দেয়}
// pushbutton পড়ুন:
int buttonStateRight = digitalRead (buttonRight); যদি (buttonStateRight == HIGH) // যদি বোতাম টিপে থাকে {// টাইপ করুন একটি বার্তা Keyboard.print ("w"); বিলম্ব (50); // বাউন্সের জন্য বিলম্ব এবং আপনাকে কম্পিউটার ধরতে দেয়}
// pushbutton পড়ুন:
int buttonStateUp = digitalRead (buttonUp); যদি (buttonStateUp == HIGH) // যদি বোতাম টিপানো হয় {// টাইপ করুন একটি বার্তা Keyboard.print ("d"); বিলম্ব (50); // বাউন্সের জন্য বিলম্ব এবং আপনাকে কম্পিউটার ধরতে দিতে}}
আপনার প্রয়োজনের জন্য সবচেয়ে উপযুক্ত কি তার উপর নির্ভর করে আপনি সর্বদা উভয় পদ্ধতির মিশ্রণ ব্যবহার করতে পারেন।
ধাপ 3: কেস কাটার লেজার
কেসটির জন্য আমি 2 মিমি প্লেক্সিগ্লাস সন্নিবেশ সহ 3 মিমি এমডিএফ ব্যবহার করেছি। আমি সন্নিবেশ যোগ করেছি কারণ আমি পরবর্তী পর্যায়ে কেসটির ভিতরে কিছু এলইডি যুক্ত করতে চাই যাতে এটি সুন্দর এবং উজ্জ্বল হয়।
আমি আমার মাত্রা ম্যাকারকেসে ইনপুট করেছি এবং এসভিজি ফাইলটি ডাউনলোড করেছি। আমি এটি ইলাস্ট্রেটরে খুলেছি এবং যেখানে আমি তাদের চেয়েছিলাম সেখানে ছিদ্র যুক্ত করেছি। আপনার যদি ইলাস্ট্রেটর না থাকে তবে আপনি এই ধাপের জন্য ইঙ্কস্কেপ ব্যবহার করতে পারেন।
আপনার অবশ্যই লেজার কাটার ব্যবহার করার দরকার নেই, কারণ এটি একটি সাধারণ বাক্স যার মধ্যে কয়েকটি ছিদ্র রয়েছে। এটি আরো traditionalতিহ্যবাহী বিদ্যুৎ সরঞ্জাম (অথবা এমনকি হাত সরঞ্জাম!) ব্যবহার করে এটি তৈরি করা যথেষ্ট সহজ হওয়া উচিত আমি খুব অলস এবং লেজার কাটারের অ্যাক্সেস ছিল।
ধাপ 4: সোল্ডারিং আর্কেড বোতাম
একটি আর্কেড বোতাম (বা অন্তত আমার) তিনটি অংশ নিয়ে গঠিত। প্লাস্টিকের আবরণ, LED ধারক (এটিতে LED সহ) এবং মাইক্রো সুইচ। মাইক্রো সুইচটি বোতামের আসল বোতাম অংশ এবং এটি আপনার আরডুইনোতে সংযোগ করার জন্য আপনার প্রয়োজন হবে। মাইক্রো সুইচে তিনটি টার্মিনাল (ধাতব বিট যা আটকে থাকে, যেখানে আপনি আপনার তারগুলি সোল্ডার করবেন)। উপরে (বা নীচে, আপনি যা চান) মাটি। অন্য দুটি টার্মিনাল হল নরমাল ওপেন (NO) এবং নরমাল ক্লোজড (NC)। NO এর মানে হল যে সুইচ টিপলে এটি একটি সংযোগ তৈরি করে। NC এর মানে হল যে বোতাম টিপলে এটি সংযোগ বিচ্ছিন্ন করে। আমরা এই প্রকল্পের জন্য NO ব্যবহার করব। আমি ছবিতে আমার মাইক্রো সুইচে মাটি, NO এবং NC লেবেল করেছি।
আমার বোতামগুলি আলোকিত হয়েছে তাই আমি LED হোল্ডারের কাছে তারগুলি বিক্রি করেছি। আপনার তারের রঙ কোড নিশ্চিত করুন যাতে আপনি জানেন যে কোন দিকটি অ্যানোড এবং কোনটি ক্যাথোড (LED এর ইতিবাচক এবং নেতিবাচক দিক)।
আমি আমার তারের উপর হেডার পিন বিক্রি করেছি, যাতে সোল্ডারহীন রুটিবোর্ডের সাথে তাদের ব্যবহার করা সহজ হয়। আমি কেবল একটি হেডার পিনে তারের সোল্ডার করেছি এবং তাদের আরও স্থিতিস্থাপক করার জন্য কিছুটা তাপ সঙ্কুচিত টিউবিং রেখেছি।
ধাপ 5: বোতামগুলি স্ট্যাক করুন এবং তাদের আপনার বোর্ডের সাথে সংযুক্ত করুন
এখন আপনার ক্ষেত্রে আপনার আর্কেড বোতামগুলি স্ট্যাক করার সময়। প্লাস্টিকের আবরণ থেকে লকিং রিংটি সরান এবং কেসের ছিদ্র দিয়ে আটকে দিন। জায়গায় বাটনটি সুরক্ষিত করতে অন্য দিকে লকিং রিংটি থ্রেড করুন। এলইডি হোল্ডারে আটকে রাখুন এবং এটিকে লক করার জন্য টুইস্ট করুন। মাইক্রো সুইচগুলির মধ্যে চলাচল করুন (সেখানে ছোট ছোট গর্ত এবং ছিদ্র রয়েছে যা একে অপরের সাথে সারিবদ্ধভাবে এটিকে ধরে রাখে)।
বোর্ডের সাথে সুইচগুলিকে সংযুক্ত করতে আপনি যে পুশ বোতামগুলি যোগ করেছেন বা নাও করতে পারেন তা সরান। মাইক্রো সুইচের মাটি থেকে Arduino এবং প্রতিরোধকের (যেখানে পুশ বোতামের লেগ ছিল) মাটিতে যাওয়ার তারটি সংযুক্ত করুন। মাইক্রো সুইচের NO থেকে Arduino এর 5v এর দিকে যাওয়া তারের সাথে সংযোগ করুন।
এলইডি তারের জন্য মাটিতে নেতিবাচক তারের এবং ধনাত্মককে 220OHM প্রতিরোধকের মাধ্যমে 5v এর সাথে সংযুক্ত করুন। আপনি যদি তাদের এইভাবে সংযুক্ত করেন তবে সেগুলি সর্বদা চালু থাকবে। আপনি সেগুলিকে কোডে যোগ করতে পারেন এবং আপনি চাইলে বোতামগুলির সাথে সিঙ্ক করে চালু এবং বন্ধ করতে পারেন।
ধাপ 6: কোডিং হেল
সুতরাং, এখন আপনি আপনার অভিনব নতুন বোতামগুলি আপনার পুরানো কোডের সাথে সংযুক্ত করেছেন এবং হঠাৎ করে এটি আর কাজ করা উচিত নয়। অক্ষরগুলি একবারে দুই বা তিনটি প্রদর্শিত হয় এবং এটি সাধারণ HTML5 গেমগুলির মতো কাজ করে না। জাহান্নাম প্রত্যাহার করতে স্বাগতম।
আগেরটা আগে. প্রোটোটাইপিংয়ের সময় আমরা যে কোডটি লিখেছিলাম? এটি সূক্ষ্ম কাজ করে এবং সহজ, কিন্তু এটি মার্জিত নয়। আপনি যদি আরো বাটন যোগ করতে চান তাহলে আপনাকে কোডের স্নিপেট কপি এবং পেস্ট করতে হবে এবং তাদের ভিতরের সব মান পরিবর্তন করতে হবে। আপনি যদি তাদের মধ্যে একজনকে ভুলে যান তবে আপনি বাগ ফিক্সিং জাহান্নামে প্রবেশ করবেন। এখানে একটি থিম সনাক্ত? কোডিং নরক, কিন্তু একটি খুব মজার, সমস্যা সমাধানের নরক।
আমরা সুন্দর, সংক্ষিপ্ত কোড চাই। সুতরাং আমরা সমস্ত পৃথক বোতাম পূর্ণসংখ্যাকে অ্যারেতে পরিবর্তন করব। এইভাবে, যদি আপনি আরও বোতাম যুক্ত করতে চান তবে আপনাকে কেবল বোতামের পরিমাণ, পিনগুলি যেখানে অবস্থিত এবং তাদের আউটপুট পরিবর্তন করতে হবে। আমরা কী ইনপুটগুলিকে ASCII তেও পরিবর্তন করি কারণ … এটি আরও ভাল কাজ করে?
এখন যদি আপনি আমার মতো হন তবে আপনি বোতামগুলি ব্যবহার করার একটি সহজ এবং সহজ উপায় লিখবেন এবং এটি আপনার পছন্দ মতো কাজ করবে না। সুতরাং আপনি নতুন সংস্করণ তৈরি করুন (বাচ্চাদের মনে রাখবেন, ক্রমবর্ধমান ব্যাক-আপগুলি!), বিভিন্ন জিনিস চেষ্টা করুন, ক্রমাগত আরও জটিল কোড লিখুন যা এখনও ভাল কাজ করে না এবং অবশেষে কয়েক ঘন্টা আগে আপনার লেখা সহজ কোডটিতে ফিরে যান এবং একটি ছোট ত্রুটি লক্ষ্য করুন যা তাত্ক্ষণিকভাবে সবকিছু ঠিক করে দেয়।
আমাকে সেই যাত্রা থেকে রক্ষা করতে দিন, এখানে ওয়ার্কিং কোড:
অস্বীকৃতি: এই টেক্সটটি কোডিং এবং বাগ ফিক্স করার কয়েক ঘণ্টা পরে লেখা হয়েছে একটি খুব সহজ কোড। অনুগ্রহ করে হতাশার কোন লক্ষণ উপেক্ষা করুন এবং নীচে পোস্ট করা ওয়ার্কিং কোডের উপর মনোযোগ দিন;)
#অন্তর্ভুক্ত "কীবোর্ড.এইচ"#সংজ্ঞায়িত বোতামআমাউন্ট 3
int buttonPin = {
A0, A1, A2}; // বোতাম কোথায়? int asciiLetter = {97, 100, 119}; // ASCII- এ বর্ণ, এখানে: a, d, w int buttonState [buttonAmount]; // বোতাম ধাক্কা নাকি?
অকার্যকর সেটআপ() {
অ্যারে পিনমোডের মাধ্যমে (int i = 0; i <buttonAmount; i ++) {// চক্রের জন্য // সমস্ত পিন ইনপুটে সেট করুন}}
অকার্যকর লুপ () {
জন্য (int i = 0; i <buttonAmount; i ++) // চক্র অ্যারের মাধ্যমে {buttonState = digitalRead (buttonPin ); // বোতামগুলো কি করছে? যদি (buttonState == HIGH) {// বাটন চাপলে Keyboard.press (asciiLetter ); // সংশ্লিষ্ট চিঠি পাঠান} অন্যথায় // যদি বোতাম টিপে না থাকে {Keyboard.release (asciiLetter ); // চিঠি ছেড়ে দিন}}
}
ধাপ 7: সবকিছু কাজ করে
আপনার প্লাগ উপভোগ করুন এবং কাস্টম কন্ট্রোলার খেলুন!
যদি আপনি এই নির্দেশযোগ্য পছন্দ করেন, দয়া করে প্রতিযোগিতায় আমার জন্য ভোট দেওয়ার কথা বিবেচনা করুন!
প্রস্তাবিত:
কিভাবে একটি প্লাগ ঠিক করুন এবং স্যাটেলাইট রেডিও প্লে করুন।: 6 টি ধাপ
কিভাবে একটি প্লাগ এবং প্লে স্যাটেলাইট রেডিও ঠিক করবেন: আপনি শুরু করার আগে, আপনাকে আপনার ড্যাশবোর্ড বা কলামে স্যাটেলাইট রেডিও মাউন্ট করার জন্য সর্বোত্তম অবস্থান নির্ধারণ করতে হবে, এবং আপনার ’ ll একজন সকেট ড্রাইভার লাগবে, স্ক্রু ড্রাইভার এবং তারের কাটার
2-4 প্লেয়ার প্লাগ এবং প্লে রাস্পবেরি পাই আর্কেড: 11 ধাপ
2-4 প্লেয়ার প্লাগ এবং প্লে রাস্পবেরি পাই আর্কেড: প্লাগ করুন এবং খেলুন, কেবলমাত্র আপনার স্থানীয় ওয়ালমার্টে কেনা সেই নোংরা প্লাস্টিক গেম কনসোলের জন্য একটি শব্দ নয়। এই প্লাগ এবং প্লে আর্কেড ক্যাবিনেটের কাজ রয়েছে, একটি রাস্পবেরি পাই 3 চালিত রেট্রপি দ্বারা চালিত, এই মেশিনটি সম্পূর্ণ কাস্টমাইজেশন ক্ষমতা নিয়ে গর্ব করে
প্লাগ 'এন' প্লে রেট্রো আর্কেড কনসোল: 5 টি ধাপ (ছবি সহ)
প্লাগ 'এন' প্লে রেট্রো আর্কেড কনসোল: প্লাগ 'এন' প্লে রেট্রো আর্কেড কনসোল আপনার অনেক প্রিয় ক্লাসিক কনসোল এবং গেমগুলিকে এক ডিভাইসে প্যাক করে। সবচেয়ে ভালো দিক হল আপনার কনসোলকে আপনার টিভির ভিডিও ইনপুটের সাথে সংযুক্ত করতে হবে এবং আপনার সমস্ত এফএ উপভোগ করার জন্য একটি পাওয়ার সোর্সে সংযুক্ত করতে হবে
DIY বিল্ড মিনি ইউএসবি প্লাগ এবং প্লে স্পিকার (মাইক অপশন সহ): 3 টি ধাপ (ছবি সহ)
DIY বিল্ড মিনি ইউএসবি প্লাগ অ্যান্ড প্লে স্পিকার (মাইক অপশন সহ): হ্যালো বন্ধুরা! আমি আপনাকে পোর্টেবল স্পিকারের জন্য ব্যবহার করা একটি সহজ পদ্ধতি দেখাতে চেয়েছিলাম। এই পদ্ধতিটি সত্যিই খুব অনন্য কারণ " এই ধরনের বক্তাদের বিষয়ে কোন টিউটোরিয়াল নেই " কয়েকটি কারণ: আপনি কি কখনো কোন স্যু এর মুখোমুখি হয়েছেন?
Solderless ব্রেডবোর্ড লেআউট শীট (প্লাগ এবং প্লে ইলেকট্রনিক্স): 3 ধাপ (ছবি সহ)
সোল্ডারলেস ব্রেডবোর্ড লেআউট শীট (প্লাগ এবং প্লে ইলেকট্রনিক্স): এখানে একটি মজাদার সিস্টেম তৈরি করা হয়েছে যা সার্কিট ব্রেডবোর্ডিংয়ের সাথে জড়িত কিছু মাথাব্যথার যত্ন নেওয়ার জন্য তৈরি করা হয়েছে। একটি ভেক্টর অঙ্কন প্রোগ্রাম ব্যবহার করে আপনি কেবল সি সরান