Skip to content
Snippets Groups Projects
Commit d11520bb authored by mhby1g21's avatar mhby1g21
Browse files

added smooth movement

parent 38f94011
No related branches found
No related tags found
No related merge requests found
...@@ -16,10 +16,10 @@ Servo ring; ...@@ -16,10 +16,10 @@ Servo ring;
Servo pinky; Servo pinky;
// Servo pins // Servo pins
const int indexPin = 5; const int indexPin = 2;
const int middlePin = 4; const int middlePin = 3;
const int ringPin = 3; const int ringPin = 4;
const int pinkyPin = 2; const int pinkyPin = 5;
// Current positions // Current positions
int indexPos = 90; int indexPos = 90;
...@@ -27,6 +27,16 @@ int middlePos = 90; ...@@ -27,6 +27,16 @@ int middlePos = 90;
int ringPos = 90; int ringPos = 90;
int pinkyPos = 90; int pinkyPos = 90;
// Target positions for smooth movement
int indexTarget = 90;
int middleTarget = 90;
int ringTarget = 90;
int pinkyTarget = 90;
// Movement parameters
const int STEP_DELAY = 5; // Delay between steps (ms)
const int STEP_SIZE = 15; // Size of each step in degrees
void setup() { void setup() {
Serial.begin(9600); Serial.begin(9600);
...@@ -62,7 +72,29 @@ void setup() { ...@@ -62,7 +72,29 @@ void setup() {
server.begin(); server.begin();
} }
void moveServoSmooth(Servo &servo, int &currentPos, int targetPos) {
if (currentPos < targetPos) {
for (int pos = currentPos; pos <= targetPos; pos += STEP_SIZE) {
servo.write(pos);
currentPos = pos;
delay(STEP_DELAY);
}
} else {
for (int pos = currentPos; pos >= targetPos; pos -= STEP_SIZE) {
servo.write(pos);
currentPos = pos;
delay(STEP_DELAY);
}
}
}
void loop() { void loop() {
// Handle smooth servo movements
if (indexPos != indexTarget) moveServoSmooth(index_f, indexPos, indexTarget);
if (middlePos != middleTarget) moveServoSmooth(middle, middlePos, middleTarget);
if (ringPos != ringTarget) moveServoSmooth(ring, ringPos, ringTarget);
if (pinkyPos != pinkyTarget) moveServoSmooth(pinky, pinkyPos, pinkyTarget);
WiFiClient client = server.available(); WiFiClient client = server.available();
if (client) { if (client) {
...@@ -95,6 +127,7 @@ void loop() { ...@@ -95,6 +127,7 @@ void loop() {
client.println(".button:hover { background: #45a049; }"); client.println(".button:hover { background: #45a049; }");
client.println(".preset { background: #2196F3; }"); client.println(".preset { background: #2196F3; }");
client.println(".reset { background: #f44336; }"); client.println(".reset { background: #f44336; }");
client.println(".wave { background: #ff9800; }");
client.println("</style>"); client.println("</style>");
client.println("</head>"); client.println("</head>");
client.println("<body>"); client.println("<body>");
...@@ -126,6 +159,12 @@ void loop() { ...@@ -126,6 +159,12 @@ void loop() {
client.println("<button class='button reset' onclick='resetPositions()'>Reset to 90°</button>"); client.println("<button class='button reset' onclick='resetPositions()'>Reset to 90°</button>");
client.println("</div>"); client.println("</div>");
// Wave motion controls
client.println("<div class='control-group'>");
client.println("<h3>Wave Motion</h3>");
client.println("<button class='button wave' onclick='startWave()'>Start Wave</button>");
client.println("</div>");
// JavaScript // JavaScript
client.println("<script>"); client.println("<script>");
client.println("function updateFinger(finger, angle) {"); client.println("function updateFinger(finger, angle) {");
...@@ -141,6 +180,16 @@ void loop() { ...@@ -141,6 +180,16 @@ void loop() {
client.println("function resetPositions() {"); client.println("function resetPositions() {");
client.println(" allFingers(90);"); client.println(" allFingers(90);");
client.println("}"); client.println("}");
client.println("function startWave() {");
client.println(" let fingers = ['index', 'middle', 'ring', 'pinky'];");
client.println(" let delay = 0;");
client.println(" fingers.forEach(finger => {");
client.println(" setTimeout(() => updateFinger(finger, 180), delay);");
client.println(" setTimeout(() => updateFinger(finger, 0), delay + 1000);");
client.println(" delay += 500;");
client.println(" });");
client.println("}");
client.println("</script>"); client.println("</script>");
client.println("</body></html>"); client.println("</body></html>");
...@@ -173,34 +222,22 @@ void processRequest(String request) { ...@@ -173,34 +222,22 @@ void processRequest(String request) {
String command = request.substring(start, end); String command = request.substring(start, end);
Serial.println("Command: " + command); Serial.println("Command: " + command);
// Parse command and move servos // Parse command and set target positions
if (command.startsWith("/index/")) { if (command.startsWith("/index/")) {
int angle = command.substring(7).toInt(); indexTarget = constrain(command.substring(7).toInt(), 0, 180);
angle = constrain(angle, 0, 180); Serial.println("Moving index to " + String(indexTarget));
index_f.write(angle);
indexPos = angle;
Serial.println("Moving index to " + String(angle));
} }
else if (command.startsWith("/middle/")) { else if (command.startsWith("/middle/")) {
int angle = command.substring(8).toInt(); middleTarget = constrain(command.substring(8).toInt(), 0, 180);
angle = constrain(angle, 0, 180); Serial.println("Moving middle to " + String(middleTarget));
middle.write(angle);
middlePos = angle;
Serial.println("Moving middle to " + String(angle));
} }
else if (command.startsWith("/ring/")) { else if (command.startsWith("/ring/")) {
int angle = command.substring(6).toInt(); ringTarget = constrain(command.substring(6).toInt(), 0, 180);
angle = constrain(angle, 0, 180); Serial.println("Moving ring to " + String(ringTarget));
ring.write(angle);
ringPos = angle;
Serial.println("Moving ring to " + String(angle));
} }
else if (command.startsWith("/pinky/")) { else if (command.startsWith("/pinky/")) {
int angle = command.substring(7).toInt(); pinkyTarget = constrain(command.substring(7).toInt(), 0, 180);
angle = constrain(angle, 0, 180); Serial.println("Moving pinky to " + String(pinkyTarget));
pinky.write(angle);
pinkyPos = angle;
Serial.println("Moving pinky to " + String(angle));
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment