从串行端口绘制数据时如何在处理中写入text()?

时间:2018-11-21 04:41:23

标签: plot serial-port processing

最近,我正在学习将处理与我的arduino UNO一起使用,我已经检查过arduino graph tutorial,它的作用就像一个超级按钮,但是当您绘制数据时,我一直无法刷新简单的文本,例如例如,如果我具有通过串行端口来的实时数据源。

我想用该值写一个文本,但是似乎它以某种方式被遮盖/覆盖,并且无法用数字显示。

检查以下图像:

enter image description here

绘制该数据的源代码如下:

/*
GreenLine Temperature Graph,
Modified from https://www.arduino.cc/en/Tutorial/Graph
c1b3r
*/

import processing.serial.*;    
Serial myPort;        
int xPos = 1; 
color eggshell = color(255, 253, 248);

int temperaturaActual;
float temperaturaPreviaAltura = 0 ;
String inDataArduino;
PFont font;

void setup () {
    size(600,600);
    //fullScreen();  
    frameRate(30);   
    println(Serial.list());
    myPort = new Serial(this, Serial.list()[0], 9600);
    myPort.bufferUntil('\n');
    background(0);
    font = createFont("Arial",32,true);

}


void draw () {
  int Xmaxgraph = int(width-(width/4));
  println(Xmaxgraph,width, height);
  temperaturaActual = int(inDataArduino);
  float alturaTemperatura = map(temperaturaActual, 0, 1023, 0, height);
  stroke(255,255,255);
  line(Xmaxgraph, 0, Xmaxgraph, height);
  textSize(40);
  fill(255, 0, 0);
  textFont(font,16);                 
  text("Temp°", width - 150, 40);
  text(temperaturaActual, width - 150, 90);
  fill(255,255,0);
  text("Estado", width - 150, height-100);
  stroke(0,255,0);
  line(xPos-1, height - temperaturaPreviaAltura, xPos, height- alturaTemperatura);
  temperaturaPreviaAltura = alturaTemperatura;  
  if (xPos >= Xmaxgraph) {
    xPos = 0;
    background(0);
} else {
    xPos++;
 }

}
void serialEvent (Serial myPort) {
  inDataArduino = myPort.readStringUntil('\n');
  if (inDataArduino != null) {
    inDataArduino = trim(inDataArduino);

    }
}

这是语法highlighted code

为什么会发生这种现象?我该如何解决这种情况,并在绘制数据时清楚地看到文本?

感谢您的帮助, 谢谢,

1 个答案:

答案 0 :(得分:1)

大多数处理草图将在每次调用background()的顶部调用draw()函数,以清除旧框架。当图形偏离屏幕的右边缘时,仅调用background()函数。因此,对于大多数框架,您都直接在以前的框架上绘制。这就是为什么您在顶部看到文本堆栈的原因。

要解决此问题,您要么需要在每一帧调用background()函数(这将需要重构代码以每次重绘整个图形),或者您可能只是在矩形上绘制一个矩形而逃脱了。以前的文字。