185 lines
5.8 KiB
C++
185 lines
5.8 KiB
C++
#include <ESP8266WiFi.h>
|
|
#include <WebSocketsServer.h>
|
|
#include <ESP8266WebServer.h>
|
|
#include <ESP8266mDNS.h>
|
|
#include "FS.h"
|
|
|
|
volatile int estado = HIGH;
|
|
|
|
volatile int left_motor, throttle_left_motor, throttle_counter_left_motor, throttle_left_motor_memory;
|
|
volatile int right_motor, throttle_right_motor, throttle_counter_right_motor, throttle_right_motor_memory;
|
|
|
|
unsigned long loop_timer;
|
|
unsigned char Dir_m_left=D5;
|
|
unsigned char Step_m_left=D6;
|
|
unsigned char Dir_m_right=D3;
|
|
unsigned char Step_m_right=D4;
|
|
bool FWD=HIGH;
|
|
bool BWD=LOW;
|
|
volatile int valor=0;
|
|
|
|
int descI=0;
|
|
int descR=0;
|
|
|
|
|
|
extern "C" {
|
|
#include "user_interface.h"
|
|
}
|
|
|
|
os_timer_t myTimer;
|
|
|
|
bool tickOccured;
|
|
|
|
// start of timerCallback
|
|
void timerCallback(void *pArg) {
|
|
throttle_counter_left_motor ++; //Increase the throttle_counter_left_motor variable by 1 every time this routine is executed
|
|
if(throttle_counter_left_motor > throttle_left_motor_memory){ //If the number of loops is larger then the throttle_left_motor_memory variable
|
|
throttle_counter_left_motor = 0; //Reset the throttle_counter_left_motor variable
|
|
throttle_left_motor_memory = throttle_left_motor; //Load the next throttle_left_motor variable
|
|
if(throttle_left_motor_memory < 0){ //If the throttle_left_motor_memory is negative
|
|
digitalWrite(Dir_m_left,BWD); //Set output 3 low to reverse the direction of the stepper controller
|
|
throttle_left_motor_memory *= -1; //Invert the throttle_left_motor_memory variable
|
|
}
|
|
else digitalWrite(Dir_m_left,FWD); //Set output 3 high for a forward direction of the stepper motor
|
|
}
|
|
else if(throttle_counter_left_motor == 1)digitalWrite(Step_m_left,HIGH); //Set output 2 high to create a pulse for the stepper controller
|
|
else if(throttle_counter_left_motor == 2)digitalWrite(Step_m_left,LOW); //Set output 2 low because the pulse only has to last for 20us
|
|
|
|
//right motor pulse calculations
|
|
throttle_counter_right_motor ++; //Increase the throttle_counter_right_motor variable by 1 every time the routine is executed
|
|
if(throttle_counter_right_motor > throttle_right_motor_memory){ //If the number of loops is larger then the throttle_right_motor_memory variable
|
|
throttle_counter_right_motor = 0; //Reset the throttle_counter_right_motor variable
|
|
throttle_right_motor_memory = throttle_right_motor; //Load the next throttle_right_motor variable
|
|
if(throttle_right_motor_memory < 0){ //If the throttle_right_motor_memory is negative
|
|
digitalWrite(Dir_m_right,BWD); //Set output 5 low to reverse the direction of the stepper controller
|
|
throttle_right_motor_memory *= -1; //Invert the throttle_right_motor_memory variable
|
|
}
|
|
else digitalWrite(Dir_m_right,FWD);; //Set output 5 high for a forward direction of the stepper motor
|
|
}
|
|
else if(throttle_counter_right_motor == 1)digitalWrite(Step_m_right,HIGH); //Set output 4 high to create a pulse for the stepper controller
|
|
else if(throttle_counter_right_motor == 2)digitalWrite(Step_m_right,LOW);
|
|
|
|
|
|
} // End of timerCallback
|
|
|
|
|
|
|
|
void user_init(void) {
|
|
|
|
os_timer_setfn(&myTimer, timerCallback, NULL);
|
|
os_timer_arm(&myTimer, 1, true);
|
|
} // End of user_init
|
|
|
|
const char* ssid = "mdchaparror";
|
|
const char* password = "un260874";
|
|
int contconexion = 0;
|
|
|
|
|
|
ESP8266WebServer server = ESP8266WebServer(80);
|
|
|
|
void setup() {
|
|
pinMode(Dir_m_left,OUTPUT);
|
|
pinMode(Step_m_left,OUTPUT);
|
|
pinMode(Dir_m_right,OUTPUT);
|
|
pinMode(Step_m_right,OUTPUT);
|
|
//digitalWrite(Dir_m_left,HIGH);
|
|
|
|
|
|
Serial.begin(115200);
|
|
SPIFFS.begin();
|
|
|
|
|
|
Serial.println("");
|
|
Serial.println("--------------------------");
|
|
Serial.println("ESP8266 Motor Test");
|
|
Serial.println("--------------------------");
|
|
|
|
user_init();
|
|
|
|
|
|
|
|
WiFi.mode(WIFI_STA); //para que no inicie el SoftAP en el modo normal
|
|
WiFi.begin(ssid, password);
|
|
while (WiFi.status() != WL_CONNECTED and contconexion <50) { //Cuenta hasta 50 si no se puede conectar lo cancela
|
|
++contconexion;
|
|
delay(500);
|
|
Serial.print(".");
|
|
}
|
|
if (contconexion <50) {
|
|
|
|
Serial.println("");
|
|
Serial.println("WiFi conectado");
|
|
Serial.println(WiFi.localIP());
|
|
}
|
|
else {
|
|
Serial.println("");
|
|
Serial.println("Error de conexion");
|
|
}
|
|
|
|
|
|
if(MDNS.begin("motores")) {
|
|
Serial.println("MDNS responder started");
|
|
}
|
|
|
|
// handle index
|
|
server.on("/", []() {
|
|
File index = SPIFFS.open("/index.html", "r");
|
|
server.streamFile(index, "text/html");
|
|
index.close();
|
|
});
|
|
|
|
server.on("/stick", []() { // Recibe los datos (dx y dy)
|
|
String dx=server.arg("dx");
|
|
String dy=server.arg("dy");
|
|
server.send(200);
|
|
int x = dx.toInt(); // Convierte los datos de tipo String a Int
|
|
int y = dy.toInt();
|
|
|
|
|
|
valor = map(abs(y),0,255,20,3);
|
|
if (y==0)valor=0;
|
|
if(y<0) valor*=-1;
|
|
|
|
if(x>100){
|
|
descI =3;
|
|
descR =-3;
|
|
}
|
|
if(x<-100) {
|
|
descI =-3;
|
|
descR =3;
|
|
|
|
}
|
|
if(x<=100 && x>=-100) {
|
|
descI =0;
|
|
descR =0;
|
|
|
|
}
|
|
|
|
|
|
throttle_left_motor = valor+descI;
|
|
throttle_right_motor = valor+descR;
|
|
|
|
Serial.println(valor);
|
|
|
|
// Serial.print(x); Serial.print(" "); Serial.println(y);
|
|
});
|
|
|
|
server.begin();
|
|
|
|
// Add service to MDNS
|
|
MDNS.addService("http", "tcp", 80);
|
|
MDNS.addService("ws", "tcp", 81);
|
|
|
|
}
|
|
|
|
void loop() {
|
|
|
|
|
|
server.handleClient();
|
|
// throttle_left_motor = 10;
|
|
//throttle_right_motor = 10;
|
|
while(loop_timer > micros());
|
|
loop_timer += 4000;
|
|
|
|
}
|