360 ডিগ্রি পিডব্লিউএম রোটারি এনকোডার ব্রেকআউট
360 ডিগ্রি পিডব্লিউএম রোটারি এনকোডার ব্রেকআউট
বর্ণনা
এই ধরণের স্যুইচ একটি ইনক্রিমেন্টাল রোটারি এনকোডার। প্রকৃতপক্ষে, এটি সমস্ত রোটারি এনকোডারগুলির মধ্যে সবচেয়ে বেশি ব্যবহৃত হয় এর কম ব্যয় এবং এর সংকেত সরবরাহের দক্ষতার কারণে যা গতি সম্পর্কিত তথ্য যেমন বেগের মতো সরবরাহ করতে সহজেই ব্যাখ্যা করা যায়।
ঘোরানোর মাধ্যমে, রোটারি এনকোডারটি ঘূর্ণন চলাকালীন ইতিবাচক এবং বিপরীত দিকে আউটপুট পালস ফ্রিকোয়েন্সি গণনা করতে পারে, গণনা সীমাবদ্ধতা ছাড়াই একটি রোটারি পেন্টিওমিটার কাউন্টার থেকে পৃথক। রোটারি এনকোডারে বোতামটি সহ, এটি শূন্য থেকে শুরু করে এর প্রাথমিক অবস্থার পুনরায় সেট করা যেতে পারে।
পরীক্ষা কোড
int redpin = 2;
int ইয়েলোপিন = 3;
int গ্রিনপিন = 4;
int apin = 6;
int bpin = 7;
int বাটনপিন = 5;
int রাজ্য = 0;
int longeperiod = 5000; // সবুজ বা লাল সময় সময়
ইন্ট শর্টপিরিয়ড = 700; // সময়কাল যখন পরিবর্তন
int টার্গেটকাউন্ট = শর্টপিরিওড;
int গণনা = 0;
অকার্যকর সেটআপ()
{
পিনমোড (এপিন, ইনপুট);
পিনমোড (বিপিআইএন, ইনপুট);
পিনমোড (বাটনপিন, ইনপুট);
পিনমোড (রেডপিন, আউটপুট);
পিনমোড (ইয়েলোপিন, আউটপুট);
পিনমোড (গ্রিনপিন, আউটপুট);
}
অকার্যকর লুপ ()
{
গণনা ++;
যদি (ডিজিটাল রিড (বাটনপিন))
{
সেটলাইট (উচ্চ, উচ্চ, উচ্চ);
}
অন্য
{
int পরিবর্তন = getencoderturn ();
int newperiod = longperiod + (পরিবর্তন * 1000);
যদি (Newperiod> = 1000 && newperiod <= 10000)
{
লংপারিওড = নিউপিরিয়ড;
}
যদি (গণনা> টার্গেটকাউন্ট)
{
সেটস্টেট ();
গণনা = 0;
}
}
বিলম্ব (1);
}
int getencoderturn ()
{
// রিটার্ন -1, 0, বা +1
স্ট্যাটিক ইন্ট ওল্ডা = কম;
স্ট্যাটিক ইন্ট ওল্ডবি = কম;
int ফলাফল = 0;
int newa = ডিজিটাল রিড (এপিন);
int newb = ডিজিটাল রিড (বিপিআইএন);
যদি (নতুন! = পুরাতন || newb! = ওল্ডবি)
{
// কিছু পরিবর্তন হয়েছে
যদি (পুরাতন == কম && newa == উচ্চ)
{
ফলাফল = - (ওল্ডবি * 2 - 1);
}
}
পুরাতন = নতুন;
ওল্ডবি = নিউব;
ফেরতের ফলাফল;
}
int সেটস্টেট ()
{
যদি (রাজ্য == 0)
{
সেটলাইট (উচ্চ, নিম্ন, নিম্ন);
টার্গেটকাউন্ট = লংপেরিওড;
রাষ্ট্র = 1;
}
অন্যথায় যদি (রাজ্য == 1)
{
সেটলাইট (উচ্চ, উচ্চ, নিম্ন);
টার্গেটকাউন্ট = শর্টপিরিয়ড;
রাজ্য = 2;
}
অন্যথায় যদি (রাজ্য == 2)
{
সেটলাইট (নিম্ন, নিম্ন, উচ্চ);
টার্গেটকাউন্ট = লংপেরিওড;
রাজ্য = 3;
}
অন্যথায় যদি (রাজ্য == 3)
{
সেটলাইট (নিম্ন, উচ্চ, নিম্ন);
টার্গেটকাউন্ট = শর্টপিরিয়ড;
রাজ্য = 0;
}
}
অকার্যকর সেটলাইট (ইনড রেড, ইন্ট হলুদ, ইন গ্রিন)
{
ডিজিটাল রাইট (রেডপিন, লাল);
ডিজিটাল রাইট (ইয়েলোপিন, হলুদ);
ডিজিটাল রাইট (গ্রিনপিন, সবুজ);
}