Переменная печать числового поля controlP5
Я пытаюсь напечатать переменную в поле номера, используя controlp5. Данные считываются из последовательного порта и сохраняются в переменной. Я хочу напечатать значение в числовом поле, оно не работает. когда я печатаю его в консоли, оно показывает значение, но не в поле номера.
Вот мой код:
import controlP5.*;
import processing.serial.*;
ControlP5 cp5;
PFont font;
enter code here
void setup(){
size(300, 450);
port = new Serial(this, "COM3", 19200);
cp5 = new ControlP5(this);
font = createFont("calibri light bold", 20);
cp5.addButton("increase").setPosition(100, 50)
.setSize(120, 70).setFont(font);
cp5.addButton("decrease").setPosition(100, 250)
.setSize(120, 70).setFont(font);
cp5.addNumberbox("temp").setPosition(100,160)
.setSize(120,70).setFont(font).setStringValue(val);
void draw(){
background(150, 0 , 150);`
fill(0, 255, 0);
textFont(font);
text("CONTROL", 80, 30);
if ( port.available() > 0)
{
val = port.readStringUntil('\n');
}
println(val);
void increase(){
port.write('r');
}
void decrease(){
port.write('b');
}
В этом коде val
переменная и данные считываются из последовательного порта и сохраняются в val
но .setStringValue(val)
не печатает значение val
, но если я распечатаю val
в командной консоли показывает значение переменной val
,
2 ответа
использование .setValue()
скорее, чем .setStringValue()
,
Вам придется позвонить Integer.valueOf(val)
чтобы привести его к типу, который примет ваш Numberbox.
Полученный код может выглядеть так:
if ( port.available() > 0)
{
val = port.readStringUntil('\n');
cp5.get("temp").setValue(Integer.valueOf(val));
}
Однако, если вы просто хотите отобразить значение, я бы порекомендовал использовать text()
или CP5 TextArea
или же Textlabel
поскольку Numberbox
предназначен для использования, когда вы хотите предоставить пользователю простой способ изменить / указать значение, а не просто отобразить его. Значение Numberbox можно настроить, прокручивая среднюю кнопку мыши, когда мышь находится над полем.
Пожалуйста, попробуйте опубликовать правильный код. Этот код не будет компилироваться, так как у вас отсутствуют скобки, и мы не можем запустить его, потому что это не MCVE.
Я также рекомендую вам привыкнуть к отладке кода, чтобы понять, что происходит. Пошагово просматривайте свой код, чтобы понять, когда происходит каждая строка.
В частности, вы только устанавливаете значение здесь:
cp5.addNumberbox("temp").setPosition(100,160)
.setSize(120,70).setFont(font).setStringValue(val);
Эта строка кода происходит один раз в начале, когда val
устанавливается в значение по умолчанию. (Обратите внимание, что вы даже не объявляете переменную в опубликованном вами коде. Пожалуйста, опубликуйте MCVE.)
Позже в коде вы обновляете val
переменная:
if ( port.available() > 0)
{
val = port.readStringUntil('\n');
}
println(val);
Но обратите внимание, что вы не обновляете значение, отображаемое в вашем числовом поле. Обновление val
переменная не обновляет автоматически места, которые уже использовали переменную. Вам нужно вручную обновлять числовое поле каждый раз, когда значение изменяется.