Я нахожусь в классе визуального программирования, пытаюсь создать графический интерфейс в обработке, который в конечном итоге будет управлять Arduino MeArm.У меня есть элемент controlP5 для каждого из 4 сервоприводов, значения которых хранятся в виде переменных типа int.
Например, моя переменная для локтя будет иметь вид:
eVal = (int)elbow.getValue();
У меня есть несколько функцийдля хранения последовательности для воспроизведения.Когда шаг выполняется, он проверяет, равно ли текущее значение сохраненному значению, и сложит или вычтет 1, пока не достигнет его.
Вот пример для локтя:
if(eReset){
if(eVal > currentStep[2])
eVal --;
else if(eVal < currentStep[2])
eVal ++;
else if(eVal == currentStep[2])
eReset=false;
println(eVal);
}
где currentStep - это массив, содержащий значения каждого сервопривода на конкретном шаге.Моя проблема в том, что когда я затем устанавливаю значение сервопривода на новое значение в каждом кадре,
elbow.setValue(eVal);
есть некоторые цифры, где он пытается добавить 0,99 вместо 1. Одно место, о котором я думаюверхняя часть моей головы меняется с 4 до 5, она застревает на 4,99, хотя оператор print будет показывать 5. Это происходит с постоянными интервалами, как это всегда происходит при переходе с 4 на 5 и нескольких других чисел.И я абсолютно не знаю, как это исправить, потому что я работаю только с целыми числами, так что я не уверен, как туда попал float.
Редактировать: Это в функции setup ()-
int eVal = 0;
Slider elbow=cp5.addSlider("Elbow")
.setRange(-100, 100)
.setPosition(30, 330)
.setSize(20, 240)
.setValue(0);
Затем в функции draw () -
eVal = (int)elbow.getValue();
//checks to see if the GUI needs to change eVal because of sequences
elbow.setValue(eVal);
Проблема возникает, когда я пытаюсь увеличить или уменьшить eVal на 1, а затем установить для него значение локтя.
Например,
//elbow.getValue() = 4.0
eVal = (int)elbow.getValue(); //eVal = 4;
eVal++; //eVal = 5
elbow.setValue(eVal); //elbow.getValue() should = 5
Но по какой-то причине в этой последней строке значение локтя установлено на 4,99, поэтому, когда эти вычисления выполняются в следующем кадре, eVal округляется до 4.