360 درجة PWM الدوارة التشفير الاختراق
360 درجة PWM الدوارة التشفير الاختراق
وصف
هذا النوع من التبديل هو مُشفر دوار تزايدي. في واقع الأمر ، هو الأكثر استخداما من جميع التشفير الدوارة بسبب انخفاض تكلفتها والقدرة على توفير إشارات التي يمكن تفسيرها بسهولة لتوفير المعلومات ذات الصلة بالحركة مثل السرعة.
بالتناوب، يمكن للترميز الدوار عد تردد نبض الإخراج في الاتجاه الإيجابي وعكس أثناء الدوران، على عكس عداد التقوية الدوارة دون احتساب القيد. مع الزر الموجود على أداة الترميز الدوارة، يمكن إعادة تعيين إلى حالته الأولية بدءًا من الصفر.
اختبار التعليمات البرمجية
int redPin = 2؛
صفراء intPin = 3;
int greenPin = 4؛
int aPin = 6؛
int bPin = 7؛
زر IntPin = 5؛
حالة int = 0؛
int longPeriod = 5000; الوقت باللون الأخضر أو الأحمر
int shortPeriod = 700؛ الفترة الزمنية عند التغيير
عدد الأهداف int = shortPeriod؛
عدد عدد النت = 0؛
إعداد الفراغ()
{
pinMode (aPin، INPUT)؛
pinMode (bPin ، INPUT) ؛
pinMode (buttonPin ، INPUT) ؛
pinMode (redPin، إخراج)؛
pinMode (yellowPin ، إخراج) ؛
pinMode (greenPin ، إخراج) ؛
}
حلقة فارغة()
{
العد + + ، ولكن لا يمكن أن يكون لها أي شيء
إذا (digitalRead(زرPin))
{
setLights (عالية ، عالية ، عالية) ؛
}
اخر
{
تغيير int = getEncoderTurn();
int newPeriod = longPeriod + (تغيير * 1000);
إذا كان (> جديد = 1000 & جديدPeriod < = 10000)
{
longPeriod = جديدPeriod;
}
إذا (عدد > الهدف عدد)
{
setState()؛
العدد = 0؛
}
}
التأخير (1)؛
}
int getEncoderTurn()
{
إرجاع -1 أو 0 أو +1
ثابت منذ وقتين أو قديمA = منخفض;
ثابت int oldB = منخفض;
النتيجة int = 0؛
int newA = digitalRead(aPin);
int newB = digitalRead(bPin);
إذا (newA!= oldA || newB!= oldB)
{
لقد تغير شيء
إذا (oldA == منخفض & newA == عالية)
{
النتيجة = -(oldB * 2 - 1)؛
}
}
oldA = newA؛
oldB = newB؛
عودة نتيجة؛
}
مجموعة intState()
{
إذا (الحالة == 0)
{
setLights (عالية ، منخفضة ، منخفضة) ؛
targetCount = longPeriod;
الحالة = 1؛
}
آخر إذا (الحالة == 1)
{
setLights (عالية ، عالية ، منخفضة) ؛
targetCount = shortPeriod;
الحالة = 2؛
}
آخر إذا (الحالة == 2)
{
setLights (منخفض، منخفض، مرتفع)؛
targetCount = longPeriod;
الحالة = 3؛
}
آخر إذا (الحالة == 3)
{
setLights (منخفض ، مرتفع ، منخفض) ؛
targetCount = shortPeriod;
الحالة = 0؛
}
}
فراغ setLights (int الأحمر، أصفر int، أخضر int)
{
digitalWrite (redPin ، أحمر) ؛
digitalWrite (yellowPin، أصفر)؛
digitalWrite (greenPin ، الأخضر) ؛
}