Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Import required libraries
- #include <Arduino.h>
- #ifdef ESP32
- #include <WiFi.h>
- #include <AsyncTCP.h>
- #elif defined(ESP8266)
- #include <ESP8266WiFi.h>
- #include <ESPAsyncTCP.h>
- #endif
- #include <ESPAsyncWebServer.h>
- #include <FS.h>
- #include <Servo.h>
- /* Put your SSID & Password */
- const char* ssid = "Car-ESP"; // Enter SSID here
- const char* password = "12345678"; // Enter Password here
- /* Put IP Address details */
- IPAddress local_ip(192,168,1,1);
- IPAddress gateway(192,168,1,1);
- IPAddress subnet(255,255,255,0);
- // Create AsyncWebServer object on port 80
- AsyncWebServer server(80);
- int in1 = D4;
- int in2 = D3;
- int enA = D2; // Enable pin for speed control
- const int servoPin = D1;
- Servo servo;
- int currentServoAngle = 90; // Starting position for servo
- void smoothServoMove(int targetAngle) {
- while (currentServoAngle != targetAngle) {
- if (currentServoAngle < targetAngle) {
- currentServoAngle++;
- } else if (currentServoAngle > targetAngle) {
- currentServoAngle--;
- }
- servo.write(currentServoAngle);
- delay(15); // Adjust delay for smoothness
- }
- }
- void setup() {
- // Serial port for debugging purposes
- Serial.begin(115200);
- Serial.println();
- servo.attach(servoPin);
- servo.write(currentServoAngle);
- if(SPIFFS.begin()) {
- Serial.println("SPIFFS initialised OK");
- }
- pinMode(in1, OUTPUT);
- pinMode(in2, OUTPUT);
- pinMode(enA, OUTPUT);
- WiFi.softAP(ssid, password);
- WiFi.softAPConfig(local_ip, gateway, subnet);
- delay(100);
- // Route for root / web page
- server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
- request->send(SPIFFS, "/index.html", "text/html");
- });
- server.on("/assets/js/jquery.min.js", HTTP_GET, [](AsyncWebServerRequest *request) {
- request->send(SPIFFS, "/assets/js/jquery.min.js", "text/javascript");
- });
- server.on("/joystick", HTTP_POST, [](AsyncWebServerRequest *request) {
- if (request->hasArg("x") && request->hasArg("y")) {
- String xValue = request->arg("x");
- String yValue = request->arg("y");
- int x = xValue.toInt();
- int y = yValue.toInt();
- // Calculate speed based on joystick position
- int speed = map(abs(y - 512), 0, 512, 0, 255);
- // Handle motor control
- if (y > 600) { // Forward
- digitalWrite(in1, HIGH);
- digitalWrite(in2, LOW);
- analogWrite(enA, speed);
- } else if (y < 400) { // Reverse
- digitalWrite(in1, LOW);
- digitalWrite(in2, HIGH);
- analogWrite(enA, speed);
- } else { // Stop
- digitalWrite(in1, LOW);
- digitalWrite(in2, LOW);
- analogWrite(enA, 0);
- }
- // Handle servo control
- int targetAngle = map(x, 0, 1023, 0, 180);
- smoothServoMove(targetAngle);
- request->send(200, "text/plain", "ok");
- } else {
- // Invalid request, return error
- request->send(400, "text/plain", "Bad Request");
- }
- });
- server.onNotFound([](AsyncWebServerRequest *request){
- // Reset motor and servo when joystick is released
- digitalWrite(in1, LOW);
- digitalWrite(in2, LOW);
- analogWrite(enA, 0);
- smoothServoMove(90);
- request->send(404, "text/plain", "Not Found");
- });
- // Start server
- server.begin();
- }
- void loop() {}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement