Добре дошли в Част II от нашето ръководство за това как да наблюдавате обратната връзка за натоварване на линеен задвижващ механизъмВ Част I Разгледахме процеса на окабеляване и основното кодиране, необходимо за примера. В днешното ръководство ще разгледаме подробно различните раздели на кода, както и някои начини за редактирането му. За начало ще разгледаме раздела latchButtons() от кода.
Първото нещо, което искаме да видим, е отскачането на бутона, така че когато левият бутон бъде натиснат, трябва да се изчисли времето от предишното натискане на бутона. За да направим това, ще трябва да използваме последната стойност, която е била запазена в кода, след което да използваме функцията millis(), за да проверим времето. Когато времето е по-голямо от времето за отскачане, функцията ще провери дали задвижващият механизъм може да се удължи. След като и двете условия са изпълнени, функцията ще може да продължи.
ако (digitalRead(buttonLeft)==LOW)//лявото е напред
{
currentTimedebounce = millis() - lastButtonpress;// проверява времето от последното натискане
ако (currentTimedebounce> debounceTime && dontExtend == false)//след като сте активирали dontExtend, игнорирайте всички натискания напред
{
leftlatch = !leftlatch;// ако двигателят се движи, спира, ако е спрял, започва движение
firstRun = true;// задава флага firstRun, за да игнорира текущия пик
fullyRetracted = false; // след като се придвижите напред, не сте напълно прибрани
lastButtonpress = millis();//запазване на времето на последното натискане на бутон
връщане;
}//край ако
}//край на btnLEFT
Следващата секция е цикълът във функцията motorForward(), по-специално двете закъснения. Цикълът започва с включване на контролера на двигателя, който стартира линейния задвижващ механизъм. Ако е първият в цикъла, ще има по-голямо закъснение. Закъснението игнорира пика на тока, който възниква при активиране на двигателя. Уверете се, че не сте задали твърде голямо закъснение, защото няма да имате контрол върху него, след като стартира. Когато двигателят стартира, секцията getFeedback() се използва за проверка на токовия сензор.
докато (dontExtend == false && leftlatch == HIGH) {
digitalWrite(EnablePin, HIGH);
analogWrite(PWMPinA, скорост);
analogWrite(PWMPinB, 0);//преместване на двигателя
ако (firstRun == true) забавяне(времеЗаДелянеНаПърваОбратнаСвързване);
else delay(feedbacktimedelay); //малко забавяне за достигане на скорост
getFeedback();
първоИзпълнение = невярно;
заключващиБутони();
}//край докато

След това ще разгледаме секциите в рутината get feedback(), която започва с четене на аналоговия пин, свързан към сензора. Започва с проверка дали двигателят е на границите си и дали кодът знае границите си, когато токът е 0.
Unfortunately, there can be a false reading sometimes so it's important to set a counter. This counter code has to count up to the hitLimitsmax before the motor stops and if it counts less then that it will reset.
ако (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;
иначе hitLimits = 0; // проверява дали двигателят е на границите си и токът е спрял
След това има ограничения за удари. Когато линеен задвижващ механизъм Ако двигателят се движи напред и достигне границата, ще изключи десния лост. Ако двигателят се движи назад, ще изключи левия лост. Кодът по-долу показва само десния лост, но кодът за левия лост е същият.
ако (hitLimits == hitLimitsmax && rightlatch == HIGH) {
десен заключващ механизъм = НИСКО;
hitLimits = 0;
}//край ако
Проверява се ограничението на тока и се определя максималното ограничение. Ако ограничението е надвишено, левият фиксатор ще се изключи и двигателят вече няма да се изтегля. За да се стартира изтеглянето, двигателят трябва да се обърне.
ако (CRaw> maxAmps) {
dontExtend = true;
leftlatch = LOW; //спиране, ако обратната връзка е над максимума
}//край ако
Това ни довежда до края на част II на наблюдение на обратната връзка за натоварване на линеен задвижващ механизъм. We went into detail on specific sections of the code this time and explained how they work. If you'd like to order any units we used in this example you can order online or свържете се с нас да поръчате по телефона. Ако имате въпроси или притеснения относно нашите продукти, ние винаги сме готови да ви помогнем.