Обновление экрана

pio37
Offline
Зарегистрирован: 18.01.2018

Добрый день!

Вопрос такой. Процессинг получает от Arduino занчение параметра и строит по нему график. Как сделать, чтобы это происходило раз в 5 секунд (считывание нового значение и построение графика)? Сейас график строится только один раз.

import processing.serial.*;

import cc.arduino.*;

Arduino arduino;

int rotation;
int x=0;  
int y=0;  
int xk=0; 
int yk=0;
float i = 0.0;
int v0 = 10;
float a;

void setup() {
  fullScreen();  
  background(74, 184, 179); 
  stroke(255); 
  arduino = new Arduino(this, Arduino.list()[0], 57600);
 
}

void draw() {
  x=40;  
  y=728;  
  xk=40; 
  yk=728;
  fill( 255, 0, 0 );
  strokeWeight(1);
  ellipse(40, 728, 60, 60 );
  strokeWeight(10);
  rotation = arduino.analogRead(0);
  a = map(rotation, 0, 1023, 0, 90);
  while (i<=3.0){
    x = 40 + round(( v0 * i * cos(a * 3.14 / 180))*100);
    y =728 - round((v0 * i * sin(a * 3.14 / 180) - (9.81 * i * i) / 2)*100);
    line (xk, yk, x, y); 
    xk=x; 
    yk=y; 
    i += 0.1;
    delay(100);
  }
}

 

Nosferatu
Offline
Зарегистрирован: 04.11.2012

У вас цикл while запускается только один раз, так как переменная i  ни где не сбрасывается.

ata3d
Offline
Зарегистрирован: 24.05.2017

Я делал так - Arduino по таймеру запускал передачу  данных по COM порту, а Процессинг получал данные


void draw() {  
if (li==1) {noLoop(); } 
if (li==0) {redraw();   
обработка данных
} 

void serialEvent(Serial myPort) { 
int inByte = myPort.read(); 
if (firstContact == false) { 
  if (inByte == 'A') {  
    myPort.clear(); // clear the serial port buffer 
    firstContact = true; // you've had first contact from the microcontroller 
    myPort.write('A'); // ask for more  
  }  
}  
else { 
  serialInArray[serialCount] = inByte; 
  //println(serialInArray[serialCount]+ " " + serialCount); 
  serialCount++; 
   
  if (serialCount > 9 ) {
    li=0; 
    loop();  
    
    myPort.write('A'); 
    serialCount = 0; 
    } 
  }
}

 

pio37
Offline
Зарегистрирован: 18.01.2018

Спасибо! Дурацкая ошибка. Проглядел. Все заработало.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Это потому, что i глобальная переменная. Для циклов нужно объявлять локальные переменные, тогда забыть будет сложнее.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Можно обнулять эту переменную раз в 5 секунд чтобы обновлять экран, как хотел ТС.