#include <LedFader.h>
#include <LedFlasher.h>
#include <SoftwareSerial.h>
#define RX 50
#define TX 51
String AP = "MyRouter"; // CHANGE ME
String PASS = "RouterPassword"; // CHANGE ME
String API = "APIKeyForThingSpeak"; // CHANGE ME
String HOST = "api.thingspeak.com";
String PORT = "80";
String field = "field1";int countTrueCommand;
int countTimeCommand;
boolean found = false;
int valSensor = 1;SoftwareSerial esp8266(RX,TX);
void setup() {
Serial.begin(9600);
esp8266.begin(115200);
sendCommand("AT",5,"OK");
sendCommand("AT+CWMODE=1",5,"OK");
sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK");
}void loop() {
valSensor = getSensorData();
String getData = "GET /update?api_key="+ API +"&"+ field +"="+String(valSensor);sendCommand("AT+CIPMUX=1",5,"OK");
sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,15,"OK");
sendCommand("AT+CIPSEND=0," +String(getData.length()+4),4,">");
esp8266.println(getData);delay(1500);countTrueCommand++;
sendCommand("AT+CIPCLOSE=0",5,"OK");
}int getSensorData(){
return random(1000); // Replace with
}void sendCommand(String command, int maxTime, char readReplay[]) {
Serial.print(countTrueCommand);
Serial.print(". at command => ");
Serial.print(command);
Serial.print(" ");
while(countTimeCommand < (maxTime*1))
{
esp8266.println(command);//at+cipsend
if(esp8266.find(readReplay))//ok
{
found = true;
break;
}
countTimeCommand++;
}
if(found == true)
{
Serial.println("OYI");
countTrueCommand++;
countTimeCommand = 0;
}
if(found == false)
{
Serial.println("Fail");
countTrueCommand = 0;
countTimeCommand = 0;
}
found = false;
}
// pin assignments
const byte StrobesPin = 12; // PWM
const byte NavigationPin = 11;
const byte DeflectorbluePin = 10; // PWM
const byte DeflectororangePin = 9; // PWM
const byte TorpedoPin = 8;
const byte FloodsevenPin = 7;
const byte FloodsixPin = 6; // PWM
const byte FloodfivePin = 5; // PWM
const byte FloodfourPin = 4;
const byte FloodthreePin = 3; // PWM
const byte FloodtwoPin = 2;
// Faders pin min max millis on? stop?
LedFader deflectororangeFader (DeflectororangePin, 0, 255, 3000, false, true);
LedFader deflectorblueFader (DeflectorbluePin, 0, 255, 3000, false, true);
// Flashers pin off-time on-time on?
LedFlasher strobes (StrobesPin, 900, 100, false);
LedFlasher navigation (NavigationPin, 2900, 100, false);
// states for the state machine
typedef enum
{
initialState,
wantFloodtwo, // ALWAYS ON
wantFloodthree, // ALWAYS ON
wantFloodfour, // ALWAYS ON
wantFloodfive, // ALWAYS ON
wantFloodsix, // ALWAYS ON
wantFloodseven, // ALWAYS ON
wantNavigation, // ALWAYS ON
wantStrobes, // ALWAYS ON
wantTorpedostartup, // ALWAYS ON
wantDeflectororangestartup, // Startup mode
wantDeflectororangeon, // Impulse mode
wantDeflectorblueoff, // Impulse mode
wantTorpedoon, // Impulse mode
wantTorpedoon2, // Impulse mode
wantDeflectorblueoffreturn, // Impulse mode return
wantDeflectorblueon, // Warp mode
wantDeflectororangeoff, // Warp mode
wantTorpedooff, // Warp mode
} states;
// state machine variables
states state = initialState;
unsigned long lastStateChange = 0;
unsigned long timeInThisState = 1000;
void setup ()
{
pinMode (FloodtwoPin, OUTPUT);
pinMode (FloodthreePin, OUTPUT);
pinMode (FloodfourPin, OUTPUT);
pinMode (FloodfivePin, OUTPUT);
pinMode (FloodsixPin, OUTPUT);
pinMode (FloodsevenPin, OUTPUT);
pinMode (NavigationPin, OUTPUT);
pinMode (StrobesPin, OUTPUT);
pinMode (TorpedoPin, OUTPUT);
// set up faders, flashers
deflectororangeFader.begin ();
deflectorblueFader.begin ();
strobes.begin ();
navigation.begin ();
} // end of setup
void doStateChange ()
{
lastStateChange = millis (); // when we last changed states
timeInThisState = 1000; // default one second between states
switch (state)
{
case initialState:
state = wantFloodtwo;
break;
case wantFloodtwo:
digitalWrite (FloodtwoPin, HIGH);
state = wantFloodthree;
break;
case wantFloodthree:
digitalWrite (FloodthreePin, HIGH);
state = wantFloodfour;
break;
case wantFloodfour:
digitalWrite (FloodfourPin, HIGH);
state = wantFloodfive;
break;
case wantFloodfive:
digitalWrite (FloodfivePin, HIGH);
state = wantFloodsix;
break;
case wantFloodsix:
digitalWrite (FloodsixPin, HIGH);
state = wantFloodseven;
break;
case wantFloodseven:
digitalWrite (FloodsevenPin, HIGH);
state = wantStrobes;
break;
case wantStrobes:
strobes.on();
state = wantNavigation;
break;
case wantNavigation:
navigation.on();
state = wantDeflectororangestartup;
break;
//impulse mode
case wantDeflectororangestartup:
deflectororangeFader.on();
state = wantTorpedoon;
timeInThisState = 6000;
break;
case wantTorpedoon:
digitalWrite (TorpedoPin, HIGH);
state = wantDeflectororangeoff;
timeInThisState = 2000;
break;
case wantDeflectororangeoff:
digitalWrite (TorpedoPin, LOW);
deflectororangeFader.on();
state = wantDeflectorblueon;
timeInThisState = 4000;
break;
// warp mode
case wantDeflectorblueon:
deflectorblueFader.on();
state = wantTorpedoon2;
timeInThisState = 6000;
break;
case wantTorpedoon2:
digitalWrite (TorpedoPin, HIGH);
state = wantDeflectorblueoff;
timeInThisState = 2000;
break;
case wantDeflectorblueoff:
digitalWrite (TorpedoPin, LOW);
deflectorblueFader.on();
timeInThisState = 4000;
state = wantDeflectororangestartup;
break;
} // end of switch on state
} // end of doStateChange
void loop ()
{
if (millis () - lastStateChange >= timeInThisState)
doStateChange ();
// update faders, flashers
deflectororangeFader.update ();
deflectorblueFader.update ();
navigation.update ();
strobes.update ();
// other stuff here like testing switches
} // end of loop