Обновление экрана
- Войдите на сайт для отправки комментариев
Чт, 18/01/2018 - 12:52
Добрый день!
Вопрос такой. Процессинг получает от 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);
}
}
У вас цикл while запускается только один раз, так как переменная i ни где не сбрасывается.
Я делал так - 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; } } }Спасибо! Дурацкая ошибка. Проглядел. Все заработало.
Это потому, что i глобальная переменная. Для циклов нужно объявлять локальные переменные, тогда забыть будет сложнее.
Можно обнулять эту переменную раз в 5 секунд чтобы обновлять экран, как хотел ТС.