1. Предопоследния ред същи нещо не го схващам какво прави...
2. И още нещо - гледам ползваш float. Замисли се дали да не реализираш изискващия се от добрата практика anti-windup контрол на интегралната поправка (какъвто аз нямам в моя код )
1. Този ред е ненужен, сложил съм го по инерция. Всъщност това е реализация на една функция от С++, това е
constrain(x, min, max) за оразмеряване на променлива и този трети ред има смисъл, ако функцията се ползва самостоятелно. Тук я ползвам вътре в друга функция и този ред се явява излишен, защото всъщност го чете от сбора по-горе.
2. Ползвам
float защото входните ми данни са метри /разстояние от една GPS-точка до друга/ и там числото е веществено, за да отчита и дециметри. Нужно е, защото диапазона на входа който ме интересува е 3-4 м. Това е максимално допустимото разстояние на което ще ме мести течението, да го наречем дрейф, а и то е съобразено с точността на GPS-а, който за граждански цели е 3-5 м. но това е точност, която отговаря на самата география, иначе се надявам точността между 2 точки да е поне 1 м., без оглед на географията. Та входа ми е от 0-4 м число float.
Изхода ще е стойността на числото, което регулира оборотите на двигателя, да ме върне в запаметената точка с такава скорост, каквото е течението в момента, т.е. да отговаря на обстановката. От опит знам какъв трябва де е диапазона и скоростта - от 0 до 3 км/ч или това е число от 0-40. Изхода вече е не веществено число, не е необходим float. Имам вход 0-4 и изход от 0-40.
Системата както казах е доста инертна. Току така изневиделица течение не се появява, има само порив на вятъра, който също ще ме бута. Та един такъв порив не трябва да ми сменя скоростта, само тенденция.
Понеже съм наясно с входно-изходните параметри, ще мога да направя настройката на ПИД-а директно с плотера на компилатора. Само трябва да симулирам с един таймер различни стойности на входа и на графика ще виждам идеално какво става с изходните данни. Това ще го направя съвсем скоро.