আমি কেন আরডুইনো আইডিইতে অন্য ট্যাবে ক্লাস ঘোষণা করতে পারি না?


20

জিনিসগুলি আরও সুসংহত রাখতে আমি আমার কোডের কিছুটি আর্ডুইনো আইডিইতে একটি দ্বিতীয় ট্যাবে সরিয়ে নিয়ে যেতে চেয়েছিলাম। প্রথমদিকে, আমি কেবল একটি ফাংশন সরিয়ে নেওয়ার চেষ্টা করেছি এবং দেখে মনে হচ্ছে এটি ঠিক আছে। আমি setup()আমার মূল ট্যাবে ফাংশনটি থেকে কল করতে পারি এবং সংকলন বা আপলোড করার কোনও সমস্যা ছিল না।

যাইহোক, আমি দ্বিতীয় ট্যাবে পুরো ক্লাস স্থাপনের চেষ্টা করেছি, এবং হঠাৎ এটি আর কাজ করে না। উদাহরণ স্বরূপ:

ট্যাব 1:

TestClass obj;

void setup()
{
    obj.init();
}

void loop()
{
    //...
}

ট্যাব 2:

class TestClass
{
public:
    void init()
    {
        //...
    }
};

আমি এটি সংকলনের চেষ্টা করার সময় এটি আমাকে নিম্নলিখিত ত্রুটিগুলি দিয়েছিল:

tab1:1: error: 'TestClass' does not name a type
tab1.ino: In function 'void setup()':
tab1:5: error: 'obj' was not declared in this scope

এটি অন্য ট্যাবে কোনও ক্রিয়াকলাপটি কেন স্বীকৃতি দেয় তবে শ্রেণি নয়? এটি আরডুইনো আইডিইতে কাজ করার কোনও উপায় আছে, বা আমাকে কি গ্রহগ্রহের মতো বিকল্প ব্যবহার করা উচিত?


এটি কি কোডের সম্পূর্ণতা? ফাইলের নাম কি? প্রিপ্রোসেসর এর মতো কোনও নির্দেশিকা নেই #include?
asheeshr

হ্যাঁ, এটি কোডের সম্পূর্ণতা। ট্যাবগুলির নাম tab1এবং tab2যথাক্রমে নামকরণ করা হয়েছে। নামগুলি আইডিই ব্যবহার করে সেট করা হয়েছিল, সুতরাং অন্তর্নিহিত ফাইলগুলি উভয়ই .ino
পিটার ব্লুমফিল্ড

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

উত্তর:


13

আরডুইনো আইডিইয়ের মধ্যে থেকে .pdeঅন্য .pdeফাইলে একটি ফাইলে ঘোষিত ক্লাসগুলি ঘোষণা করা এবং ব্যবহার করা সম্ভব নয় ।

একটি কর্মসূচী হ'ল দ্বিতীয় ফাইলটিকে সি ++ উত্স ফাইল ( .cpp) করা এবং তারপরে #include "<filename>"প্রথম ফাইলের শুরুতে একটি নির্দেশ যুক্ত করা ।


এই কোডটি সঠিকভাবে সংকলন করে:

ট্যাব 1:

#include "test.cpp"

TestClass obj;

void setup()
{
    obj.init();
}

void loop()
{
    //...
}

test.cpp:

class TestClass
{
public:
    void init()
    {
        //...
    }
};

কর্মক্ষেত্রের জন্য ধন্যবাদ। এটি বেসিক উদাহরণের জন্য কাজ করে, তবে দুর্ভাগ্যক্রমে আমি যদি .cpp ফাইলে কোনও আরডিনো-নির্দিষ্ট কল যুক্ত করি তবে এটি কাজ করে না। উদাহরণস্বরূপ, যদি TestClass::init()কল করার চেষ্টা করা হয় pinMode(), সংকলক অভিযোগ করে যে pinModeএই সুযোগে ঘোষণা করা হয়নি। আমার ক্লাসে আরডুইনো ফাংশনগুলি অ্যাক্সেস করার কোনও উপায় আছে?
পিটার ব্লুমফিল্ড

6
@ পিটারআর.ব্লুমফিল্ড ফাইলের #include <Arduino.h>শীর্ষে একটি যুক্ত .cppকরুন।
asheeshr

1
আমি মনে করি অন্যদের উত্স ফাইল ( #include "test.cpp") অন্তর্ভুক্ত করতে শেখানো ভাল নয় । এটি কাজ করে তবে লিঙ্কিংয়ের প্রক্রিয়াটির বোঝা ভেঙে দিতে পারে। কেবল শিরোনামের ফাইলগুলি অন্তর্ভুক্ত করা উচিত।
মঙ্গল

1
আমি @ মার্সের সাথে একমত - একটি আরও ভাল সমাধান হ'ল ক্লাসের ডিক্লারেশনটিকে একটি .h ফাইলে এবং সংজ্ঞা (বাস্তবায়ন) কে একটি .cpp ফাইলে রাখা। সুতরাং আপনার প্রকল্পে দুটি অতিরিক্ত ফাইল রয়েছে। এটি আসলে ক্লাস পরিচালনা করার স্বাভাবিক উপায়।
নিক দম্ভোক্তি

6

আরডুইনো আইডিই যেভাবে কাজ করে তা হ'ল এটি আপনার কোড (আইডিইতে আপনি যে কোডটি লেখেন) "মূল" কোড হিসাবে সংকলন করে। তারপরে এটি আপনার আমদানি করা সমস্ত লাইব্রেরি থেকে কোড টান এবং মূল কোড সহ এটি সংকলন করে। আপনি যা পরামর্শ দিচ্ছেন তা করার জন্য আপনাকে আরডুইনোর জন্য একটি গ্রন্থাগার তৈরি করতে হবে।

এখানে আরডুইনো লাইব্রেরি সম্পর্কে আরও কিছু তথ্য রয়েছে:

http://arduino.cc/en/Guide/Libraries

এবং একটি লাইব্রেরি কীভাবে তৈরি করা যায় সে সম্পর্কে এখানে কিছু দেওয়া আছে:

http://arduino.cc/en/Hacking/LibraryTutorial // এই এক থেকে সহজে বুঝতে নিচ হয়
http://playground.arduino.cc/Code/Library
http://www.divilabs.com/2013/03/ লেখা-আপনার-নিজের-Arduino-library.html #

এখানে https://github.com/jamolnng/Ardino/tree/master/libraries/ShiftRegister লিখেছেন এমন একটি উদাহরণ লাইব্রেরি যা আপনি দেখতে পাচ্ছেন .cpp ফাইল থেকে আরডুইনো ফাংশনগুলি কল করতে কোনও সমস্যা নেই (আমি জানি, আমি গ্রন্থাগার পরীক্ষা করা)


3
পৃথক গ্রন্থাগার তৈরি না করে আপনার মূল প্রকল্পে কেবল ফাইল তৈরি করা .hএবং .cppফাইলগুলি তৈরি করাও সম্ভব ।
microtherion
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.