Here's the other half because it wouldn't let me post such a large amount of characters:
void gates(){
Serial.println("Got Mail!");
if (Mode == "automatic"){
Serial.println("Mode = Automatic");
Blynk.notify("Driveway Gates were opened!");
Serial.println("Opening gate...");
led.setColor(BLYNK_BLUE);
offMagnet();
openGate();
waitForGate();
allStop();
led.setColor(BLYNK_GREEN);
Serial.println("Open.");
Serial.println("Waiting...");
delay(gateOpenAmount*1000);
Blynk.notify("Driveway Gates were closed!");
Serial.println("Closing gate...");
led.setColor(BLYNK_BLUE);
closeGate();
waitForGate();
allStop();
onMagnet();
led.setColor(BLYNK_RED);
Serial.println("Closed.");
}
else if(Mode == "button"){
Serial.println("Mode = Button");
if (timer == 0){
Blynk.notify("Driveway Gates were opened!");
Serial.println("Openning gate...");
led.setColor(BLYNK_BLUE);
offMagnet();
openGate();
waitForGate();
allStop();
led.setColor(BLYNK_GREEN);
Serial.println("Open.");
timer = 1;
}
else if(timer == 1){
Blynk.notify("Driveway Gates were closed!");
Serial.println("Closing gate...");
led.setColor(BLYNK_BLUE);
closeGate();
waitForGate();
allStop();
onMagnet();
led.setColor(BLYNK_RED);
Serial.println("Closed.");
timer = 0;
}
}
}
void openGate(){
if (gateDirection == 1){
if (gateNumber == 1){
digitalWrite(a1, HIGH);
digitalWrite(a2, LOW);
}
else if (gateNumber == 2){
digitalWrite(a1, HIGH);
digitalWrite(a2, LOW);
digitalWrite(b1, HIGH);
digitalWrite(b2, LOW);
}
}
else if (gateDirection == 2){
if (gateNumber == 1){
digitalWrite(a1, LOW);
digitalWrite(a2, HIGH);
}
else if (gateNumber == 2){
digitalWrite(a1, LOW);
digitalWrite(a2, HIGH);
digitalWrite(b1, LOW);
digitalWrite(b2, HIGH);
}
}
if (hour() >= beginning && hour() <= ending){
for(int i;i<15;i++){
bridge1.virtualWrite(V50, 1);
delay(1000);
bridge1.virtualWrite(V51, 0);
delay(500);
}
}
}
void closeGate(){
//if (gateDirection == 1){
// if (gateNumber == 1){
//digitalWrite(a1, LOW);
//digitalWrite(a2, HIGH);
// }
// else if (gateNumber == 2){
digitalWrite(a1, LOW);
digitalWrite(a2, HIGH);
digitalWrite(b1, LOW);
digitalWrite(b2, HIGH);
/* }
}
else if (gateDirection == 2){
if (gateNumber == 1){
digitalWrite(a1, HIGH);
digitalWrite(a2, LOW);
}
else if (gateNumber == 2){
digitalWrite(a1, HIGH);
digitalWrite(a2, LOW);
digitalWrite(b1, HIGH);
digitalWrite(b2, LOW);
}
}
*/
}
void allStop() {
if (gateNumber == 1){
digitalWrite(a1, LOW);
digitalWrite(a2, LOW);
}
else if (gateNumber == 2){
digitalWrite(a1, LOW);
digitalWrite(a2, LOW);
digitalWrite(b1, LOW);
digitalWrite(b2, LOW);
}
}
void manual() {
digitalWrite(en1, LOW);
digitalWrite(en2, LOW);
}
void manualoff() {
digitalWrite(en1, HIGH);
digitalWrite(en2, HIGH);
}
void waitForGate() {
int tim = 5500;
Begin:
timer1++;
while(timer1 < tim){
Blynk.run();
delay(2);
Serial.println(timer1);
goto Begin;
}
timer1 = 0;
//delay((inchesPerSec*(maxActuatorStroke/percentOfMaxStroke))*1400);
}
void onMagnet(){
digitalWrite(MagnetRelay, HIGH);
}
void offMagnet(){
digitalWrite(MagnetRelay, LOW);
}
float 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)));
Blynk.virtualWrite(V7, Distance);
return(Distance);
}