Как написать текст () в обработке при выводе данных из последовательного порта? - PullRequest
0 голосов
/ 21 ноября 2018

Недавно я учусь использовать обработку с моим arduino UNO, я проверил учебник по графику arduino , и он работает как чудо, но я не смог обновить простой текст, когда выданные рисования, например, если у меня есть источник данных в реальном времени, который поступает через последовательный порт.

Я хочу написать текст со значением, но кажется, что он каким-то образом затенен / перезаписан, и это невозможнодисплей с номером.

Проверьте следующее изображение:

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);

    }
}

Вот синтаксис выделенный код .

Почему происходит такое поведение?Что я могу сделать, чтобы исправить эту ситуацию и ясно видеть текст при построении данных?

Я ценю вашу помощь с этим, Спасибо, H.

1 Ответ

0 голосов
/ 21 ноября 2018

Большинство эскизов Обработки будут вызывать функцию background() в верхней части каждого вызова на draw() для очистки старых кадров.Вы вызываете функцию background() только тогда, когда график выходит за правый край экрана.Так что для большинства кадров вы рисуете прямо поверх предыдущих кадров.Вот почему вы видите свой текстовый стек поверх себя.

Чтобы это исправить, вам нужно либо вызывать функцию background() каждый кадр (для этого потребуется рефакторинг кода, чтобы каждый раз перерисовывать весь график)или, возможно, вам не удастся просто нарисовать прямоугольник поверх предыдущего текста.

...