Arduino এ স্ট্রিংগুলির সাথে কাজ করার সময়, তাদের তুলনা করার বিভিন্ন উপায় রয়েছে। সবচেয়ে দরকারী ফাংশন এক strcmp(), যা সি স্ট্যান্ডার্ড লাইব্রেরির অন্তর্গত, cstring
. এই ফাংশনটি আপনাকে দুটি স্ট্রিং অক্ষর (স্ট্রিং) একটি সরাসরি উপায়ে তুলনা করতে দেয়, একটি মান ফিরিয়ে দেয় যা আমাদের বলে যে স্ট্রিংগুলি একই কিনা বা তাদের মধ্যে কোনো পার্থক্য আছে কিনা।
আরডুইনোতে, অক্ষর স্ট্রিংগুলি সাধারণত ক্লাসের বস্তুর মাধ্যমে পরিচালনা করা হয় String
, যদিও এটি কাজ করার জন্য একটি বিকল্প অক্ষর অ্যারে, বিশেষ করে যদি আমরা সম্পদ অপ্টিমাইজ করতে চাই বা কম মেমরি কোডের সাথে কাজ করতে চাই। আসুন কীভাবে বৈশিষ্ট্যটি সঠিকভাবে ব্যবহার করতে হয় তা জেনে নেওয়া যাক strcmp() এবং অন্যান্য বিকল্প যা এই পরিবেশে উপযোগী।
কি হচ্ছে? strcmp()
এবং কিভাবে এটি Arduino এ কাজ করে?
ফাংশন strcmp()
এটির বেশ সহজ আচরণ রয়েছে: এটি অক্ষরের দুটি স্ট্রিং নেয়, তাদের অক্ষর দ্বারা অক্ষরের তুলনা করে এবং সেই তুলনার উপর ভিত্তি করে একটি মান প্রদান করে। পদ্ধতিটি মূল্যায়ন করে ASCII মান অক্ষর, যা মনে রাখা গুরুত্বপূর্ণ। এই তুলনার সম্ভাব্য ফলাফলগুলি হল:
- যদি শিকল একই হয়,
strcmp()
ফেরত আন 0. - যদি প্রথম অক্ষরটি ভিন্ন হয় তার প্রথম স্ট্রিংটিতে একটি কম ASCII মান থাকে, ফাংশনটি ফিরে আসবে একটি নেতিবাচক সংখ্যা.
- যদি প্রথম স্ট্রিংয়ের অতুলনীয় অক্ষরটি বড় হয় তবে এটি ফিরে আসবে একটি ইতিবাচক সংখ্যা.
ফাংশন ব্যবহার করার একটি বাস্তব উদাহরণ strcmp()
দুটি স্ট্রিং তুলনা করা হয় যা আমরা অন্য ফাংশন ব্যবহার করে প্রবর্তন বা উৎপন্ন করি। উদাহরণস্বরূপ, আমরা একটি প্রোগ্রাম তৈরি করতে পারি যা ব্যবহারকারীর ডেটা সংগ্রহ করে এবং একটি সংরক্ষিত স্ট্রিংয়ের সাথে তুলনা করে, তথ্যটি সঠিক কিনা তা যাচাই করে।
মধ্যে গুরুত্বপূর্ণ পার্থক্য strcmp()
এবং অন্যান্য ফাংশন
আরডুইনোতে স্ট্রিং নিয়ে কাজ করার সময়, অন্যান্য বিকল্প রয়েছে strcmp()
যে আপনার প্রয়োজন সবচেয়ে ভাল ফিট হতে পারে. তাদের মধ্যে একজন memcmp()
, যা একটি মেমরি-স্তরের তুলনা সম্পাদন করে, যখন আমরা আমাদের স্ট্রিংগুলিতে একটি নাল টার্মিনেটরের উপর নির্ভর করতে চাই না তখন দরকারী। অপছন্দ strcmp()
, যা নাল-টার্মিনেটেড স্ট্রিংগুলির সাথে কাজ করার জন্য ডিজাইন করা হয়েছে, memcmp()
এটি কেবল একটি নির্দিষ্ট সংখ্যক বাইট তুলনা করে।
এর মৌলিক সিনট্যাক্স দেখুন:
if (memcmp(payload, "cadena", longitud) == 0) { // Ejecuta la acción}
এর নমনীয়তা দেওয়া, এটি একটি খুব দরকারী বিকল্প যদি আপনি ডেটা বা নির্দিষ্ট দৈর্ঘ্যের বার্তাগুলির সাথে কাজ করেন যা বাইট দ্বারা বাইট তুলনা করা আবশ্যক।
কংক্রিট ব্যবহারের ক্ষেত্রে: রিয়েল-টাইম স্ট্রিং পর্যবেক্ষণ এবং তুলনা
কল্পনা করুন যে আপনি এমন একটি প্রকল্পে কাজ করছেন যেখানে আপনি রিয়েল টাইমে তথ্য পাবেন এবং আপনাকে এটি একটি নির্দিষ্ট মানের সাথে তুলনা করতে হবে। ফাংশন strcmp() এই ধরনের পরিস্থিতিতে এটি একটি মূল হাতিয়ার। উদাহরণস্বরূপ, যদি আপনি একটি সেন্সর থেকে প্রাপ্ত ডেটা তুলনা করছেন এবং এটি একটি পূর্বনির্ধারিত মানের সাথে মেলে কিনা তা যাচাই করতে চান, strcmp() আপনাকে দক্ষতার সাথে এটি করতে অনুমতি দেবে।
এই কোড স্নিপেটে, আমরা একটি pH সেন্সর থেকে প্রাপ্ত মান নির্দিষ্ট ক্রমাঙ্কিত মানগুলির সাথে মেলে কিনা তা তুলনা করি:
if (strcmp(inputString, "CAL,4") == 0) { // Acción cuando se recibe el valor de calibración}
এই ধরনের তুলনা অ্যাপ্লিকেশনগুলিতে অত্যন্ত গুরুত্বপূর্ণ যেখানে ডেটা পরিবর্তিত হতে পারে এবং আমাদের অবশ্যই রিডিংয়ের ফলাফলের উপর ভিত্তি করে সিদ্ধান্ত নিতে হবে।
স্ট্রিং দিয়ে কাজ করার জন্য অন্যান্য পদ্ধতি
ছাড়াও strcmp()
, আপনি Arduino বাস্তুতন্ত্রের মধ্যে অন্যান্য ফাংশন ব্যবহার করতে পারেন। ফাংশন compareTo
, উদাহরণস্বরূপ, ক্লাসের অংশ String
এবং সেই শ্রেণীর বস্তুর তুলনা করা সহজ করে তোলে। যদিও strcmp()
এটি নিম্ন-স্তরের বাস্তবায়নে বা অক্ষর অ্যারে সহ আরও সাধারণ, compareTo
দরকারী যদি আপনি ইতিমধ্যে বস্তুর সাথে কাজ করছেন String
.
এখানে আপনি ব্যবহার করতে পারেন কিছু অতিরিক্ত পদ্ধতি আছে:
- তুলনা করুন(): দুটি বস্তুর তুলনা করুন
String
এবং হিসাবে একটি তুলনা মান প্রদান করেstrcmp()
. - সমান (): দুটি স্ট্রিং অবজেক্ট ঠিক একই কিনা তা পরীক্ষা করে, সত্য বা মিথ্যা ফেরত দেয়।
সাধারণ সমস্যা এবং সেগুলি কীভাবে ঠিক করা যায়
ব্যবহার করার সময় সবচেয়ে সাধারণ ভুল এক strcmp()
Arduino এ নিশ্চিত করছে না যে স্ট্রিংগুলি সঠিকভাবে a দিয়ে শেষ হয়েছে \0
(শূন্য অক্ষর)। যদি স্ট্রিংটি সঠিকভাবে বন্ধ করা না হয়, তাহলে ফাংশনটি মেমরিতে আপনার প্রত্যাশার চেয়ে তুলনা করতে থাকবে, যা অপ্রত্যাশিত ত্রুটি বা অনিয়মিত আচরণের দিকে নিয়ে যেতে পারে।
আপনি যদি সন্দেহ করেন যে আপনার স্ট্রিংগুলি সঠিকভাবে বন্ধ করা হয়নি, আপনি যেমন সমাধানগুলি অবলম্বন করতে পারেন memcmp()
, যা স্ট্রিংকে সীমাবদ্ধ করার জন্য একটি শূন্যের উপর নির্ভর করে না এবং তুলনা করার জন্য আপনাকে একটি নির্দিষ্ট সংখ্যক বাইট উল্লেখ করতে দেয়।
সিরিয়াল ইনপুটের মাধ্যমে আপনি প্রাপ্ত স্ট্রিংগুলির তুলনা করার সময় আরেকটি সমস্যা সম্মুখীন হতে পারেন। কোনো তুলনা করার চেষ্টা করার আগে আপনার সবসময় স্ট্রিংগুলি পরিষ্কার এবং ফর্ম্যাট করা নিশ্চিত করা উচিত।
সম্পূর্ণ বাস্তবায়ন উদাহরণ
এই টুলগুলি কীভাবে একটি বাস্তব প্রকল্পে কাজ করে তা বোঝাতে, এখানে একটি উদাহরণ রয়েছে যা ফাংশনের সাথে স্ট্রিং তুলনাকে একত্রিত করে Serial.println()
Arduino সিরিয়াল মনিটরে ফলাফল প্রদর্শন করতে:
#include <string.h> void setup() { Serial.begin(9600); char str1[] = "Hola"; char str2[] = "Hola"; int result = strcmp(str1, str2); if (result == 0) { Serial.println("Las cadenas son iguales"); } else if (result > 0) { Serial.println("La primera cadena es mayor"); } else { Serial.println("La segunda cadena es mayor"); } } void loop() { }
এই কোড দুটি স্ট্রিং তুলনা করে এবং মনিটরে ফলাফল প্রদর্শন করে। এটি ব্যবহারিক ব্যবহারের একটি ভাল উদাহরণ strcmp()
বাস্তব আরডুইনো অ্যাপ্লিকেশনগুলিতে পাঠ্য স্ট্রিংগুলিকে দক্ষতার সাথে তুলনা করতে।
তুলনা ছাড়াও, আপনি এর আউটপুট ব্যবহার করতে পারেন strcmp()
শর্তাধীন কাঠামোর মধ্যে যেমন if
স্ট্রিং মেলে বা না হলে নির্দিষ্ট ক্রিয়া সম্পাদন করতে।
সীমিত সংস্থান সহ প্রকল্পগুলিতে অপ্টিমাইজেশন
আপনি ইতিমধ্যে লক্ষ্য করেছেন যে, ব্যবহার strcmp()
এবং অনুরূপ ফাংশন একটি অত্যন্ত দক্ষ বিকল্প যখন আমাদের মেমরির সীমাবদ্ধতা সহ প্রকল্প থাকে, যা Arduino প্রকল্পগুলিতে বেশ সাধারণ। বস্তুর পরিবর্তে অক্ষর অ্যারে ব্যবহার করার সময় String
, আমরা মেমরি খরচ অপ্টিমাইজ করি, যা অল্প সঞ্চয় ক্ষমতা সহ মাইক্রোকন্ট্রোলারগুলিতে কাজ করার সময় অপরিহার্য।
পরিশেষে, এটি হাইলাইট করা গুরুত্বপূর্ণ যে আপনি যে প্রকল্পগুলিতে সেন্সর, ইন্টারফেস বা যোগাযোগ মডিউলগুলির সাথে কাজ করেন সেখানে কার্যকরী ত্রুটি বা অবাঞ্ছিত আচরণ এড়াতে প্রাপ্ত প্রতিটি ডেটা যাচাই করা অপরিহার্য।
উপরের সবগুলো, strcmp()
এটি একটি বহুমুখী হাতিয়ার যা একাধিক পরিস্থিতিতে খাপ খায়, সহজ থেকে অনেক জটিল অ্যাপ্লিকেশন যেখানে এটি সম্পদ অপ্টিমাইজ করতে এবং চেইন তুলনার উপর ভিত্তি করে সিদ্ধান্ত নেওয়ার প্রয়োজন হয়৷