We are about to switch to a new forum software. Until then we have removed the registration on this forum.
I'm trying to write a code which moves an ellipse when it reads a particular serial input. But what happens is when it receives the particular value it moves all the way to the end of the screen. Looking at the code I can work out yes thats what will happen. But previously I was able to do the same thing with similar code and it worked out perfectly. I tried copying and pasting that codes into it but still it doesn't move in steps.
Here is the code I'm working on import processing.serial.*; Serial myPort; // Create object from Serial class int val;
int Xpos = 200;
int Ypos = 200;
void setup() {
size(400, 400);
noStroke();
String portName = Serial.list()[2];
myPort = new Serial(this, portName, 9600);
}
void draw() {
move();
background(123);
ellipse(Xpos, Ypos, 80, 80);
}
void serialEvent(Serial myPort) {
val = myPort.read();
println(val);
}
void move(){
if (val == 1) {
if (Ypos>0) {
Ypos = Ypos - 2;
}
}
if (val == 2) {
if (Ypos<height) {
Ypos = Ypos + 2;
}
}
if (val == 3) {
if (Xpos>0) {
Xpos = Xpos -2;
}
}
if (val == 4) {
if (Xpos< width) {
Xpos = Xpos + 2;
}
}
}
Answers
probably it is moving in steps but they could be happening really fast. To experiment, try adding
frameRate(1);
inside your setup() function. If you see steps every seconds, then this implies that you have a high input rate.An alternative, call move like this:
(if(frameCount%30==0)) move();
This will call move every second instead of 30 times per second.Kf