We are about to switch to a new forum software. Until then we have removed the registration on this forum.
I have a pendulum and arduino reading script. I was able to track simple movements, but I cannot make it follow pendulum curve and convert it into degrees.
#include <Servo.h>
//load servo to control it
Servo myservo;
#define servoPin 9
int sangle=0;
//information comming into servo = numbers read from processing
int inByte=0;
void setup() {
//attach a pin 9 to servo
myservo.attach(servoPin);
Serial.begin(9600);
}
void loop() {
if(0<Serial.available()){
inByte=Serial.read();
}
sangle=inByte;
myservo.write(sangle);
}
and processing script:
import processing.serial.*;
Serial port;
float x= (PI/2);
float pos=0;
float pos1=PI/4;
byte sangle=0;
float angle_degrees=0;
float rotangle=0;
void setup() {
size(800, 800);
port=new Serial(this,"COM3",9600);
}
void draw() {
background(255);
// float rotangle = atan2(height/4, width/2);
//my servo is 90 degrees to each side =180
rotangle=constrain(rotangle,0,PI);
angle_degrees=degrees(rotangle);
println(angle_degrees);
//send information into arduino
port.write(sangle);
translate(width/2, height/4);
rotate(pos1*cos(millis()/900.0));
stroke(0);
strokeWeight(3);
line(0, 0, 0, 300);
fill(#0074FF);
noStroke();
ellipse(0, 300, 40, 40);
println(pos1);
println(angle_degrees);
}
Answers
in the processing script:
this
port.write(sangle);
should be
port.write(angle_degrees); or something like this.
Remark
You can use
map()
to transfer the values of angle_degrees to the value that the servo needs, e.g.Chrisir
It sounds like you are tracking a physical pendulum with sensors. If you are interested in classes that model pendulums, you also might find this interesting:
https://forum.processing.org/two/discussion/comment/108565/#Comment_108565