Переменная печать числового поля 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 переменная не обновляет автоматически места, которые уже использовали переменную. Вам нужно вручную обновлять числовое поле каждый раз, когда значение изменяется.

Другие вопросы по тегам