Created
December 20, 2017 09:02
-
-
Save labajo/186fc9bbe8ee4a8aff61bdce9d3f52ec to your computer and use it in GitHub Desktop.
Missile Launcher
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <ESP8266WiFi.h> | |
#include <WiFiClient.h> | |
#include <ESP8266WebServer.h> | |
#include <Servo.h> | |
/* Set these to your desired credentials. */ | |
const char *ssid = "MissileLauncher"; | |
const char *password = "12345678"; | |
ESP8266WebServer server(80); | |
Servo rotServo; | |
Servo verServo; | |
int lastAngle = 170; | |
String inputString = ""; | |
void rotMove(int rotTime, int rotSpeed) | |
{ | |
rotServo.write(90 + rotSpeed); | |
delay(rotTime); | |
rotServo.write(90); | |
} | |
void verMove(int angle) | |
{ | |
verServo.write(angle); | |
} | |
void dcMove(int rotTime, int speed) { | |
analogWrite(D6, speed); | |
delay(rotTime); | |
analogWrite(D6, 0); | |
} | |
void handleRot() { | |
int time = 0; | |
int speed = 0; | |
for ( uint8_t i = 0; i < server.args(); i++ ) { | |
if (server.argName ( i ) == "time") { | |
time = server.arg ( i ).toInt(); | |
} else if (server.argName ( i ) == "speed") { | |
speed = server.arg ( i ).toInt(); | |
} | |
} | |
if (time == 0 || speed == 0) { | |
Serial.println("<h1>Not moved rotatory motor</h1>"); | |
server.send(200, "text/html", "<h1>Not moved rotatory motor</h1>"); | |
} else { | |
String message = "<h1>Moved rotatory motor</h1>"; | |
message += "<h1>Time: "; | |
message += time; | |
message += "</h1>"; | |
message += "<h1>Speed: "; | |
message += speed; | |
message += "</h1>"; | |
Serial.println(message); | |
server.send(200, "text/html", message); | |
rotMove(time, speed); | |
} | |
} | |
void handleVer() { | |
int angle = lastAngle; | |
for ( uint8_t i = 0; i < server.args(); i++ ) { | |
if (server.argName ( i ) == "angle") { | |
angle = server.arg ( i ).toInt(); | |
} | |
} | |
if (angle == lastAngle) { | |
Serial.println("<h1>Not moved vertical motor</h1>"); | |
server.send(200, "text/html", "<h1>Not moved vertical motor</h1>"); | |
} else { | |
if (angle > 170) { | |
angle = 170; | |
} | |
if (angle < 20) { | |
angle = 20; | |
} | |
String message = "<h1>Moved vertical motor</h1>"; | |
message += "<h1>Angle: "; | |
message += angle; | |
message += "</h1>"; | |
Serial.println(message); | |
server.send(200, "text/html", message); | |
verMove(angle); | |
lastAngle = angle; | |
} | |
} | |
void handleDC() { | |
int time = 0; | |
int speed = 255; | |
for ( uint8_t i = 0; i < server.args(); i++ ) { | |
if (server.argName ( i ) == "time") { | |
time = server.arg ( i ).toInt(); | |
} | |
if (server.argName ( i ) == "speed") { | |
speed = server.arg ( i ).toInt(); | |
} | |
} | |
if (time == 0) { | |
Serial.println("<h1>Not moved DC motor</h1>"); | |
server.send(200, "text/html", "<h1>Not moved DC motor</h1>"); | |
} else { | |
String message = "<h1>Moved DC motor</h1>"; | |
message += "<h1>Time: "; | |
message += time; | |
message += "</h1>"; | |
Serial.println(message); | |
server.send(200, "text/html", message); | |
dcMove(time, speed); | |
} | |
} | |
void handleNotFound() { | |
digitalWrite ( LED_BUILTIN, 1 ); | |
String message = "File Not Found\n\n"; | |
message += "URI: "; | |
message += server.uri(); | |
message += "\nMethod: "; | |
message += ( server.method() == HTTP_GET ) ? "GET" : "POST"; | |
message += "\nArguments: "; | |
message += server.args(); | |
message += "\n"; | |
for ( uint8_t i = 0; i < server.args(); i++ ) { | |
message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n"; | |
} | |
server.send ( 404, "text/plain", message ); | |
digitalWrite ( LED_BUILTIN, 0 ); | |
} | |
void createWifiAp() { | |
WiFi.mode(WIFI_OFF); | |
delay(200); | |
delay(1000); | |
Serial.println(); | |
Serial.print("Configuring access point..."); | |
/* You can remove the password parameter if you want the AP to be open. */ | |
WiFi.softAP(ssid, password); | |
delay(500); // Without delay I've seen the IP address blank | |
IPAddress myIP = WiFi.softAPIP(); | |
Serial.print("AP IP address: "); | |
Serial.println(myIP); | |
} | |
void createServer() { | |
server.on("/rot", handleRot); | |
server.on("/ver", handleVer); | |
server.on("/dc", handleDC); | |
server.onNotFound ( handleNotFound ); | |
server.begin(); | |
Serial.println("HTTP server started"); | |
} | |
void setup() { | |
Serial.begin(115200); | |
pinMode(D6, OUTPUT); | |
rotServo.attach(D2); | |
rotServo.write(90); | |
verServo.attach(D3); | |
verServo.write(lastAngle); | |
analogWriteFreq(12000); | |
analogWrite(D6, 0); | |
Serial.println("Servo started"); | |
delay(200); | |
createWifiAp(); | |
createServer(); | |
inputString.reserve(200); | |
} | |
void loop() { | |
server.handleClient(); | |
while (Serial.available()) { | |
char inChar = (char)Serial.read(); | |
inputString += inChar; | |
if (inChar == '\n') { | |
Serial.println("Command=> " + inputString); | |
if (inputString.startsWith("ver:")) { | |
int angle = inputString.substring(4).toInt(); | |
if (angle > 170) { | |
angle = 170; | |
} | |
if (angle < 20) { | |
angle = 20; | |
} | |
if (angle == lastAngle) { | |
Serial.println("Vertical motor not moved."); | |
} else { | |
lastAngle = angle; | |
String message = "Vertical motor moved to: "; | |
message += angle; | |
Serial.println(message); | |
verMove(angle); | |
} | |
} else if (inputString.startsWith("rot:")) { | |
int commaIndex = inputString.indexOf(','); | |
int time = inputString.substring(4, commaIndex).toInt(); | |
int speed = inputString.substring(commaIndex + 1).toInt(); | |
if (time == 0 || speed == 0) { | |
Serial.println("Not moved rotatory motor."); | |
} else { | |
String message = "Moved rotatory motor=> Time: "; | |
message += time; | |
message += ", Speed: "; | |
message += speed; | |
Serial.println(message); | |
rotMove(time, speed); | |
} | |
} else if (inputString.startsWith("con:")) { | |
int commaIndex = inputString.indexOf(','); | |
int time = inputString.substring(4, commaIndex).toInt(); | |
int speed = inputString.substring(commaIndex + 1).toInt(); | |
if (time == 0 || speed == 0) { | |
Serial.println("Not moved DC motor."); | |
} else { | |
String message = "Moved DC motor=> Time: "; | |
message += time; | |
message += ", Speed: "; | |
message += speed; | |
Serial.println(message); | |
dcMove(time, speed); | |
} | |
} else { | |
Serial.println("Unknown command!!"); | |
} | |
inputString = ""; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment