0% found this document useful (0 votes)
20 views

Tci Esp32

Uploaded by

Ibune Alvaro
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views

Tci Esp32

Uploaded by

Ibune Alvaro
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

#include <WiFi.

h>
#include <ESPAsyncWebServer.h>

// Deklarasi pin
const int pulserPin = 34; // Pin input dari pulser
const int ignitionPin = 26; // Output ke transistor FET untuk pengapian

// Variabel untuk RPM dan sudut pengapian


int rpm = 0;
int ignitionTiming = 10; // Awal pengapian default 10 derajat
unsigned long lastPulserTime = 0; // Waktu terakhir sinyal dari pulser
int rpmMapping[] = {0, 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000,
5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000, 9500, 10000, 10500, 11000, 11500,
12000, 12500, 13000};
int ignitionMapping[] = {10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36,
38, 40, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}; // Pengapian dari 10 derajat
hingga 42 derajat

// Setup server web


AsyncWebServer server(80);

void setup() {
// Inisialisasi serial monitor
Serial.begin(115200);

// Setup pin
pinMode(pulserPin, INPUT);
pinMode(ignitionPin, OUTPUT);

// Setup WiFi Access Point


WiFi.softAP("ECU_ESP32", "123456789");

// Handle untuk halaman web


server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
String html = "<html><body>";
html += "<h1>ECU Motor Control</h1>";
html += "<p>RPM: " + String(rpm) + "</p>";
html += "<p>Ignition Timing: " + String(ignitionTiming) + " degrees</p>";
html += "<form action='/settiming' method='GET'>";
html += "<label for='timing'>Set Ignition Timing (10-42): </label>";
html += "<input type='number' id='timing' name='timing' min='10' max='42'
value='" + String(ignitionTiming) + "'>";
html += "<input type='submit' value='Set Timing'>";
html += "</form>";
html += "</body></html>";
request->send(200, "text/html", html);
});

// Handle untuk mengubah ignition timing


server.on("/settiming", HTTP_GET, [](AsyncWebServerRequest *request){
if (request->hasParam("timing")) {
String timingValue = request->getParam("timing")->value();
ignitionTiming = timingValue.toInt();
}
request->redirect("/");
});

// Mulai server
server.begin();
}

void loop() {
// Hitung RPM dari pulser
int pulserState = digitalRead(pulserPin);
if (pulserState == HIGH) {
unsigned long currentTime = millis();
if (currentTime - lastPulserTime > 0) {
rpm = 60000 / (currentTime - lastPulserTime); // Hitung RPM
lastPulserTime = currentTime;
}
}

// Pemetaan RPM ke pengapian


for (int i = 0; i < sizeof(rpmMapping) / sizeof(rpmMapping[0]); i++) {
if (rpm <= rpmMapping[i]) {
ignitionTiming = ignitionMapping[i];
break;
}
}

// Simulasikan pengapian (mengirim sinyal PWM ke transistor)


digitalWrite(ignitionPin, HIGH);
delayMicroseconds(ignitionTiming * 100); // Durasi sinyal berdasarkan timing
pengapian
digitalWrite(ignitionPin, LOW);
}

You might also like