rhandycan1

ESP32_ARDUINO IDE_4SERVO_ROBOT

Aug 3rd, 2025 (edited)
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.55 KB | Source Code | 0 0
  1. //PROGRAM BY: RANDY N. CAÑADA
  2. /*SUBSCRIBE: FB PAGES:
  3. Playlist.ph:
  4. https://www.facebook.com/profile.php?id=61573177858722
  5.  
  6. Arduino:
  7. https://www.facebook.com/rhacan2?__tn__=R
  8.  
  9. YOUTUBE:
  10. PlaylistPH
  11. https://www.youtube.com/@PlaylistPh-h2v
  12.  
  13. ElectroCrafters:
  14. https://www.youtube.com/channel/UCu1aqzUdTqSnTN5BHNlbVgA */
  15.  
  16.  
  17. #include <WiFi.h>
  18. #include <ESP32Servo.h>
  19.  
  20. const char* ssid = "YOUR WIFI";
  21. const char* password = "YOUR PASSWORD";
  22. WiFiServer server(1234);
  23.  
  24. // Servo Pins
  25. const int pinJaw = 14;
  26. const int pinA   = 15;   //FWD_REVERSE ARM
  27. const int pinB   = 2;    // UP_DOWN ARM
  28. const int pinD   = 13;   //BOTTOM BASE
  29.  
  30. // Servo Objects
  31. Servo servoJaw, servoA, servoB, servoD;
  32.  
  33. // Angles
  34. int jawAngle = 80, targetJaw = 80;
  35. int angleA = 45, targetA = 45;
  36. int angleB = 90, targetB = 90;
  37. int angleD = 90, targetD = 90;
  38.  
  39. // Attachment Flags + Inactivity Timing
  40. bool servoA_attached = false;
  41. bool servoB_attached = false;
  42. bool servoD_attached = false;
  43.  
  44. unsigned long lastAActivity = 0;
  45. unsigned long lastBActivity = 0;
  46. unsigned long lastDActivity = 0;
  47.  
  48. const unsigned long detachDelay = 3000;
  49.  
  50. void setup() {
  51.   Serial.begin(115200);
  52.   delay(1000);
  53.  
  54.   Serial.println("📡 Connecting to Wi-Fi...");
  55.   WiFi.begin(ssid, password);
  56.   while (WiFi.status() != WL_CONNECTED) {
  57.     delay(500); Serial.print(".");
  58.   }
  59.  
  60.   Serial.println("\n✅ Connected! IP: " + WiFi.localIP());
  61.   server.begin();
  62.  
  63.   // Jaw always attached
  64.   servoJaw.setPeriodHertz(50);
  65.   servoJaw.attach(pinJaw, 500, 2400);
  66.   servoJaw.write(jawAngle);
  67.   Serial.println("🦷 Jaw attached (pin 14)");
  68.  
  69.   // Servo D is safe to initialize at center (90°)
  70.   servoD.setPeriodHertz(50);
  71.   servoD.attach(pinD, 500, 2400);
  72.   servoD.write(angleD);
  73.   servoD_attached = true;
  74.   Serial.println("🌀 Servo D attached (pin 13) → 90°");
  75. }
  76.  
  77. void loop() {
  78.   WiFiClient client = server.available();
  79.  
  80.   if (client) {
  81.     Serial.println("🎮 Controller connected");
  82.  
  83.     while (client.connected()) {
  84.       if (client.available()) {
  85.         String input = client.readStringUntil('\n');
  86.         input.trim();
  87.  
  88.         // Jaw servo (ABS_RX)
  89.         if (input.startsWith("AXIS:ABS_RX:")) {
  90.           int absRx = input.substring(input.lastIndexOf(':') + 1).toInt();
  91.           targetJaw = map(absRx, 0, 32767, 70, 90);
  92.         }
  93.  
  94.         // Servo A (ABS_X)
  95.         else if (input.startsWith("AXIS:ABS_X:")) {
  96.           int absX = input.substring(input.lastIndexOf(':') + 1).toInt();
  97.           targetA = map(absX, -32768, 32767, 0, 90);
  98.           lastAActivity = millis();
  99.           if (!servoA_attached) {
  100.             servoA.setPeriodHertz(50);
  101.             servoA.attach(pinA, 500, 2400);
  102.             servoA.write(angleA);
  103.             servoA_attached = true;
  104.             Serial.println("🦿 Servo A attached (pin 15)");
  105.           }
  106.         }
  107.  
  108.         // Servo B (ABS_Y)
  109.         else if (input.startsWith("AXIS:ABS_Y:")) {
  110.           int absY = input.substring(input.lastIndexOf(':') + 1).toInt();
  111.           targetB = map(absY, -32768, 32767, 180, 0);
  112.           lastBActivity = millis();
  113.           if (!servoB_attached) {
  114.             servoB.setPeriodHertz(50);
  115.             servoB.attach(pinB, 500, 2400);
  116.             servoB.write(angleB);
  117.             servoB_attached = true;
  118.             Serial.println("🦿 Servo B attached (pin 2)");
  119.           }
  120.         }
  121.  
  122.         // Servo D (ABS_RY)
  123.         else if (input.startsWith("AXIS:ABS_RY:")) {
  124.           int absRy = input.substring(input.lastIndexOf(':') + 1).toInt();
  125.           targetD = map(absRy, -32768, 32767, 0, 180);
  126.           lastDActivity = millis();
  127.           if (!servoD_attached) {
  128.             servoD.setPeriodHertz(50);
  129.             servoD.attach(pinD, 500, 2400);
  130.             servoD.write(angleD);
  131.             servoD_attached = true;
  132.             Serial.println("🌀 Servo D attached (pin 13)");
  133.           }
  134.         }
  135.       }
  136.  
  137.       // Smooth jaw motion
  138.       if (jawAngle != targetJaw) {
  139.         jawAngle += (jawAngle < targetJaw) ? 1 : -1;
  140.         servoJaw.write(jawAngle);
  141.         Serial.printf("🦷 Jaw angle → %d°\n", jawAngle);
  142.       }
  143.  
  144.       // Servo A motion + detach
  145.       if (servoA_attached) {
  146.         if (angleA != targetA) {
  147.           angleA += (angleA < targetA) ? 1 : -1;
  148.           servoA.write(angleA);
  149.           Serial.printf("🦿 Servo A angle → %d°\n", angleA);
  150.         }
  151.         if (millis() - lastAActivity > detachDelay) {
  152.           servoA.detach();
  153.           servoA_attached = false;
  154.           Serial.println("⛓️ Servo A detached (timeout)");
  155.         }
  156.       }
  157.  
  158.       // Servo B motion + detach
  159.       if (servoB_attached) {
  160.         if (angleB != targetB) {
  161.           angleB += (angleB < targetB) ? 1 : -1;
  162.           servoB.write(angleB);
  163.           Serial.printf("🦿 Servo B angle → %d°\n", angleB);
  164.         }
  165.         if (millis() - lastBActivity > detachDelay) {
  166.           servoB.detach();
  167.           servoB_attached = false;
  168.           Serial.println("⛓️ Servo B detached (timeout)");
  169.         }
  170.       }
  171.  
  172.       // Servo D motion + detach
  173.       if (servoD_attached) {
  174.         if (angleD != targetD) {
  175.           angleD += (angleD < targetD) ? 1 : -1;
  176.           servoD.write(angleD);
  177.           Serial.printf("🌀 Servo D angle → %d°\n", angleD);
  178.         }
  179.         if (millis() - lastDActivity > detachDelay) {
  180.           servoD.detach();
  181.           servoD_attached = false;
  182.           Serial.println("⛓️ Servo D detached (timeout)");
  183.         }
  184.       }
  185.  
  186.       delay(10);
  187.     }
  188.  
  189.     client.stop();
  190.     Serial.println("⚡ Controller disconnected");
  191.   }
  192. }
  193.  
Advertisement
Add Comment
Please, Sign In to add comment