0

我正在尝试使用 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

4

2 回答 2

0

请尝试发布有效代码。由于缺少括号,此代码将无法编译,并且我们无法运行它,因为它不是MCVE

我还建议您养成调试代码的习惯,以了解发生了什么。逐行浏览您的代码以确定每一行发生的时间。

具体来说,您只在此处设置值:

cp5.addNumberbox("temp").setPosition(100,160)
.setSize(120,70).setFont(font).setStringValue(val);

这行代码在开始时发生一次,whenval设置为其默认值。(请注意,您甚至没有在发布的代码中声明变量。发布 MCVE。)

稍后在代码中,您更新val变量:

if ( port.available() > 0) 
{ 
  val = port.readStringUntil('\n'); 
}
println(val); 

但请注意,您不会更新数字框中显示的值。更新val变量不会自动更新已使用该变量的位置。每次值更改时,您都需要手动更新数字框。

于 2018-08-10T20:12:18.043 回答
0

使用.setValue()而不是.setStringValue().

您必须调用Integer.valueOf(val)才能将其转换为您的 Numberbox 将接受的类型。

生成的代码可能如下所示:

if ( port.available() > 0) 
{ 
  val = port.readStringUntil('\n');
  cp5.get("temp").setValue(Integer.valueOf(val));
}

但是,如果您只是想显示该值,我建议您使用Processing's text()CP5 TextArea,或者Textlabel因为Numberbox它旨在为用户提供一种简单的方法来更改/指定一个值,而不仅仅是显示它。当鼠标悬停在数字框上时,可以通过滚动鼠标中键来调整数字框的值。

于 2018-08-15T19:08:04.890 回答