controlP5数字框变量打印

时间:2018-08-10 10:17:56

标签: arduino processing control-p5

我正在尝试使用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 个答案:

答案 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的值。