Skip to content

Instantly share code, notes, and snippets.

@labajo
Created December 20, 2017 09:02
Show Gist options
  • Save labajo/186fc9bbe8ee4a8aff61bdce9d3f52ec to your computer and use it in GitHub Desktop.
Save labajo/186fc9bbe8ee4a8aff61bdce9d3f52ec to your computer and use it in GitHub Desktop.
Missile Launcher
#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