পৃথক ট্যাব / শিরোনাম ফাইলে সিরিয়াল.প্রিন্ট কল করুন


9

আমি আরডিনো 0022 তে একটি প্রোগ্রাম লিখছি।

কলিংটি Serial.printlnআমার প্রধান স্কেচ কোডে ঠিকঠাক কাজ করে, তবে যখন আমি Menu.hআলাদাভাবে ট্যাবে থাকা আমার শিরোনামের ফাইলটিতে " " এটি ব্যবহার করার চেষ্টা করি তখন আমি একটি ত্রুটি পাই:

অ্যাপকন্ট্রোলার.পিপি: 2:
মেনু এইচ: কনস্ট্রাক্টারে 'মেনু :: মেনু ()': মেনু
এইচ: 15: ত্রুটি: 'সিরিয়াল' এই স্কোপটিতে ঘোষিত হয়নি বলে ফাইলটিতে অন্তর্ভুক্ত রয়েছে

আমি কীভাবে Serial.printlnস্কেচ কোডের বাইরে ব্যবহার করতে পারি ?

উত্তর:


3

হেডার ফাইলগুলির মধ্যে থেকে আপনাকে ফাংশনগুলি কল করা উচিত নয়। শিরোনাম ফাইলগুলি প্রাক প্রসেসর ম্যাক্রোস (# ডেফাইন) সংজ্ঞায়িত করার জন্য এবং অন্যান্য ফাইলগুলিতে ভেরিয়েবল / ফাংশনগুলির রেফারেন্সের জন্য।

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

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

এই সংজ্ঞাগুলি "বাহ্যিক" বৈশিষ্ট্যের সাথে যোগ্য হওয়া উচিত।

তারপরে আপনাকে এক বা একাধিক "পিডিই" ফাইল যুক্ত করতে হবে যা ফাংশনের জন্য আসল কোড এবং পরিবর্তনশীল সংজ্ঞা রয়েছে।

উদাহরণস্বরূপ, আমার কাছে একটি "মাউস.h" ফাইল রয়েছে:

extern void mouse_read(char *,char *, char *);
extern void mouse_init();

এবং একটি "মাউস.পিডি" ফাইল:

#include <ps2.h>

PS2 mouse(6,5);

void mouse_read(char *stat,char *x, char *y)
{
  mouse.write(0xeb);  // give me data!
  mouse.read();      // ignore ack
  *stat = mouse.read();
  *x = mouse.read();
  *y = mouse.read();
}

void mouse_init()
{
  mouse.write(0xff);  // reset
  mouse.read();  // ack byte
  mouse.read();  // blank */
  mouse.read();  // blank */
  mouse.write(0xf0);  // remote mode
  mouse.read();  // ack
  delayMicroseconds(100);
}

তারপরে আমার প্রধান ফাইলে আমার কাছে রয়েছে:

#include "mouse.h"

এবং আমি "মাউস.পিডি" এ থাকা ফাংশনগুলিকে কল করতে পারি যেন তারা স্থানীয় ফাইলে থাকে।


ধন্যবাদ মাজেঙ্কো, আপনার উত্তরটি আমার কাছে একজন নবাগত সি ++ কোডার হিসাবে খুব সহায়ক, এবং আমি অবশ্যই আপনার পরামর্শ গ্রহণ করব। তবুও কেন সিরিয়াল ক্লাস মূল স্কেচের বাইরে পাওয়া যায় না সে সম্পর্কে আমি আরও আগ্রহী ছিলাম। চিয়ার্স!
আ’ইদন

3

@ মাজেঙ্কোর খুব ভাল উত্তরের বিকল্প হিসাবে, আপনি আপনার ফাংশনগুলি encapsulate করতে একটি সি ++ বর্গ তৈরি করতে পারেন এবং এটি http://www.arduino.cc/en/Hacking/LibraryTutorial এ বর্ণিত লাইব্রেরি ফোল্ডারে রেখে দিতে পারেন ।

আপনার দরকার হতে পারে #include <Serial.h>আপনার বর্গ বাস্তবায়ন ফাইলে সিরিয়াল পদ্ধতি কল করতে পারবেন না। সিরিয়াল ফাংশন (বিশেষত পড়ুন) কল করার স্পষ্টত পার্শ্ব প্রতিক্রিয়া রয়েছে বলে আমি এই কাজটি সম্পর্কে সতর্ক থাকব। আমি আমার ক্লাসে এমন একটি পদ্ধতি সংজ্ঞায়িত করতে পছন্দ করি যা একটি সিরিয়াল ইন্টারফেস থেকে সরাসরি সিরিয়াল ইন্টারফেসের সাথে সরাসরি ইন্টারেক্ট করার পরিবর্তে একটি সিরিয়াল ইন্টারফেস থেকে বাইটগুলি পাস করে pass


#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif

ওহে! হ্যাঁ, আমি সিরিয়াল.এইচ বা এর অনুরূপ আরডুইনো লাইব্রেরি ডিরেক্টরিতে ঘুরে দেখেছিলাম এবং আমি যা খুজতে পেরেছি তা হার্ডওয়্যারশিরল.ই, যা আমার প্রয়োজনীয় সংজ্ঞাগুলি ধারণ করে না। শেষ পর্যন্ত আমি <ডাব্লুপ্রগ্রামগ্রাম>> অন্তর্ভুক্ত করার সমাধানে হোঁচট খেয়েছি, যা সিরিয়াল অবজেক্টটিকে ঘোষণা করে বলে মনে হচ্ছে।
আ’ইদন

0

আমি Serialশিরোনাম ফাইল / ট্যাবগুলিতে ক্লাস / অবজেক্টটি ঘোষণার একটি উপায় খুঁজে পেয়েছি :

#include <WProgram.h>  // at the top of the file

এটি আমার কাছে খুব পরিষ্কার মনে হয় না তবে এটির কোনও ত্রুটি আছে বলে মনে হয় না।


1
ঠিক আছে, আপনি যদি নিশ্চিত হন যে আপনি আরডুইনো ১.০ সামঞ্জস্যপূর্ণ হন তবে আপনাকে শর্তসাপেক্ষে এটি বা "আরডুইনো এইচ" অন্তর্ভুক্ত করা উচিত আর্মুইনো সংকলনের পতাকার উপর নির্ভর করে আমার উত্তরটি বিশদভাবে দেখুন। এছাড়াও, আমার উত্তরের টিউটোরিয়াল লিঙ্কটি সর্বদা আপনার ক্লাসে ডাব্লুগ্রোগ.হ.কে অন্তর্ভুক্ত করতে বলে
ভিস্যাটাকু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.