//yup, those sure are libraries
#include <math.h>
#include <Servo.h>
//yup, those sure are servos
Servo Shoulder;
Servo Elbow;
int x = 30; //x position desired(input)
int y = 30; //y position desired(input)
int shoulderAngle = 0; //self-explanitory
int elbowAngle = 0; //self-explanitory
int bicep_Length = 60; //arm attached to first servo
int foremarm_Length = 70; //arm attached to second servo
float P = 0; //angle between the ground and the line from the endpoint to the base
float B = 0; //angle between the endpoint and the base
int shoulderPin = (3); //self-explanitory
int elbowPin = (5); //self-explanitory
void setup() {
pinMode(2, INPUT);
pinMode(4, INPUT);
Shoulder.attach(shoulderPin);
Elbow.attach(elbowPin);
Serial.begin(9600);
}
void loop() {
//im using a pretty simple PWM pre-built controller because i couldnt be arsed to design and build one myself
unsigned long moveRLButton = (pulseIn(7, HIGH));
unsigned long moveFBButton = (pulseIn(8, HIGH));
if (1300 <= moveFBButton <= 1500) {
x = x;
}
if (1300 >= moveFBButton) {
x = x - 1;
}
if (1500 <= moveFBButton) {
x = x + 1;
}
if (1300 <= moveRLButton <= 1500) {
y = y;
}
if (moveRLButton < 1200) {
y = y + 1;
}
if (moveRLButton > 1500) {
y = y - 1;
}
//these just stop the arm from attempting to move out of bounds
if (x >= 60) {
x = 60;
}
if (x <= 10) {
x = 10;
}
if (y >= 60) {
y = 60;
}
if (y <= 10) {
y = 10;
}
//(allegedly) super simple inverse kinematics for 2dof
int C2 = (x ^ 2 + y ^ 2);
float C = sqrt(C2);
float P = atan(y / x);
float B = acos((foremarm_Length ^ 2 - bicep_Length ^ 2 - C2) / -2 * bicep_Length * C);
elbowAngle = acos((C2 - bicep_Length ^ 2 - foremarm_Length ^ 2) / -2 * bicep_Length * foremarm_Length);
shoulderAngle = (B + P);
//writes the desired angle to the servos
Shoulder.write(shoulderAngle);
Elbow.write(elbowAngle);
//tells me what to cry about(only here so i can see if im getting the right #'s)
Serial.println(shoulderAngle);
Serial.println(elbowAngle);
Serial.println(C);
Serial.println(C2);
Serial.println(P);
Serial.println(B);
delay(400000);
}
i think i might be using a wrong variable type or have an operation in some way formatted incorrectly(ie i see ((x^2) + (y^2)) but code sees ((x) ^ (2+y) ^ (2)) (<--tried this, did not fix the issue) but for the life of me i cant figure out what is the issue, though B almost always outputs not a number which is what id like help with to start off with; im so sorry if tis cripplingly obvious im very new to this