Yeah, I probably should have added them to begin with. Sorry.
Gate.h:
/*
Gate.h - Library for controlling gates.
Created by K Gray, December 26, 2021.
Released into the public domain.
*/
#ifndef Gate_h
#define Gate_h
#include "Arduino.h"
#include <math.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <ESP8266WiFi.h>
class Gate
{
public:
Gate(int pin1, int pin2, int pin3, int pin4);
void Magnet(int magnetPin);
void LEDStrip(int r, int g, int b);
void OTAStart(const char OTAPassword[]);
void WiFiStart(char WiFiNetwork[], char WiFiPassword[]);
void start(char WiFiNetwork[], char WiFiPassword[], const char OTAPassword[]);
void gate(int Direction);
void stop();
void magnet(int magnetValue);
void ledStrip(int red, int green, int blue);
void calcDist(float CurrentLatitude, float CurrentLongitude, float SavedLatitude, float SavedLongitude);
void waitForGate(int travelDist, int travelSpeed, int percentOfTravel);
void delayForGate(int DFGTime);
void WFGFunction();
int direction;
float distance;
boolean emergencyStop = false;
private:
int _pin1;
int _pin2;
int _pin3;
int _pin4;
int _magPin;
int _r;
int _g;
int _b;
char _OTAPassword;
String _WiFiSSID;
String _WiFiPASS;
int _Direction;
int _magnetValue;
int _red;
int _green;
int _blue;
float _CurrentLatitude;
float _CurrentLongitude;
float _SavedLatitude;
float _SavedLongitude;
int _travelDist;
int _travelSpeed;
int _percentOfTravel;
int _DFGTime;
int _wfg;
int _totalDelay;
};
#endif
Gate.cpp:
/*
Gate.cpp - Library for controlling gates.
Created by K Gray, December 26, 2021.
Released into the public domain.
*/
#include "Arduino.h"
#include "Gate.h"
Gate::Gate(int pin1, int pin2, int pin3, int pin4){
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
_pin1 = pin1;
_pin2 = pin2;
_pin3 = pin3;
_pin4 = pin4;
}
void Gate::Magnet(int magnetPin){
pinMode(magnetPin, OUTPUT);
_magPin = magnetPin;
}
void Gate::LEDStrip(int r, int g, int b){
pinMode(r, OUTPUT);
pinMode(g, OUTPUT);
pinMode(b, OUTPUT);
_r = r;
_g = g;
_b = b;
}
void Gate::OTAStart(const char OTAPassword[]){
// Port defaults to 8266
ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
ArduinoOTA.setHostname("GateESP");
// No authentication by default
ArduinoOTA.setPassword(OTAPassword);//(const char
ArduinoOTA.onStart([]() {
Serial.println("Start");
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});
ArduinoOTA.begin();
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void Gate::WiFiStart(char WiFiNetwork[], char WiFiPassword[]){
WiFi.mode(WIFI_STA);
WiFi.begin(WiFiNetwork, WiFiPassword);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
}
void Gate::start(char WiFiNetwork[], char WiFiPassword[], const char OTAPassword[]){
WiFi.mode(WIFI_STA);
WiFi.begin(WiFiNetwork, WiFiPassword);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
// Port defaults to 8266
ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
ArduinoOTA.setHostname("GateESP");
// No authentication by default
ArduinoOTA.setPassword(OTAPassword);//(const char
ArduinoOTA.onStart([]() {
Serial.println("Start");
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});
ArduinoOTA.begin();
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void Gate::gate(int Direction){
if (direction == 1){
if (Direction == 1){
digitalWrite(_pin1, HIGH);
digitalWrite(_pin2, LOW);
digitalWrite(_pin3, HIGH);
digitalWrite(_pin4, LOW);
}
if (Direction == 2){
digitalWrite(_pin1, LOW);
digitalWrite(_pin2, HIGH);
digitalWrite(_pin3, LOW);
digitalWrite(_pin4, HIGH);
}
}
else if (direction == 2){
if (Direction == 1){
digitalWrite(_pin1, LOW);
digitalWrite(_pin2, HIGH);
digitalWrite(_pin3, LOW);
digitalWrite(_pin4, HIGH);
}
if (Direction == 2){
digitalWrite(_pin1, HIGH);
digitalWrite(_pin2, LOW);
digitalWrite(_pin3, HIGH);
digitalWrite(_pin4, LOW);
}
}
}
void Gate::stop(){
digitalWrite(_pin1, LOW);
digitalWrite(_pin2, LOW);
digitalWrite(_pin3, LOW);
digitalWrite(_pin4, LOW);
}
void Gate::magnet(int magnetValue){
digitalWrite(_magPin, magnetValue);
}
void Gate::ledStrip(int red, int green, int blue){
analogWrite(red, _r);
analogWrite(green, _g);
analogWrite(blue, _b);
}
void Gate::calcDist(float CurrentLatitude, float CurrentLongitude, float SavedLatitude, float SavedLongitude){
// HaverSine version
const float Deg2Rad = 0.01745329252; // (PI/180) 0.017453293, 0.0174532925
//const double EarthRadius = 6372.795; //6372.7976 In Kilo meters, will scale to other values
const float EarthRadius = 20908120.1; // In feet 20908128.6
float DeltaLatitude, DeltaLongitude, a, Distance;
// degrees to radians
CurrentLatitude = (CurrentLatitude + 180) * Deg2Rad; // Remove negative offset (0-360), convert to RADS
CurrentLongitude = (CurrentLongitude + 180) * Deg2Rad;
SavedLatitude = (SavedLatitude + 180) * Deg2Rad;
SavedLongitude = (SavedLongitude + 180) * Deg2Rad;
DeltaLatitude = SavedLatitude - CurrentLatitude;
DeltaLongitude = SavedLongitude - CurrentLongitude;
a =(sin(DeltaLatitude/2) * sin(DeltaLatitude/2)) + cos(CurrentLatitude) * cos(SavedLatitude) * (sin(DeltaLongitude/2) * sin(DeltaLongitude/2));
Distance = EarthRadius * (2 * atan2(sqrt(a),sqrt(1-a)));
distance = Distance;
}
void waitForGate(int travelDist, int travelSpeed, int percentOfTravel){
int _totalDelay = ((((travelDist*percentOfTravel)/travelSpeed)*1000)-500)/2;
int _wfg;
Begin:
_wfg++;
while(_wfg <= _totalDelay){
void WFGFunction();
goto Begin;
}
_wfg = 0;
}
void Gate::delayForGate(int DFGTime){
delay(DFGTime);
}
void WFGFunction(){}
Example1_Gate.ino:
#include <Gate.h>
Gate gate1(D3,D4,D7,D8);
#define direction = 1;
void setup(){
gate1.WiFiStart("MYSSID", "MYPASS");
gate1.Magnet(D5);
gate1.LEDStrip(D1, D2, D6);
}
void loop(){
gate1.gate(1);
gate1.waitForGate(12,0.4,0.8);
gate1.stop();
gate1.delayForGate(5000);
gate1.gate(2);
gate1.waitForGate(12,0.4,0.8);
gate1.stop();
gate1.delayForGate(5000);
}
Verbose output on compiling the example:
Arduino: 1.8.19 (Mac OS X), Board: "LOLIN(WEMOS) D1 R2 & mini, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 921600"
/Users/user/Desktop/Arduino/libraries/Gate/Gate.cpp: In function 'void WFGFunction()':
/Users/user/Desktop/Arduino/libraries/Gate/Gate.cpp:205:7: error: 'emergencyStop' was not declared in this scope
205 | if (emergencyStop == true){
| ^~~~~~~~~~~~~
/Users/user/Desktop/Arduino/libraries/Gate/Gate.cpp:206:18: error: '_pin1' was not declared in this scope
206 | digitalWrite(_pin1, LOW);
| ^~~~~
/Users/user/Desktop/Arduino/libraries/Gate/Gate.cpp:207:18: error: '_pin2' was not declared in this scope
207 | digitalWrite(_pin2, LOW);
| ^~~~~
/Users/user/Desktop/Arduino/libraries/Gate/Gate.cpp:208:18: error: '_pin3' was not declared in this scope
208 | digitalWrite(_pin3, LOW);
| ^~~~~
/Users/user/Desktop/Arduino/libraries/Gate/Gate.cpp:209:18: error: '_pin4' was not declared in this scope
209 | digitalWrite(_pin4, LOW);
| ^~~~~
Multiple libraries were found for "WiFiUdp.h"
Used: /Users/user/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/libraries/ESP8266WiFi
Not used: /Applications/Electronics/Arduino.app/Contents/Java/libraries/WiFi
Not used: /Users/user/Desktop/Arduino/libraries/WiFi101
exit status 1
Error compiling for board LOLIN(WEMOS) D1 R2 & mini.
FYI, I do realize I am biting off more than I can chew.