সুচিপত্র:

একটি Arduino থেকে অন্যটিতে সংখ্যাসূচক তথ্য পাঠান: 16 টি ধাপ
একটি Arduino থেকে অন্যটিতে সংখ্যাসূচক তথ্য পাঠান: 16 টি ধাপ

ভিডিও: একটি Arduino থেকে অন্যটিতে সংখ্যাসূচক তথ্য পাঠান: 16 টি ধাপ

ভিডিও: একটি Arduino থেকে অন্যটিতে সংখ্যাসূচক তথ্য পাঠান: 16 টি ধাপ
ভিডিও: MKS Monster8 - Basics 2024, জুলাই
Anonim
এক Arduino থেকে অন্যটিতে সংখ্যাসূচক ডেটা পাঠান
এক Arduino থেকে অন্যটিতে সংখ্যাসূচক ডেটা পাঠান

ভূমিকা

ডেভিড পামার, সিডিআইও টেক। অ্যাস্টন বিশ্ববিদ্যালয়ে।

আপনার কি কখনও একটি আরডুইনো থেকে অন্যটিতে কিছু নম্বর পাঠানোর দরকার ছিল? এই নির্দেশযোগ্য কিভাবে দেখায়।

আপনি সিরিয়াল মনিটর টার্মিনালে পাঠানোর জন্য সংখ্যার একটি স্ট্রিং টাইপ করে সহজেই এটি পরীক্ষা করতে পারেন এবং দ্বিতীয় Arduino এর সাথে সংযুক্ত একটি দ্বিতীয় সিরিয়াল মনিটরে নম্বরগুলি ফিরে আসে। আপনি এমনকি একটি ব্লুটুথ লিঙ্ক ব্যবহার করতে পারেন।

এর মানে কি

দুটি Arduino প্রোগ্রাম (Arduino ভাষায় স্কেচ) উন্নয়নশীল প্রয়োজন, Arduino সিরিয়াল মনিটর চালানো হোস্ট কম্পিউটারের সাথে সংযোগ করার জন্য একটি মাস্টার প্রোগ্রাম, মাস্টারের কাছ থেকে সিরিয়াল বার্তা পাওয়ার জন্য দাস হিসেবে কাজ করার জন্য, এটি ডিকোড করে এবং ফেরত পাঠাতে। ক্রীতদাস allyচ্ছিকভাবে একটি দ্বিতীয় IDE এর সিরিয়াল মনিটরের সাথে যে সংখ্যাগুলি নিয়ে কাজ করছে তা প্রদর্শন করতে সক্ষম - যদি আপনি এটি ব্যবহার করতে চান। এটি জিনিসগুলিকে প্রথম স্থানে কাজ করতে সাহায্য করতে পারে এবং আপনি যদি আপনার নিজের প্রয়োজনীয়তা অনুসারে প্রোগ্রামগুলিতে কোনও পরিবর্তন করার সিদ্ধান্ত নেন তবে আপনাকে সহায়তা করতে পারে।

সরঞ্জাম

  • 2 Arduino এর
  • 2 ইউএসবি লিড
  • প্যাচ তার (প্রয়োজনীয় হিসাবে)
  • 1 পিসি/ল্যাপটপ Arduino IDE দিয়ে লোড করা হয়েছে (Arduino.cc ওয়েবসাইট থেকে বিনামূল্যে ডাউনলোড হিসাবে পাওয়া যায়)

ধাপ 1: সেট আপ - প্রথমে আপনার হার্ডওয়্যার সেট আপ করুন

সেট আপ - প্রথমে আপনার হার্ডওয়্যার সেট আপ করুন
সেট আপ - প্রথমে আপনার হার্ডওয়্যার সেট আপ করুন
সেট আপ - প্রথমে আপনার হার্ডওয়্যার সেট আপ করুন
সেট আপ - প্রথমে আপনার হার্ডওয়্যার সেট আপ করুন

আপনার কম্পিউটারে 2 টি USB পোর্টে 2 Arduinos প্লাগ করুন।

টিপ, তাদের এম এবং এস (মাস্টার এবং স্লেভ) হিসাবে লেবেল করা একটি ভাল ধারণা যাতে আপনি পরে কোনও গন্ডগোলে না পড়েন (যেমন এখানে 2 টি ছবিতে দেখানো হয়েছে।)

পদক্ষেপ 2: সেট আপ - আপনার পর্দা সেট করুন

সেট আপ - আপনার পর্দা সেট করুন
সেট আপ - আপনার পর্দা সেট করুন

সবচেয়ে ভালো জিনিস হল আপনার স্ক্রিন সেট আপ করা যাতে আপনার থাকে

  • আইডিই বাম দিকে মাস্টার প্রোগ্রামের সাথে লোড করা হয়েছে এবং
  • যেটি ডানদিকের ক্রীতদাসের সাথে।

এখানে স্ক্রিন শটে যেমন দেখানো হয়েছে বাম এবং ডানদিকে মাসার এবং স্লেভের জন্য সিরিয়াল মনিটর রাখুন।

ধাপ 3: মাস্টার এন্ড সেট -আপ করুন, তারপর একসাথে সংযোগ করুন - পার্ট 1

মাস্টার এন্ড সেট -আপ করুন, তারপর একসাথে কানেক্ট করুন - পার্ট 1
মাস্টার এন্ড সেট -আপ করুন, তারপর একসাথে কানেক্ট করুন - পার্ট 1

যখন আপনি দুটি নম্বর পাঠানোর জন্য আপনার মাস্টার এন্ড সিরিয়াল মনিটর সেট আপ করেন, তখন আপনাকে এখানে শুরু এবং শেষ, ডিলিমিটার অক্ষর এবং কমা বিভাজক চরিত্র ব্যবহার করতে হবে।

আপনি এখন সিরিয়াল উপর 2 Arduino এর একসঙ্গে সংযোগ করতে হবে। এটি দুটি প্যাচ তার দিয়ে করা হয়।

আমি সবুজ এবং হলুদ ব্যবহার করেছি

  • প্রথমে হলুদ নিন, এটি অবশ্যই একটি আরডুইনোতে ডি 6 এবং দ্বিতীয়টিতে ডি 7 প্লাগ করতে হবে
  • তারপর সবুজ তারের জন্য বিপরীত, প্রথমটিতে D7 এবং দ্বিতীয় Arduino এ D6।

বিকল্পভাবে, যদি আপনার কাছে ব্লুটুথ মডিউল -এর মত কিছু পাওয়া যায় - যেমন HC -05 এর - এগুলিও আপনাকে উপরের তারের মতো একই প্রভাব দিতে কাজ করবে।

ধাপ 4: মাস্টার এন্ড সেট -আপ করুন, তারপর একসাথে সংযোগ করুন - পার্ট 2

মাস্টার এন্ড সেট -আপ করুন, তারপর একসাথে কানেক্ট করুন - পার্ট 2
মাস্টার এন্ড সেট -আপ করুন, তারপর একসাথে কানেক্ট করুন - পার্ট 2
মাস্টার এন্ড সেট -আপ করুন, তারপর একসাথে কানেক্ট করুন - পার্ট 2
মাস্টার এন্ড সেট -আপ করুন, তারপর একসাথে কানেক্ট করুন - পার্ট 2

আমরা সফটওয়্যার সিরিয়াল লাইব্রেরি ব্যবহার করছি। এই লিঙ্ক https://www.arduino.cc/en/Reference/Libraries- এর মাধ্যমে আরও তথ্য পাওয়া যাবে।

আপনি এটি প্রোগ্রামের যেকোনো একটি লাইন 7 এ কল-আউট দেখতে পারেন। এটি পিন ডিজিটাল 7 এবং 6 কে TX এবং RX (প্রেরণ এবং গ্রহণ) হিসাবে কনফিগার করে। এভাবেই মাস্টার আরডুইনো থেকে ডাটা সবুজ তারের মাধ্যমে স্লেভে ভ্রমণ করবে, এবং, যখন দ্বিতীয় আরডুইনোতে স্লেভ প্রোগ্রাম তার কাজ শেষ করে, হলুদ তারের মাধ্যমে ফিরে আসবে। একই দৃষ্টান্তের নীচে (সিরিয়াল মনিটর উইন্ডোতে) আপনি দেখতে পাচ্ছেন যে আমরা যে ডেটা প্রেরণ করেছি তা এখন এখানে বর্ণিত লুপের কাছাকাছি চলে গেছে এবং পূর্ণসংখ্যার জোড়াটি চমৎকারভাবে আলাদা হয়ে পিসিতে ফিরে আসে।

ধাপ 5: স্কেচ / প্রোগ্রামগুলির পর্যালোচনা - প্রোগ্রামের কাঠামো

স্কেচ / প্রোগ্রামগুলির সংক্ষিপ্ত বিবরণ - প্রোগ্রামের কাঠামো
স্কেচ / প্রোগ্রামগুলির সংক্ষিপ্ত বিবরণ - প্রোগ্রামের কাঠামো
স্কেচ / প্রোগ্রামগুলির সংক্ষিপ্ত বিবরণ - প্রোগ্রামের কাঠামো
স্কেচ / প্রোগ্রামগুলির সংক্ষিপ্ত বিবরণ - প্রোগ্রামের কাঠামো

সমস্ত Arduino স্কেচের মতো লেআউটটিতে 3 টি মৌলিক অংশ রয়েছে:

  • ঘোষণাপত্র
  • সেটআপ
  • প্রধান লুপ

প্রায়শই ঘটে, আমরা এখানে একটি 4th র্থ বিভাগ ব্যবহার করেছি যা 'ফাংশন' এর সংযোজন। আপনি যদি ফাংশন ব্যবহার করার সাথে পরিচিত না হন তবে আপনি "Arduino ফাংশন" এর জন্য গুগল করতে পারেন এবং আপনি এই লিঙ্কে উদাহরণের মতো ব্যাখ্যা সাইট পাবেন: www.tutorialspoint.com/arduino/arduino_functions…। ।

প্রোগ্রামকে আরও পরিচালনাযোগ্য ব্লকে বিভক্ত করার জন্য আমরা ট্যাব ব্যবহার করেছি।

আমরা যে তিনটি ব্লক ব্যবহার করেছি তা উপরের IDE জানালার প্রতিটি দৃষ্টান্তের শীর্ষে দেখা যাবে:

  • simpleRxTx0330 মাস্টার
  • সাধারণ
  • মন্তব্য

এগুলি আসলে প্রোগ্রামের ফোল্ডারের ভিতরে আলাদা ফাইল, যেমন আপনি স্লেভ প্রোগ্রামের ফাইলগুলির এই উইন্ডোজ এক্সপ্লোরার ভিউতে দেখতে পারেন।

আমরা কেন এটি করেছি তার একটি খুব ভাল কারণ রয়েছে।

  • যখন আমরা প্রোগ্রামটি তৈরি করছিলাম তখন আমরা বুঝতে পেরেছিলাম যে মাস্টারের জন্য বেশিরভাগ প্রোগ্রাম দাসের জন্য একই ছিল।
  • আমরা সমস্ত সাধারণ অংশগুলিকে একটি ট্যাবে টানতে শেষ করেছিলাম, যার নাম আমরা "সাধারণ" রেখেছিলাম, এবং তারপর প্রতিবার যখন আমরা একটি অংশ ডিবাগ করেছি (এটি পরীক্ষা করেছি, এবং সন্তুষ্ট ছিল যে এটি ঠিক কাজ করেছে) আমরা কেবল সেই পুরো ট্যাবটি কপি-পেস্ট করেছি মাস্টার থেকে স্লেভ জুড়ে, অথবা উল্টোদিকে ভিসা।
  • নোট ট্যাবগুলি একই রকম হতে পারে, কারণ নকশাটি সাধারণ।

কোন ফাংশনকে সেটআপ থেকে বলা হয় না, সেগুলো সবই লুপ থেকে বলা হয়, তাই আমরা সেগুলো সেটআপের পরে কিন্তু লুপের আগে তৈরি করেছি।

ধাপ 6: টপ ডাউন ডিজাইন।

আপনি কী করতে চান তার সংজ্ঞা দিয়ে শুরু করে আপনার স্কেচ ডিজাইন করা একটি ভাল ধারণা।

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

এটি ভাল ডিজাইন দর্শন অনুসরণ করে, যা অনেক বিশ্ববিদ্যালয়ে পড়ানো হয়, যাকে বলা হয় CDIO (যদি আপনি ইতিমধ্যে এটিকে না জানেন তবে আপনি এটি গুগল করতে পারেন, এবং এটি ব্যাখ্যা করার জন্য সাইটগুলি খুঁজে পান: https://www.cdio.org/s।) এটি মূলত বলে: আপনি ধারণাটি পরিষ্কার হওয়ার আগে ডিজাইনটি শুরু করবেন না। আপনি নকশা পরিষ্কার না হওয়া পর্যন্ত বাস্তবায়ন শুরু করবেন না। আপনি বাস্তবায়ন পরিষ্কার করার আগে এটি কাজ করবে বলে আশা করবেন না। প্রথমে C, তারপর D, I, এবং O. প্রতিটি পরবর্তী পর্যায়ে আপনি পুনরাবৃত্তি (লুপ (গুলি) ঘুরে যান, তাই একবার আপনি আপনার প্রাথমিক ডিজাইন লুপ ফিরে খুশি এবং পরীক্ষা করুন যে এটি এখনও ধারণার সাথে মেলে, এবং আপডেট করুন সি যদি আপনার প্রয়োজন হয়। প্রয়োজনে পরিবর্তন। প্রোগ্রামিং স্কেচগুলির সাথে এটি একই কাজ করে যদি আপনি টপ-ডাউন ডিজাইন করেন।

ধাপ 7: ধারণা এবং নকশা - পর্ব 1

ধারণা এবং নকশা - পর্ব 1
ধারণা এবং নকশা - পর্ব 1
ধারণা এবং নকশা - পর্ব 1
ধারণা এবং নকশা - পর্ব 1

এখানে ধারণাটি 'নোট' ট্যাবে বর্ণিত রূপরেখা প্রয়োজনীয়তার মতো দেখাচ্ছে। '

নকশাটি লুপের প্রাথমিক সংস্করণের মতো দেখতে পারে, যা নোট ট্যাবের সাথে মেলে এবং এই চিত্রটিতে আপনি দেখতে এমন কিছু দেখতে পারেন

দেখুন কিভাবে আমি প্রথমে CTRL-C মন্তব্যগুলি লুপের মাথায় কপি করে শুরু করতে পছন্দ করি, এবং তারপর সেই কাজগুলি করার জন্য কমান্ড দিয়ে শূন্যস্থান পূরণ করা শুরু করি।

এটি প্রকৃতপক্ষে ঠিক আছে যা আপনি চিত্রের নীচে পর্দার নীচে দেখতে পারেন। এটি CDIO পর্যায় D থেকে I পর্যন্ত পৌঁছেছে, এবং আমরা কোডটি বিকাশ করার সাথে সাথে এই D-I লুপটি ধরে রাখা একটি ভাল ধারণা।

এখন পরবর্তী পর্যায়ে যাওয়ার সময়, সেখানে একটি মন্তব্য আছে যেখানে বলা হয়েছে যে আমরা হার্ডওয়্যার ইউএসবি থেকে কিছু পেতে যাচ্ছি, তারপর আমরা সফ্টওয়্যার সিরিয়াল চ্যানেলে এটি প্রেরণ করতে যাচ্ছি। আমরা এটি করার জন্য এই কোডটি লিখি - হলুদ হাইলাইটারে এখানে 133 থেকে 138 লাইন দেখানো হয়েছে

ধাপ 8: ধারণা এবং নকশা - পার্ট 2

ধারণা এবং নকশা - পার্ট 2
ধারণা এবং নকশা - পার্ট 2
ধারণা এবং নকশা - পার্ট 2
ধারণা এবং নকশা - পার্ট 2

আমরা এখানে যে দুটি প্রথম দুটি ফাংশন চালু করেছি তা হল (recv () এবং tran () হার্ডওয়্যার পোর্ট থেকে প্রাপ্ত এবং সফটওয়্যার পোর্টে প্রেরণ করা - তাই তাদের দেখানো 'hw' বা 'sw' প্যারামিটার দিয়ে কল করা।

তাদের ছাড়াও, আমরা newData নামক একটি বৈশ্বিক পরিবর্তনশীল একটি পরীক্ষা যোগ করেছি। এটি একটি পতাকা যা আমরা "void recv ();" ফাংশনের ভিতরে সেট করব। যখন একটি বার্তা পেয়েছে এই পরিবর্তনশীল মিথ্যা থেকে সত্য পতাকাঙ্কিত হয়। আমরা এটি করি যাতে 134 লাইনে একটি বার্তা (পতাকা == সত্য) প্রাপ্ত হলে আমরা কেবল একটি বার্তা প্রেরণ করি।

আবার আমরা কম্পাইল (D থেকে I) চেক করতে পারি, এবং এই সময় আমাদের একটি 'ঘোষিত নয়' ত্রুটি বার্তা (দেখানো হয়েছে)। এটি আমাদের বলছে আমরা recv () ঘোষণা করিনি; ফাংশন আমরা পরে এটি করার পরিকল্পনা করেছি, তাই এখনই আমাদেরকে একটি পরিষ্কার কম্পাইল পেতে অনুমতি দেওয়ার জন্য আমাদের পরবর্তী একটি ডামি বা প্লেসহোল্ডার ফাংশন তৈরি করতে হবে।

আবার আমরা কম্পাইল (D থেকে I) চেক করতে পারি, এবং এইবার ট্রান () এর জন্য আমাদের আরেকটি 'ঘোষিত নয়' ত্রুটি বার্তা আছে; ফাংশন এটি একটি অনুরূপ স্টাব তৈরি প্রয়োজন। আবার আমরা কম্পাইল (D থেকে I) চেক করতে পারি, এবং এই সময় আমরা এটি পুরোপুরি কাজ করতে পারব; এ পর্যন্ত সব ঠিকই.

ধাপ 9: মূল লুপ শেষ করুন: ক) ইউএসবি থেকে গ্রহণ, খ) স্লেভ আরডুইনো থেকে গ্রহণ।

মূল লুপ শেষ করুন: ক) ইউএসবি থেকে গ্রহণ, খ) স্লেভ আরডুইনো থেকে গ্রহণ।
মূল লুপ শেষ করুন: ক) ইউএসবি থেকে গ্রহণ, খ) স্লেভ আরডুইনো থেকে গ্রহণ।
মূল লুপ শেষ করুন: ক) ইউএসবি থেকে গ্রহণ, খ) স্লেভ আরডুইনো থেকে গ্রহণ।
মূল লুপ শেষ করুন: ক) ইউএসবি থেকে গ্রহণ, খ) স্লেভ আরডুইনো থেকে গ্রহণ।

এই অংশটি শেষ করার জন্য আমরা একটি চূড়ান্ত অংশ যোগ করেছি যা কিছু ডিবাগিং কোড যোগ করা।

ডিবাগিং স্কেচগুলির উপর আরেকটি নির্দেশযোগ্য রয়েছে যা আমরা এখানে কী করেছি এবং কেন তা বোঝার জন্য উল্লেখ করা যেতে পারে। নির্দেশিকা পড়ুন "কিভাবে কাজ না করা পর্যন্ত Arduino স্কেচ তৈরি এবং পরীক্ষা করতে হয়"

সুতরাং এই ডিবাগ লাইনগুলি [136-139 দেখানো] মূল লুপে পরবর্তীতে যোগ করা হয়েছে এবং, দেখুন এবং দেখুন, আপনি ডিবাগ ভেরিয়েবলকে সত্য করে, এবং কম্পাইলিং (I) করে মাস্টার এন্ডে তাদের পরীক্ষা করতে পারেন, তারপর যদি আপনি একটি Arduino সংযুক্ত করুন আপনি আপলোড করতে পারেন, সিরিয়াল মনিটরটি খুলুন এবং দেখুন যে সিরিয়াল মনিটরে ফিরে আসে তা এখানে দেখানো হয়েছে (আপনি কি দেখছেন "DEBUG MODE" বার্তা যোগ করা হয়েছে?)

ধাপ 10: স্লেভ আরডুইনোতে ডেটা গ্রহণ এবং পরিচালনা

স্লেভ আরডুইনোতে ডেটা গ্রহণ এবং পরিচালনা
স্লেভ আরডুইনোতে ডেটা গ্রহণ এবং পরিচালনা
স্লেভ আরডুইনোতে ডেটা গ্রহণ এবং পরিচালনা
স্লেভ আরডুইনোতে ডেটা গ্রহণ এবং পরিচালনা

স্লেভ আরডুইনো থেকে প্রাপ্তি

প্রধান লুপে দ্বিতীয় চ্যানেলের জন্য প্রয়োজনীয় কোড যোগ করুন, সফ্টওয়্যার সিরিয়াল রিসিভার দেখানো হয়েছে - লাইন 149 থেকে 155।

আপনি কি দেখতে পারেন যে কাঠামোটি lyিলোলাভাবে আমরা মাস্টার কেসের জন্য উপরে যা লিখেছি তার উপর ভিত্তি করে?

এছাড়াও আপনি দেখতে পাবেন যে আমরা একটি কম্পাইলার ত্রুটি পেয়েছি, আরেকটি অঘোষিত ফাংশন - এই সময় parseData (); - তাই আমাদেরও এর জন্য একটি স্টাব তৈরি করতে হবে, এর আগে আমরা একটি ত্রুটি মুক্ত পরীক্ষা কম্পাইল চালাতে পারি।

স্লেভ আরডুইনোতে ডেটা পরিচালনা করা

Arduino- এর জন্য প্রয়োজনীয় মূল লুপ কোড যোগ করুন যদি এটি একটি স্লেভ ডিভাইস হিসেবে দেখানো হয় - 163 থেকে 174 লাইন।

এবং আপনি এই সময় এটি একেবারে সূক্ষ্ম সংকলন করা উচিত।

ধাপ 11: রিসিভ ফাংশন লিখুন

রিসিভ ফাংশন লিখ
রিসিভ ফাংশন লিখ

রিসিভ ফাংশন - void recv (char from) {} - এর দুটি প্রধান কাজ আছে।

ইউএসবি চ্যানেল থেকে অক্ষরের একটি স্ট্রিং পাওয়ার জন্য, এবং

2 Arduino থেকে Arduino চ্যানেলে একটি গ্রহণ করতে।

প্রথমটির জন্য আমাদের ব্যবহার করতে হবে কারণ এটি ব্যবহার করে Arduino- এর অন্তর্নির্মিত হার্ডওয়্যার UART ব্যবহার করে এবং দ্বিতীয়টি ব্যবহার করে স্ট্যান্ডার্ড Arduino লাইব্রেরি: সফটওয়্যার UART।

যখন আমরা একটি ফাংশনে কোড যুক্ত করতে শুরু করি - এমন একটি ফাংশন তৈরি করতে যা কিছু করে, কেবল একটি স্টাবের পরিবর্তে - আমাদের মনে রাখতে হবে এটি যে স্টাবটি প্রতিস্থাপন করছে তা অপসারণ বা মন্তব্য করতে হবে। অন্যথায় আমরা একটি কম্পাইল ত্রুটি পেতে পারি: 'void lrec (char)' এর পুনfনির্ধারণ।

চেষ্টা করুন এবং ত্রুটিটি পান, এবং তারপর এটি থেকে পরিত্রাণ পেতে উপরে প্রস্তাবিত উপায়গুলির যেকোন একটি চেষ্টা করুন।

এমন একটি ফাংশন দিয়ে শুরু করুন যা আমরা এখানে হলুদে 75 থেকে 88 লাইন দেখায়।

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

এখন recv () ফাংশনের জন্য আমরা যে কোডটি লিখেছি তা একবার দেখে নেওয়া যাক।

এটি বেশ পরিষ্কার, আপনি উপরে উল্লেখিত ফাংশনের দুটি অংশ তৈরি করতে 'যদি' অবস্থার ব্যবহার দেখতে পারেন।

'Sw' অংশ এবং 'hw' অংশের ভিতরের কোড একই ফর্মের, এবং আমি এখানে তা বর্ণনা করব।

প্রতিটি ক্ষেত্রে লাইনের জোড়াগুলির মধ্যে প্রথমটি হল একটি লুপের শুরু। যদি আপনি সময়ের সাথে পরিচিত না হন তবে আপনি ব্যাখ্যা এবং উদাহরণের জন্য Arduino.cc/Reference সাইটে এটি দেখতে পারেন। এখানে আমরা অপেক্ষা করছি 'যখন' অন্তর্নির্মিত 'সিরিয়াল' ফাংশনটি কোন অক্ষর (গুলি) পায়নি এবং কারণ নতুন ডেটা ভেরিয়েবল বন্ধ করা হয়েছে (যেমন newData == মিথ্যা অবস্থা সত্য)। যত তাড়াতাড়ি একটি অক্ষর - বা একাধিক অক্ষর - গ্রহণ করা হয়, সেই সময় এই জোড়ার দ্বিতীয় লাইনে 'ড্রপ থ্রু' হয়ে যাবে। এটি তখন recAstringChar (char) এ কল করবে; বর্তমান চরিত্রটি পরিচালনা করার জন্য ফাংশন। লাইনের এই জোড়াটি তখন পরিবর্তিত হবে যখন (অথবা যতক্ষণ পর্যন্ত) এমন কোন অক্ষর আছে যা এখনও প্রাপ্তির প্রয়োজন। একবার যখন তারা সব শেষ হয়ে যায় তখন রাজ্য শেষ হয়ে যায়, যদি পরবর্তী স্তরটি শেষ করার অনুমতি দেয়, এবং পরিবর্তে rec (char) এর অনুমতি দেয়; ফাংশন শেষ। এইভাবে একটি সম্পূর্ণ বার্তা এখন মৌমাছি গৃহীত হয়েছে।

ধাপ 12: রিসিভ সাব -ফাংশন লিখুন - পার্ট 1

রিসিভ সাব -ফাংশন লিখুন - পার্ট 1
রিসিভ সাব -ফাংশন লিখুন - পার্ট 1
রিসিভ সাব -ফাংশন লিখুন - পার্ট 1
রিসিভ সাব -ফাংশন লিখুন - পার্ট 1

আমাদের এখন recAstringChar (char) নামক ফাংশনটি লিখতে হবে; । আপনি মন্তব্য থেকে তার 50 নং লাইন পর্যন্ত দেখতে পাচ্ছেন যে, এর কাজ হচ্ছে আগত সিরিয়াল বার্তার কপি সহ দুটি বাফার আপডেট করা। [যখন আমি এই সব কাজ করার চেষ্টা করছিলাম তখন দেখা গেল যে একটি জিনিস যা আমি শিখেছি তা হল আমার দুটি ভিন্ন বাফার দরকার - অথবা কমপক্ষে এটি কিছু সমস্যার সমাধান করার সবচেয়ে সহজ উপায় ছিল, তাই এটি 2 বাফারের প্রয়োজনের মধ্যে বিকশিত হয়েছিল, তাই আমি শুধু সেগুলো তৈরি করেছি।] আমি একটি বাফারকে ডেকেছি: প্রাপ্ত ডাটা এবং অন্যটি: প্রাপ্ত চারস।

বাফারগুলি গ্লোবাল ভেরিয়েবল, তাই সেগুলি মডিউল স্তরে ঘোষণা করা হয়, সাধারণ ট্যাবের লাইন 9 এবং 10 দেখুন। এই ফাংশনের ভিতরে ঘোষিত অন্যান্য ভেরিয়েবল রয়েছে যার ফলে স্থানীয় সুযোগ রয়েছে- এখানে 51-54 লাইনে দেখানো হয়েছে। এটি গ্লোবাল এবং স্থানীয়দের মধ্যে পার্থক্য ব্যাখ্যা করার জায়গা নয়, তবে স্থানীয় এবং গ্লোবাল এর অধীনে https://www.arduino.cc/glossary/en/ এ আরও তথ্য রয়েছে।

আপনি ডাটা টাইপ এবং টাইপ-মডিফায়ার সম্পর্কেও জানতে পারেন: https://www.arduino.cc/reference/en/#variables- এ স্ট্যাটিক, বুলিয়ান, বাইট, কনস্ট, চর, এখানে দেখানো হয়েছে।

এই ফাংশনের প্রধান প্রোগ্রামের প্রবাহ যদি এখানে লাইনে 56 এ থাকে এবং এর সাথে সংশ্লিষ্ট অন্য লাইন 74 দ্বারা নিয়ন্ত্রিত হয়। এটি দুটি দৃশ্যের সাথে সম্পর্কিত

ক) [লাইন 74 থেকে] যখন প্রাপ্ত বার্তা শুরু হয়। যখন স্টার্টমার্কারটি দেখা যায় তখন এটি ঘটে - এটি '<' অক্ষর হিসাবে সংজ্ঞায়িত করা হয়েছে, যার কারণে আমরা যখনই স্কেচ পরীক্ষা করি আমরা সবসময় সেই অক্ষর দিয়ে আমাদের স্ট্রিং শুরু করি। যদি আমরা না পাই তাহলে প্রাপ্তি হিসেবে কিছুই প্রক্রিয়া করা হবে না, সবই উপেক্ষা করা হবে ঠিক যেমন আমরা 'সিরিয়াল মনিটর' কীবোর্ড প্রম্পটে অযথা টাইপ করছি।

খ) [লাইন 56 থেকে 73] যা অন্য সব অক্ষর গ্রহণ করে, সে যাই হোক না কেন, কিন্তু তারা শুধুমাত্র একটি বৈধ শুরু হওয়ার পরে অক্ষরগুলির সাথে কাজ করে

এই লাইনগুলিতে (74 থেকে 78 পর্যন্ত) আমরা প্রাপ্ত <একটি বাফারের মধ্যে (প্রাপ্ত ডাটা [0]) রাখি কিন্তু অন্য একটিতে না। আমরা ndx ++ লাইনে পোস্ট-ইনক্রিমেন্ট কমান্ড (++) ব্যবহার করে পরবর্তী অতিরিক্ত বাফার পজিশন (রিসিভডাটা [1]) নির্দেশ করার জন্য বাফার পয়েন্টার (ভেরিয়েবল: char ndx) সামঞ্জস্য করি;, এবং আমরা অগ্রগতি পতাকা সত্য সেট।

ফাংশনের এই অংশে প্রোগ্রামের প্রবাহ এখানে 57 নং লাইফ দ্বারা নিয়ন্ত্রিত হয়, এবং অন্যটি লাইন 65 এ এর সাথে সম্পর্কিত। এটি দুটি দৃশ্যের সাথে সম্পর্কিত

ক) [লাইন 65৫ থেকে] যখন প্রাপ্ত বার্তা শেষ হয়। এটি ঘটে যখন এন্ডমার্কারটি স্পট করা হয় -> হিসাবে সংজ্ঞায়িত করা হয়, এজন্য যখনই আমরা আমাদের স্কেচ পরীক্ষা করি আমরা সবসময় সেই অক্ষর দিয়ে আমাদের স্ট্রিং শেষ করি। শেষ চরিত্রটি পাওয়ার পরে যে জিনিসগুলি ঘটে তার মধ্যে একটি হল যে গ্লোবাল ফ্ল্যাগ (টেকনিক্যালি ভেরিয়েবল) newData ফাংশন শেষ হওয়ার সাথে সাথেই সত্য সেট করা হয়, যাতে আমাদের সাব-ফাংশন (কলিং ফাংশন: recv (char);) 'জানতে' পারেন যে বৈধ নতুন ডেটা সম্পূর্ণ প্রাপ্ত হয়েছে।

খ) [লাইন ৫ to থেকে] যা অন্য সব অক্ষর পায়, সে যাই হোক না কেন। এটি কেবল বাফারগুলির মধ্যে সারিবদ্ধভাবে তাদের সুন্দরভাবে পার্ক করে।

ধাপ 13: রিসিভ সাব -ফাংশন লিখুন - পার্ট 2

রিসিভ সাব -ফাংশন লিখুন - পার্ট 2
রিসিভ সাব -ফাংশন লিখুন - পার্ট 2
রিসিভ সাব -ফাংশন লিখুন - পার্ট 2
রিসিভ সাব -ফাংশন লিখুন - পার্ট 2

এটি 2 টি বাফার দেখতে কেমন হতে পারে তার একটি উদাহরণ দিতে সাহায্য করতে পারে যখন তারা জনবহুল হয়েছে। যদি আমরা এন্টার এ কী ছিল, বাফার তাদের মধ্যে দেখানো অক্ষর থাকবে:

সুতরাং এখন আপনি দেখতে পারেন আমাদের একটি বাফার আছে যা ঠিক একই অক্ষর যা আমরা প্রথম টাইপ করেছি এবং একটি বাফার যার মাত্র দুটি মান এবং একটি পৃথক কমা আছে। এখন আমাদের কিছু কোড আছে যা আমরা সিরিয়াল মনিটর কীবোর্ডে টাইপ করা অক্ষরগুলি গ্রহণ করতে পারি, আমরা CDIO ফেজ I থেকে O তে যেতে পারি, টাইপ-ইন করে কিছু স্ট্রিং দেখতে পাই এবং কি হয়। কোডটি মাস্টার আরডুইনোতে আপলোড করুন, সিরিয়াল মনিটর খুলুন এবং এন্টার মত বৈধ কিছু টাইপ করার চেষ্টা করুন। আপনি কি এখানে দেখানো সিরিয়াল মনিটরের পর্দায় একটি প্রতিধ্বনি পান?

ধাপ 14: ট্রান্সমিট এবং পার্স ফাংশন লিখুন

ট্রান্সমিট এবং পার্স ফাংশন লিখ
ট্রান্সমিট এবং পার্স ফাংশন লিখ
ট্রান্সমিট এবং পার্স ফাংশন লিখ
ট্রান্সমিট এবং পার্স ফাংশন লিখ

প্রেরণের জন্য প্রথম

সুতরাং এখন আমরা একটি স্ট্রিং পেয়েছি, আমরা ট্রান্সমিট ফাংশন লিখতে পারি: tran (char); তার স্টাব প্রতিস্থাপন করতে। এটি আমাদের মাস্টার থেকে স্লেভ আরডুইনোতে একটি স্ট্রিং পাঠানোর অনুমতি দেবে, তাই এই নতুন কার্যকারিতা পরীক্ষা করার জন্য নিশ্চিত করুন যে উভয় ডিভাইসই প্লাগ ইন এবং একসাথে সংযুক্ত।

এখানে 117 থেকে 133 লাইনে দেখানো এই ফাংশনটি প্রবেশ করান। যেমন আপনি চিনবেন, এর দুটি অংশ রয়েছে, একটি USB চ্যানেলে (হার্ডওয়্যার UART) প্রেরণ করার জন্য এবং একটি অন্য Arduino (সফটওয়্যার UART) এ প্রেরণ করার জন্য এটি ত্রুটি সংকলন করা উচিত -মুক্ত, এবং আপনি অবিলম্বে স্কেচ আপলোড করতে পারেন এবং দেখুন কি হয়। এবার পাঠাবো। আপনি কি দেখানো ফলাফল পান?

স্ক্রিন শটটি আকর্ষণীয় কারণ রিসিভ করা স্ট্রিং… আগের মতই সঠিক হওয়া উচিত এবং ট্রান্সমিট করা স্ট্রিং… এখন সঠিক হওয়া উচিত। তবে মনে রাখবেন যে পূর্ণসংখ্যা রূপান্তর কাজ করে নি। সেই কাজটি করার জন্য এখনও আরও কিছু কোড যোগ করতে হবে।

ধাপ 15: ট্রান্সমিট এবং পার্স ফাংশন লিখুন

ট্রান্সমিট এবং পার্স ফাংশন লিখ
ট্রান্সমিট এবং পার্স ফাংশন লিখ
ট্রান্সমিট এবং পার্স ফাংশন লিখ
ট্রান্সমিট এবং পার্স ফাংশন লিখ

তারপর পার্সের জন্য

এটি কোডের একটি অংশ যা সংখ্যাসূচক আংশিক স্ট্রিংগুলি বের করার জন্য প্রাপ্ত স্ট্রিংটি বিশ্লেষণ করে এবং তাদের পূর্ণসংখ্যার মানগুলিতে রূপান্তর করে। এটি অকার্যকর parseData (); প্রধান লুপের কাজ

পার্স স্টাবটি 98 - 113 লাইনে দেখানো কোড দিয়ে প্রতিস্থাপন করুন। এটি আপলোড করুন, এবং দেখা যাক 2 টি পূর্ণসংখ্যার মান নিয়ে আমাদের যে সমস্যাটি ছিল তা এখন ঠিক করা হয়েছে কিনা। চেষ্টা করা যাক।

হ্যাঁ, এটি কাজ করে, যেমন দেখানো হয়েছে, পাওয়া পূর্ণসংখ্যা 49 এবং 98।

ধাপ 16: সমাপ্তি

সমাপ্তি!
সমাপ্তি!

এই তথ্যটি পিসি থেকে মাস্টার মাধ্যমে ক্রীতদাসের মাধ্যমে এবং মাস্টারের মাধ্যমে আবার পিসিতে ফিরে এসেছে। সাধারণের সমাপ্ত সংস্করণটি মাস্টার এবং স্লেভ উভয় প্রান্তে আপলোড করা হয়েছে এবং এখন ডিবাগ মোড বন্ধ হয়ে গেলে, আমরা এখানে দেখানো হিসাবে উভয় প্রান্তে সঠিকভাবে প্রাপ্ত ডেটা দেখতে পাই।

প্রস্তাবিত: