我正在尝试使用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
的值。
答案 0 :(得分:0)
请尝试发布有效代码。由于缺少括号,因此该代码无法编译,因为它不是MCVE,所以我们无法运行它。
我还建议您养成debugging your code的习惯,以了解发生了什么情况。逐行逐步检查代码,找出每行何时发生。
具体地说,您只在此处设置值:
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
变量不会自动更新已经使用该变量的位置。每次值更改时,您需要手动更新数字框。
答案 1 :(得分:0)
使用.setStringValue()
而不是Integer.valueOf(val)
。
您将必须调用if ( port.available() > 0)
{
val = port.readStringUntil('\n');
cp5.get("temp").setValue(Integer.valueOf(val));
}
将其转换为Numberbox可以接受的类型。
结果代码如下:
text()
但是,如果您只想显示值,我建议使用 Processing的 TextArea
或 CP5 Textlabel
或{{1 }}是Numberbox
的专用对象,当您想为用户提供一种简单的方法来更改/指定值,而不仅仅是显示它时,就可以使用它。鼠标悬停在框上时,可以通过滚动鼠标中键来调整Numberbox的值。