Hello, I am working on a project for school. I am working with Processing 3 with Arduino uno (both program and board). I am writing a GUI on Processing 3, so I can control Arduino. On my GUI, I have a box for inputs and a button called “move” (which currently works if you press the enter key, and I want to make it so that I can press the button with my mouse too). My problem is that I have a delay and a prompt. When a user inputs a degree of say 25, the prompt should appear, have a delay of 5 seconds, and then disappear.
My current problem is that when I enter a number, the delay happens first, then the prompt never shows because the computer reads it as “show the prompt and remove the prompt” back to back, therefore never showing the prompt. I aim for the prompt to show, delay it for 5 seconds, then remove the prompt. I can’t seem to get this to work in the way I want it to. I’ve tried delay(), wait(), sleep(), and nested if statements to perhaps get it to work. I am a beginner, so I am not that well experienced but I am trying my best. (So please be patient with me). I have also searched the internet for hours and couldn’t find a good solution to my problem.
I would appreciate it if someone could assist me, possibly??
Specifically, I am trying to address the problem in my “keypressed” function, in the last 3 if-statements at the end.
**also, if you could tell me how to make my button be able to be pressed with my mouse, I’d appreciate that. But it’s not needed, if you don’t have the time. ![]()
import controlP5.*;
import processing.serial.*;
import static javax.swing.JOptionPane.*;
import java.util.concurrent.TimeUnit;
Serial port;
ControlP5 cp5;
String d;
int angle, WGtracker = 0, Mover=0,timedelay=0,time,starttime,readback;
String url1;
boolean IBE = false, OB = false, indicator = false;
////////////////////////////////////////////
public static void wait(int ms)
{
try
{
Thread.sleep(ms);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}
void setup(){
size(1000,600);
port = new Serial(this, "COM3", 9600);
cp5 = new ControlP5(this);
cp5.addTextfield("Angle").setPosition(130,80).setSize(60,40);
cp5.addButton("Move").setPosition(230,80).setSize(60,40);
}
void draw(){
background(255,255,255);
fill(0,0,0);
textSize(50);
text("A.D.A.S Control GUI",250,50);
textSize(20);
if(indicator == false){
text("Enter angle\n"+"in box",10,90);
text("Current Position: " + (WGtracker) + " degrees",400,300);
}
if(IBE == true){
text("ERROR! Input Angle must be between 0 and 100",400,400);
}
if(OB == true){
text("The A.D.A.S cannot exceed 0 or 100 degrees",400,400);
}
if (indicator == true){
text("Please wait while the system moves",10,90);
cp5.addTextfield("Angle").setPosition(130,80).setSize(60,40).hide();
cp5.addButton("Move").setPosition(230,80).setSize(60,40).hide();
}
if(port.available() > 0){
d = port.readStringUntil('\n');
readback = int(d);
}
}
void keyPressed(){
switch(key){
case '\n':
url1 = cp5.get(Textfield.class,"Angle").getText();
angle = parseInt(url1);
//ERROR CODE TO CHECK IF USER INPUT IS BETWEEN 1 AND 100 DEGREES
if(angle > 100 || angle < 0){
IBE = true;
return;
}
// RESETS ERROR ONCE CORRECT INPUT IS ENTERED
IBE = false;
OB = false;
if(angle > WGtracker){
//port.write(Float.toString(101));
Mover = angle - WGtracker;
//port.write(Float.toString(Mover));
if(Mover == angle - WGtracker) {
indicator = true;
}
WGtracker = angle;
}
if(angle < WGtracker){
//port.write(Float.toString(102));
Mover = WGtracker - angle;
//port.write(Float.toString(Mover));
//wait(5000);
WGtracker = angle;
}
if(indicator == true) {
delay(5000);
indicator = false;
}
}
}