নিয়ন্ত্রক#

ভূমিকা#

VEX EXP কন্ট্রোলারে কয়েকটি বাটন এবং দুটি জয়স্টিক রয়েছে। বাটন চাপা হয়েছে কিনা তা পরীক্ষা করতে, জয়স্টিকের নড়াচড়া পড়তে, কনফিগার করা কন্ট্রোলার অ্যাকশন চালু বা বন্ধ করতে, অথবা কন্ট্রোলার ইভেন্ট ঘটলে ফাংশন চালাতে কন্ট্রোলার মেথড ব্যবহার করা যায়।

কনফিগার করা কন্ট্রোলার অ্যাকশনগুলি হলো ডিভাইসেস মেনুতে সেট করা কন্ট্রোলারের আচরণ। একটি প্রোজেক্ট চলাকালীন সেই কনফিগার করা অ্যাকশনগুলিকে সাময়িকভাবে চালু বা বন্ধ করতে remote_control_code_enabled ব্যবহার করুন।

এই পৃষ্ঠায় উদাহরণ হিসেবে কন্ট্রোলারের নাম হিসেবে controller ব্যবহার করা হয়েছে। প্রয়োজন অনুযায়ী এটিকে আপনার নিজের কনফিগার করা নাম দিয়ে প্রতিস্থাপন করুন।

নিম্নে সকল উপলব্ধ পদ্ধতির একটি তালিকা দেওয়া হলো:

ক্রিয়া — কনফিগার করা কন্ট্রোলার ক্রিয়াকলাপগুলি চালু বা বন্ধ করুন।

  • remote_control_code_enabled — ডিভাইসেস মেনুতে কনফিগার করা কন্ট্রোলার অ্যাকশনগুলি সক্ষম বা অক্ষম করে।

গেটার — বাটনের অবস্থা এবং জয়স্টিকের অবস্থান পড়ে।

  • .pressing — নির্দিষ্ট বোতামটি চাপা হচ্ছে কিনা তা ফেরত দেয়।

  • .position — একটি নির্দিষ্ট জয়স্টিক অক্ষের অবস্থান ফেরত দেয়।

কলব্যাক — কন্ট্রোলারের ইনপুট পরিবর্তিত হলে ফাংশনগুলো চালায়।

  • .pressed — নির্দিষ্ট বোতাম চাপলে একটি ফাংশন চলে।

  • .released — নির্দিষ্ট বাটনটি ছেড়ে দিলে একটি ফাংশন চলে।

  • .changed — যখন জয়স্টিকের অবস্থান একটি নির্দিষ্ট অক্ষ বরাবর পরিবর্তিত হয় তখন একটি ফাংশন রান করে।

কনস্ট্রাক্টর — ম্যানুয়ালি একটি কন্ট্রোলার অবজেক্ট তৈরি করুন।

  • Controller — একটি কন্ট্রোলার অবজেক্ট তৈরি করে।

পদক্ষেপ#

remote_control_code_enabled#

remote_control_code_enabled হলো একটি ভ্যারিয়েবল যা ডিভাইসেস মেনুতে কনফিগার করা কন্ট্রোলার অ্যাকশনগুলো চালু বা বন্ধ করে। কন্ট্রোলারে কনফিগার করা অ্যাকশনগুলো ডিফল্টরূপে চালু থাকে।

Usage:
remote_control_code_enabled = state

মূল্য

বর্ণনা

True

কন্ট্রোলার দ্বারা কনফিগার করা ক্রিয়াকলাপগুলি সক্ষম করে।

False

কন্ট্রোলার দ্বারা কনফিগার করা ক্রিয়াকলাপগুলি নিষ্ক্রিয় করে।

# Drive forward or backward using the left joystick
remote_control_code_enabled = False

while True:
    if controller.axis3.position() > 0:
        drivetrain.drive(FORWARD)
    elif controller.axis3.position() < 0:
        drivetrain.drive(REVERSE)
    # Press A to use controller configured actions again
    elif controller.buttonA.pressing():
        break
    else:
        drivetrain.stop()

    wait(20, MSEC)

remote_control_code_enabled = True

গেটার্স#

.pressing#

.pressing কন্ট্রোলারের কোনো নির্দিষ্ট বাটন বর্তমানে চাপা আছে কিনা তা ফেরত দেয়। এই মেথডটি অবশ্যই একটি নির্দিষ্ট বাটন অবজেক্টে কল করতে হবে, যেমন controller.buttonA.

  • True — নির্দিষ্ট বাটনটি চাপা হচ্ছে।

  • False — নির্দিষ্ট বোতামটি চাপা হচ্ছে না।

ব্যবহার: এই পদ্ধতির সাথে উপলব্ধ বাটন অবজেক্টগুলোর মধ্যে
একটি ব্যবহার করা যেতে পারে:

EXP কন্ট্রোলারের সামনের এবং উপরের দিক, যেখানে জয়স্টিক, অ্যারো বাটন এবং অ্যাকশন বাটনগুলো হলুদ রঙে হাইলাইট করা আছে। কন্ট্রোলারের উপরিভাগে বাম এবং ডান দিকে দুটি জয়স্টিক রয়েছে, যার বাম দিকে আপ এবং ডাউন অ্যারো বাটন এবং ডান দিকে A এবং B বাটন আছে। কন্ট্রোলারের উপরের দিকে বাম পাশে L1 এবং L2 এবং ডান পাশে R1 এবং R2 রয়েছে।

বোতাম

আদেশ

buttonA

controller.buttonA.pressing() — A বাটন

buttonB

controller.buttonB.pressing() — B বাটন

buttonDown

controller.buttonDown.pressing() — ডাউন বাটন

buttonUp

controller.buttonUp.pressing() — উপরের বাটন

buttonL1

controller.buttonL1.pressing() — L1 বাটন

buttonL2

controller.buttonL2.pressing() — L2 বাটন

buttonL3

controller.buttonL3.pressing() — L3 বাটন

buttonR1

controller.buttonR1.pressing() — R1 বাটন

buttonR2

controller.buttonR2.pressing() — R2 বাটন

buttonR3

controller.buttonR3.pressing() — R3 বাটন

প্যারামিটার

বর্ণনা

এই পদ্ধতিতে কোনো প্যারামিটার নেই।

# Turn right while L1 is pressed
while True:
    if controller.buttonL1.pressing():
        drivetrain.turn(RIGHT)
    else:
        drivetrain.stop()

    wait(20, MSEC)

.position#

.position একটি জয়স্টিক অ্যাক্সিসের অবস্থানকে -100 থেকে 100 পর্যন্ত একটি সংখ্যা হিসাবে ফেরত দেয়।

এই মেথডটি একটি নির্দিষ্ট অ্যাক্সিস অবজেক্টে কল করতে হবে, যেমন controller.axis1।

ব্যবহার:
এই পদ্ধতির সাথে উপলব্ধ অক্ষ বস্তুগুলোর মধ্যে একটি ব্যবহার করা যেতে পারে:

EXP কন্ট্রোলারের সামনের দিক, যেখানে জয়স্টিকের অ্যাক্সিস নম্বরগুলো লাল রঙে হাইলাইট করা আছে। কন্ট্রোলারের উপরিভাগে, বাম জয়স্টিকটিকে ডানে-বামে নড়াচড়ার জন্য অ্যাক্সিস ৪ এবং উপরে-নিচে নড়াচড়ার জন্য অ্যাক্সিস ৩ হিসেবে চিহ্নিত করা হয়েছে, অন্যদিকে ডান জয়স্টিকটিকে ডানে-বামে নড়াচড়ার জন্য অ্যাক্সিস ১ এবং উপরে-নিচে নড়াচড়ার জন্য অ্যাক্সিস ২ হিসেবে চিহ্নিত করা হয়েছে।

অক্ষ

আদেশ

axis1

controller.axis1.position() — ডান জয়স্টিকের অনুভূমিক অক্ষ

axis2

controller.axis2.position() — ডান জয়স্টিকের উল্লম্ব অক্ষ

axis3

controller.axis3.position() — বাম জয়স্টিকের উল্লম্ব অক্ষ

axis4

controller.axis4.position() — বাম জয়স্টিকের অনুভূমিক অক্ষ

প্যারামিটার

বর্ণনা

এই পদ্ধতিতে কোনো প্যারামিটার নেই।

# Turn with the left joystick
remote_control_code_enabled = False

while True:
    if controller.axis4.position() > 10:
        drivetrain.turn(RIGHT)
    elif controller.axis4.position() < -10:
        drivetrain.turn(LEFT)
    else:
        drivetrain.stop()

    wait(20, MSEC)

কলব্যাক#

.pressed#

.pressed নির্দিষ্ট বাটনটি চাপলে একটি ফাংশন চালু করে। একবার ব্যবহার করা হলে, প্রতিবার বাটনটি চাপলে ফাংশনটি স্বয়ংক্রিয়ভাবে চালু হবে।

ব্যবহার: এই পদ্ধতির সাথে উপলব্ধ বাটন অবজেক্টগুলোর মধ্যে
একটি ব্যবহার করা যেতে পারে:

EXP কন্ট্রোলারের সামনের এবং উপরের দিক, যেখানে জয়স্টিক, অ্যারো বাটন এবং অ্যাকশন বাটনগুলো হলুদ রঙে হাইলাইট করা আছে। কন্ট্রোলারের উপরিভাগে বাম এবং ডান দিকে দুটি জয়স্টিক রয়েছে, যার বাম দিকে আপ এবং ডাউন অ্যারো বাটন এবং ডান দিকে A এবং B বাটন আছে। কন্ট্রোলারের উপরের দিকে বাম পাশে L1 এবং L2 এবং ডান পাশে R1 এবং R2 রয়েছে।

বোতাম

আদেশ

buttonA

controller.buttonA.pressed(callback, arg) — A বাটন

buttonB

controller.buttonB.pressed(callback, arg) — B বাটন

buttonDown

controller.buttonDown.pressed(callback, arg) — ডাউন বাটন

buttonUp

controller.buttonUp.pressed(callback, arg) — উপরের বাটন

buttonL1

controller.buttonL1.pressed(callback, arg) — L1 বাটন

buttonL2

controller.buttonL2.pressed(callback, arg) — L2 বাটন

buttonL3

controller.buttonL3.pressed(callback, arg) — L3 বাটন

buttonR1

controller.buttonR1.pressed(callback, arg) — R1 বাটন

buttonR2

controller.buttonR2.pressed(callback, arg) — R2 বাটন

buttonR3

controller.buttonR3.pressed(callback, arg) — R3 বাটন

প্যারামিটার

বর্ণনা

callback

নির্দিষ্ট বাটনটি প্রতিবার চাপলে চলার জন্য পূর্বে সংজ্ঞায়িত একটি ফাংশন।

arg

ঐচ্ছিক। কলব্যাক ফাংশনে পাস করার জন্য আর্গুমেন্ট ধারণকারী একটি টাপল। আরও তথ্যের জন্য প্যারামিটার সহ ইভেন্টের ব্যবহার দেখুন।

# Drive forward when R1 is pressed
def drive_forward():
    drivetrain.drive_for(FORWARD, 200, MM)

controller.buttonR1.pressed(drive_forward)

.released#

.released নির্দিষ্ট বাটনটি ছেড়ে দিলে একটি ফাংশন চালায়। একবার এটি ব্যবহার করা হলে, প্রতিবার বাটনটি ছেড়ে দিলে ফাংশনটি স্বয়ংক্রিয়ভাবে চলবে।

ব্যবহার: এই পদ্ধতির সাথে উপলব্ধ বাটন অবজেক্টগুলোর মধ্যে
একটি ব্যবহার করা যেতে পারে:

EXP কন্ট্রোলারের সামনের এবং উপরের দিক, যেখানে জয়স্টিক, অ্যারো বাটন এবং অ্যাকশন বাটনগুলো হলুদ রঙে হাইলাইট করা আছে। কন্ট্রোলারের উপরিভাগে বাম এবং ডান দিকে দুটি জয়স্টিক রয়েছে, যার বাম দিকে আপ এবং ডাউন অ্যারো বাটন এবং ডান দিকে A এবং B বাটন আছে। কন্ট্রোলারের উপরের দিকে বাম পাশে L1 এবং L2 এবং ডান পাশে R1 এবং R2 রয়েছে।

বোতাম

আদেশ

buttonA

controller.buttonA.released(callback, arg) — A বাটন

buttonB

controller.buttonB.released(callback, arg) — B বাটন

buttonDown

controller.buttonDown.released(callback, arg) — ডাউন বাটন

buttonUp

controller.buttonUp.released(callback, arg) — উপরের বাটন

buttonL1

controller.buttonL1.released(callback, arg) — L1 বাটন

buttonL2

controller.buttonL2.released(callback, arg) — L2 বাটন

buttonL3

controller.buttonL3.released(callback, arg) — L3 বাটন

buttonR1

controller.buttonR1.released(callback, arg) — R1 বাটন

buttonR2

controller.buttonR2.released(callback, arg) — R2 বাটন

buttonR3

controller.buttonR3.released(callback, arg) — R3 বাটন

প্যারামিটার

বর্ণনা

callback

নির্দিষ্ট বাটনটি প্রতিবার রিলিজ করা হলে রান করার জন্য পূর্বে সংজ্ঞায়িত একটি ফাংশন।

arg

ঐচ্ছিক। কলব্যাক ফাংশনে পাস করার জন্য আর্গুমেন্ট ধারণকারী একটি টাপল। আরও তথ্যের জন্য প্যারামিটার সহ ইভেন্টের ব্যবহার দেখুন।

# Stop driving when R1 is released
def stop_driving():
    drivetrain.stop()

controller.buttonR1.released(stop_driving)

.changed#

.changed নির্দিষ্ট অক্ষ বরাবর জয়স্টিকের অবস্থান পরিবর্তিত হলে একটি ফাংশন চালায়। একবার এটি ব্যবহার করা হলে, সেই অক্ষ বরাবর জয়স্টিকের অবস্থান যতবারই পরিবর্তিত হবে, ফাংশনটি স্বয়ংক্রিয়ভাবে চলবে।

ব্যবহার:
এই পদ্ধতির সাথে উপলব্ধ অক্ষ বস্তুগুলোর মধ্যে একটি ব্যবহার করা যেতে পারে:

EXP কন্ট্রোলারের সামনের দিক, যেখানে জয়স্টিকের অ্যাক্সিস নম্বরগুলো লাল রঙে হাইলাইট করা আছে। কন্ট্রোলারের উপরিভাগে, বাম জয়স্টিকটিকে ডানে-বামে নড়াচড়ার জন্য অ্যাক্সিস ৪ এবং উপরে-নিচে নড়াচড়ার জন্য অ্যাক্সিস ৩ হিসেবে চিহ্নিত করা হয়েছে, অন্যদিকে ডান জয়স্টিকটিকে ডানে-বামে নড়াচড়ার জন্য অ্যাক্সিস ১ এবং উপরে-নিচে নড়াচড়ার জন্য অ্যাক্সিস ২ হিসেবে চিহ্নিত করা হয়েছে।

অক্ষ

আদেশ

axis1

controller.axis1.changed(callback, arg) — ডান জয়স্টিকের অনুভূমিক অক্ষ

axis2

controller.axis2.changed(callback, arg) — ডান জয়স্টিকের উল্লম্ব অক্ষ

axis3

controller.axis3.changed(callback, arg) — বাম জয়স্টিকের উল্লম্ব অক্ষ

axis4

controller.axis4.changed(callback, arg) — বাম জয়স্টিকের অনুভূমিক অক্ষ

প্যারামিটার

বর্ণনা

callback

নির্দিষ্ট অক্ষ বরাবর জয়স্টিকের অবস্থান প্রতিবার পরিবর্তিত হওয়ার সাথে সাথে চালানোর জন্য পূর্বে সংজ্ঞায়িত একটি ফাংশন।

arg

ঐচ্ছিক। কলব্যাক ফাংশনে পাস করার জন্য আর্গুমেন্ট ধারণকারী একটি টাপল। আরও তথ্যের জন্য প্যারামিটার সহ ইভেন্টের ব্যবহার দেখুন।

# Play a sound when the left joystick moves
def beep():
    brain.play_sound(SoundType.TADA)

controller.axis3.changed(beep)

নির্মাণকারী#

Controller#

Controller একটি কন্ট্রোলার অবজেক্ট তৈরি করে। VEXcode-এর বাইরে কোনো কন্ট্রোলার কনফিগার করার সময়ই কেবল ম্যানুয়ালি একটি কন্ট্রোলার অবজেক্ট তৈরি করার প্রয়োজন হয়।

Usage:
Controller()

প্যারামিটার

বর্ণনা

এই কনস্ট্রাক্টরের কোনো প্যারামিটার নেই।

# Create a Controller object
my_controller = Controller()