Several years ago I wrote a program to output and store frequencies. It has some functions like outputting a specific frequency range you decide on (100Hz +-10%, it then decrements in this range with 0.01Hz) with added duty-cycle settings. Up to about 5-8kHz depending on the duty-cycle, maybe a little bit faster but it might start to provide errors. You can store a frequency you like to specific pins, check the in-program instructions during boot through the serial monitor.
In terms of programming things could be improved but it functions if you have no time to code.
It is bootable meaning it can handle a power-off without loss of the settings.
Measurements for magnetic levels are added but you can change that out for any other sensors you like with a bit of effort.
I used a WSH-138 Hall-effect sensor outputting its levels to the serial monitor and LEDs.
Currently it functions only on a ESP32 due to the EEPROM functionality but you could take this out.
Here you go:
// Upload the code, set the program to the desired mode, play with the frequency outputs, set duty cycles, adjust mode settings or calculate the basic antenna length.
// The program stores the frequencies, settings and program-mode and it automatically starts running on the next boot.
// Perform Hall-effect magnetic measurements and show the levels (a WSH-138 sensor was used) with an RGB LED on the fly.
// Copyright © Wobbly, 2022.
#include "EEPROM.h" // library for the memory
#define EEPROM_SIZE 4096
#include <esp_task_wdt.h> // library for the WatchDogTimer
#define WDT_TIMEOUT 300 // this sets the WDT to 60 seconds, if it times-out inside the program a re-boot should occur, added for operational security
int WDTtimer = 0; // checks the WDT
// The variables and constant variables.
const int Pin999 = 12; // pin for the lower frequencies.
const int Pin9999 = 13; // pin for the higher frequencies.
const int Pin99999 = 14; // pin for the highest frequencies.
const int Pin999999 = 16; // pin for the top-level frequencies.
const int HallPin = 25; // Hall-effect sensor analog read-out
const int RLED = 18; // 32, (18 on the WEMOS, just plug the a LED module in, indicates lower levels, everything below -10mV from the 1710 millivolt reference)
const int GLED = 19; // 33, (19 on the WEMOS, indicates higher levels everything above +10mV from the 1710 millivolt reference)
int LEDBOOT = 0;
int BootMillis = 0;
float HallVoltage = 0; // stores the voltage from the external Hall-effect sensor
const float Reference = 1710.0; // mV
int StatePinBind12 = LOW; // Pin state in bind mode, reading the Pin state directly is not possible or recommended?
int StatePinBind13 = LOW;
int StatePinBind14 = LOW;
int StatePinBind16 = LOW;
int StateSearch = LOW;
boolean manualSearch = false; // sets the search mode flag
char BootMemory = 'm'; // memory loading input
char ModeFunction = 'm'; // program input
char ProgramMode = 'm'; // program mode
char hopTimer = 'p'; // program input
boolean specialHop = false;
boolean Stop = false; // stops the PWM for a moment
boolean bootRun = false; // marker for the bootsequence
boolean Fixed = false; // marker for the frequency program
boolean Bind = false; // marker for the bind mode
boolean Freq01 = false; // markers
boolean Freq02 = false;
boolean Freq03 = false;
boolean Freq04 = false;
boolean Freq05 = false;
boolean Freq06 = false;
boolean Freq07 = false;
boolean Freq08 = false;
boolean Freq09 = false;
boolean Freq10 = false;
boolean FrequencyShift = false; // marker for shifting the frequencies in fixed frequency mode
boolean Freq1B12 = false; // markers to set this frequency position
boolean Freq2B12 = false;
boolean Freq3B12 = false;
boolean Freq4B12 = false;
boolean Freq5B12 = false;
boolean Freq6B12 = false;
boolean FrequencyShiftB12 = true;
boolean FrequencyShiftB13 = true;
boolean FrequencyShiftB14 = true;
boolean FrequencyShiftB16 = true;
boolean Freq1B13 = false; // more markers
boolean Freq2B13 = false;
boolean Freq3B13 = false;
boolean Freq4B13 = false;
boolean Freq5B13 = false;
boolean Freq6B13 = false;
boolean Freq1B14 = false;
boolean Freq2B14 = false;
boolean Freq3B14 = false;
boolean Freq4B14 = false;
boolean Freq5B14 = false;
boolean Freq6B14 = false;
boolean Freq1B16 = false;
boolean Freq2B16 = false;
boolean Freq3B16 = false;
boolean Freq4B16 = false;
boolean Freq5B16 = false;
boolean Freq6B16 = false;
float DC = 50.0; // Duty Cycle, 50 = 50%
float Frequency01 = 100; // fixed frequencies, just examples, check EEPROM memory below
float Frequency02 = 100;
float Frequency03 = 100;
float Frequency04 = 100;
float Frequency05 = 100;
float Frequency06 = 100;
float Frequency07 = 100;
float Frequency08 = 100;
float Frequency09 = 100;
float Frequency10 = 100;
float FrequencyB12 = 0; // used to calculate Serial.print() output in Bind mode
float FrequencyB13 = 0;
float FrequencyB14 = 0;
float FrequencyB16 = 0;
float Frequency1B12 = 46; // first fixed frequency in bind mode for Pin 12
float Frequency2B12 = 47;
float Frequency3B12 = 48;
float Frequency4B12 = 49;
float Frequency5B12 = 50;
float Frequency6B12 = 51;
float Frequency1B13 = 1339; // first fixed frequency in bind mode for Pin 13
float Frequency2B13 = 1349;
float Frequency3B13 = 1359;
float Frequency4B13 = 1369;
float Frequency5B13 = 1379;
float Frequency6B13 = 1398;
float Frequency1B14 = 0; // first fixed frequency in bind mode for Pin 14
float Frequency2B14 = 0;
float Frequency3B14 = 0;
float Frequency4B14 = 0;
float Frequency5B14 = 0;
float Frequency6B14 = 0;
float Frequency1B16 = 333.00; // first fixed frequency in bind mode for Pin 16, mineral-pin
float Frequency2B16 = 300.00;
float Frequency3B16 = 366.00;
float Frequency4B16 = 333.00;
float Frequency5B16 = 300.00;
float Frequency6B16 = 366.00;
float intervalSearchB12 = 5000; // interval for the frequency in bind mode
float intervalSearchB13 = 300;
float intervalSearchB14 = 300;
float intervalSearchB16 = 300;
float LowTimerB12 = 5000; // Pin low timer for the frequency duty cycle in bind mode
float LowTimerB13 = 300;
float LowTimerB14 = 50;
float LowTimerB16 = 5;
float HighTimerB12 = 5000; // Pin low timer for the frequency duty cycle in bind mode
float HighTimerB13 = 300;
float HighTimerB14 = 50;
float HighTimerB16 = 5;
float LowTimerSearch = 5000; // Pin low timer for the frequency duty cycle in other modes
float HighTimerSearch = 300;
float Frequency = 100; // main frequency
float UpperRange = 1.05; // define percentage for up and down search, format: 1.05 for 105%
float LowerRange = 0.95; // define percentage for up and down search, format: 0.95 for 95%
float UpperFrequency = 105; // automatic search upper limit
float LowerFrequency = 95; // automatic search lower limit
float intervalSearch = 5000; // interval for the frequency
float intervalSearchUpper = 4750; // 5% upper-range -> lower Frequency
float intervalSearchLower = 5250; // 5% lower-range -> higher Frequencyv
float Wavelength = 0; // used to calculate and print the Wavelength
float antenna = 0; // used to calculate the antenna length in cm
float intervalSearchLength = 50; // search duration per hop in milliseconds
unsigned long previousMicrosB12 = 0;
unsigned long previousMicrosB13 = 0;
unsigned long previousMicrosB14 = 0;
unsigned long previousMicrosB16 = 0;
unsigned long previousMicrosSearch = 0;
unsigned long previousMillisSearchLength = 0;
void setup() {
pinMode(Pin999, OUTPUT);
pinMode(Pin9999, OUTPUT);
pinMode(Pin99999, OUTPUT);
pinMode(Pin999999, OUTPUT);
pinMode(HallPin, INPUT);
pinMode(RLED, OUTPUT);
pinMode(GLED, OUTPUT);
StateSearch = LOW;
StatePinBind12 = LOW;
StatePinBind13= LOW;
StatePinBind14 = LOW;
StatePinBind16 = LOW;
specialHop = false;
DC = 50;
analogReadResolution(12);
Serial.begin(9600); //
// just testing the LED and mark the boot
LEDBOOT = 0;
do {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
delay(1000);
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
delay(1000);
LEDBOOT += 125;
} while (LEDBOOT <= 250);
LEDBOOT = 0;
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
digitalWrite(HallPin, LOW);
digitalWrite(Pin999, LOW);
digitalWrite(Pin9999, LOW);
digitalWrite(Pin99999, LOW);
digitalWrite(Pin999999, LOW);
Serial.println();
Serial.println();
Serial.println("Testing program memory..."); // starting EEPROM functions
if (!EEPROM.begin(EEPROM_SIZE)) {
Serial.println("Could not initiate the memory, too bad");
Serial.println("Restarting...");
Serial.println();
// delay(1000);
ESP.restart();
}
BootMillis = millis();
escapeSetupBegin:
Serial.println();
Serial.println("Would you like to load the program memory with example settings: bind mode, specific frequencies and timings? You can also input them yourself inside the program or remember your old settings? Press 'w' for pre-load or 'y' to input them yourself: ");
Serial.println();
while (Serial.available() == 0) {if (millis() - BootMillis >= 10000) {BootMillis = 0; goto escapeSetup;}}
if (Serial.available() > 0) {
BootMemory = Serial.read();
BootMillis = 0;
if (BootMemory == 'y') {
BootMemory = 0;
goto escapeSetup;
}
if (BootMemory == 'w') {
BootMemory = 0;
Serial.println("Are you sure? The example boot loader will remove your old settings... Press 'k' to start loading the settings, anything else will continue the boot... ");
Serial.println();
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
BootMemory = Serial.read();
if (BootMemory == 'k') {
BootMemory = 0;
goto WobBoot;
} else {goto escapeSetup;}
} WobBoot:
Frequency = 1379.00;
LowerFrequency = 1310.00;
UpperFrequency = 1448.00;
DC = 85.00;
intervalSearchLength = 1000;
intervalSearchLower = 0.95;
intervalSearchUpper = 1.05;
ProgramMode = 'b';
specialHop = false;
Frequency1B12 = 50.49;
Frequency2B12 = 49.22;
Frequency3B12 = 48.89;
Frequency4B12 = 50.49;
Frequency5B12 = 49.22;
Frequency6B12 = 48.89;
Frequency1B13 = 1329.73;
Frequency2B13 = 1338.70;
Frequency3B13 = 1592.21; // added later
Frequency4B13 = 1338.70;
Frequency5B13 = 1329.73;
Frequency6B13 = 1592.21;
Frequency1B14 = 0;
Frequency2B14 = 0;
Frequency3B14 = 0;
Frequency4B14 = 0;
Frequency5B14 = 0;
Frequency6B14 = 0;
Frequency1B16 = 333.00;
Frequency2B16 = 300.00;
Frequency3B16 = 366.00;
Frequency4B16 = 333.00;
Frequency5B16 = 300.00;
Frequency6B16 = 366.00;
// writing some of the variables
EEPROM.writeFloat(1, Frequency);
EEPROM.commit();
EEPROM.writeFloat(56, LowerFrequency);
EEPROM.commit();
EEPROM.writeFloat(61, UpperFrequency);
EEPROM.commit();
EEPROM.writeFloat(71, intervalSearchLength );
EEPROM.commit();
EEPROM.writeFloat(76, intervalSearchLower);
EEPROM.commit();
EEPROM.writeFloat(81, intervalSearchUpper);
EEPROM.commit();
EEPROM.writeChar(86, ProgramMode);
EEPROM.commit();
EEPROM.writeBool(91, specialHop);
EEPROM.commit();
EEPROM.writeFloat(96, Frequency1B12);
EEPROM.commit();
EEPROM.writeFloat(101, Frequency2B12);
EEPROM.commit();
EEPROM.writeFloat(106, Frequency3B12);
EEPROM.commit();
EEPROM.writeFloat(111, Frequency4B12);
EEPROM.commit();
EEPROM.writeFloat(116, Frequency5B12);
EEPROM.commit();
EEPROM.writeFloat(121, Frequency6B12);
EEPROM.commit();
EEPROM.writeFloat(146, Frequency1B13);
EEPROM.commit();
EEPROM.writeFloat(151, Frequency2B13);
EEPROM.commit();
EEPROM.writeFloat(156, Frequency3B13);
EEPROM.commit();
EEPROM.writeFloat(161, Frequency4B13);
EEPROM.commit();
EEPROM.writeFloat(166, Frequency5B13);
EEPROM.commit();
EEPROM.writeFloat(171, Frequency6B13);
EEPROM.commit();
EEPROM.writeFloat(196, Frequency1B14);
EEPROM.commit();
EEPROM.writeFloat(201, Frequency2B14);
EEPROM.commit();
EEPROM.writeFloat(206, Frequency3B14);
EEPROM.commit();
EEPROM.writeFloat(211, Frequency4B14);
EEPROM.commit();
EEPROM.writeFloat(216, Frequency5B14);
EEPROM.commit();
EEPROM.writeFloat(221, Frequency6B14);
EEPROM.commit();
EEPROM.writeFloat(126, Frequency1B16);
EEPROM.commit();
EEPROM.writeFloat(131, Frequency2B16);
EEPROM.commit();
EEPROM.writeFloat(136, Frequency3B16);
EEPROM.commit();
EEPROM.writeFloat(141, Frequency4B16);
EEPROM.commit();
EEPROM.writeFloat(176, Frequency5B16);
EEPROM.commit();
EEPROM.writeFloat(181, Frequency6B16);
EEPROM.commit();
EEPROM.writeFloat(246, DC);
EEPROM.commit();
}
} else {
Serial.println("Please input a 'w' or 'y', not any other character and press Enter: ");
Serial.println();
goto escapeSetupBegin;
} escapeSetup:
Serial.println();
Serial.println();
Serial.println("Welcome(!) to Wobbly`s Frequency Program...");
Serial.println();
Serial.println();
Serial.println("Introduction and comments:");
Serial.println();
Serial.println("1. Example frequencies, choose 'w' on load and then 'k'");
Serial.println("2. One can calculate the antenna-length for specific frequencies using the basic in-program calculator");
Serial.println("3. Frequencies are fixed per pin except in bind-mode. Pin 12 is set as the output Pin for Frequencies up to 999Hz, Pin 13 for Frequencies between 1000-9999Hz, Pin 14 for Frequencies above 10000Hz and below 100000Hz, Pin 16 for Frequencies above 99999Hz, Pin 25 is used for the Hall-effect sensor, Pin 32 is used for the Red LED, Pin 33 is used for the Green LED, Pin 34 is used for the Blue LED. Pin numbers can be changed for any micro-controller however a (12-bit) ADC should be present for the Hall-effect sensor");
Serial.println("4. A Hall-effect sensor (the sensitive WSH-138, around 9mV per Gauss) read-out was added to measure magnetic effects");
Serial.println("5. Levels of more than +-10 millivolts from a 1710 millivolt reference are indicated by the LED");
Serial.println("6. Program mode and all settings (frequency, duty-cycle, search range, etc.) are all stored in the EEPROM for the next boot. Example frequencies can be loaded on boot. It automatically starts running after a first-time boot with the 'w' configuration. Therefore: upload the code and then load the exmplae Frequencies or input them for yourself using your favorite mode. It should run this mode and settings automatically on the next power-ON. Power it OFF, just plug it in again and it remembers all settings. To be sure check the results with a oscilloscope");
Serial.println();
Serial.println();
Serial.println("And now the Program Instructions:");
Serial.println();
Serial.println("Type: m");
Serial.println("and press Enter to start manual searching");
Serial.println("Type: s");
Serial.println("and press Enter to set the search Frequency in manual mode (also sets the frequency for the automatic mode except in 'f' automatic mode)");
Serial.println("Type: u");
Serial.println("and press Enter for shifting the Frequency 0.01Hz higher in manual mode, multiple 'u's at once is possible, to store this new frequency in the memory press 's' again");
Serial.println("Type: d");
Serial.println("and press Enter for shifting the Frequency 0.01Hz lower in manual mode, multiple 'd's at once is possible, to store this new frequency in the memory press 's' again");
Serial.println("Type: x");
Serial.println("to set the Duty Cycle, 50 is 50%");
Serial.println();
Serial.println("Type: a");
Serial.println("and press Enter to start automatic searching for the Frequency as set in manual mode (set Frequency to lower-Frequency-range to upper-Frequency-range and back to lower-Frequency-range");
Serial.println("press 'm' at any time to Stop the automatic search at the specific Frequency");
Serial.println();
Serial.println("Type: f");
Serial.println("and press Enter to input 10 fixed Frequencies for automatic mode,");
Serial.println("input '0' to '9' in this mode, only after inputting the 10 Frequencies, to drive them for 10 seconds");
Serial.println();
Serial.println("Type: b");
Serial.println("and press Enter to bind 6 Frequencies (for one Frequency just input the same Frequency 6x) to each available Pin which are Pin 12 (up to 999Hz), Pin 13 (up to 1000-9999Hz), Pin 14 (above 10000Hz) and Pin 16 (above 99000Hz)");
Serial.println("input '0' to '9' in this mode, only after inputting the 10 Frequencies, to drive them each for 10 seconds");
Serial.println();
Serial.println("Type: t");
Serial.println("to set the hop-timer (this adjusts the time between shifts in Frequency), minimum timings are recommended to be above 200 milliseconds");
Serial.println();
Serial.println("Type: h");
Serial.println("to perform a Hall-effect sensor and Frequency read-out");
Serial.println();
Serial.println("Type: i");
Serial.println("to receive the Program Instructions when running");
Serial.println();
Serial.println("Type: p");
Serial.println("to print the memory");
Serial.println();
Serial.println("Type: c");
Serial.println("to calculate the Wave- and antenna-length");
Serial.println();
Serial.println();
Serial.println("Good luck!");
Serial.println("the program should not stop working, if it somehow does then the code triggers a WatchDogTimer (WDT) afer several minutes...");
Serial.println("when the operator does not provide input for several minutes then the WDT is also triggered for reliability in operation...");
Serial.println();
Serial.println();
Frequency = EEPROM.readFloat(1); // 1 is the address for Frequency, increments of 5 are used, the float is 4 Bytes in size
Frequency01 = EEPROM.readFloat(6);
Frequency02 = EEPROM.readFloat(11);
Frequency03 = EEPROM.readFloat(16);
Frequency04 = EEPROM.readFloat(21);
Frequency05 = EEPROM.readFloat(26);
Frequency06 = EEPROM.readFloat(31);
Frequency07 = EEPROM.readFloat(36);
Frequency08 = EEPROM.readFloat(41);
Frequency09 = EEPROM.readFloat(46);
Frequency10 = EEPROM.readFloat(51);
LowerFrequency = EEPROM.readFloat(56);
UpperFrequency= EEPROM.readFloat(61);
intervalSearchLength = EEPROM.readFloat(71);
intervalSearchLower = EEPROM.readFloat(76);
intervalSearchUpper = EEPROM.readFloat(81);
ProgramMode = EEPROM.readChar(86);
specialHop = EEPROM.readBool(91);
delay(10);
Frequency1B12 = EEPROM.readFloat(96);
Frequency2B12 = EEPROM.readFloat(101);
Frequency3B12 = EEPROM.readFloat(106);
Frequency4B12 = EEPROM.readFloat(111);
Frequency5B12 = EEPROM.readFloat(116);
Frequency6B12 = EEPROM.readFloat(121);
delay(10);
Frequency1B13 = EEPROM.readFloat(146);
Frequency2B13 = EEPROM.readFloat(151);
Frequency3B13 = EEPROM.readFloat(156);
Frequency4B13 = EEPROM.readFloat(161);
Frequency5B13 = EEPROM.readFloat(166);
Frequency6B13 = EEPROM.readFloat(171);
delay(10);
Frequency1B14 = EEPROM.readFloat(196);
Frequency2B14 = EEPROM.readFloat(201);
Frequency3B14 = EEPROM.readFloat(206);
Frequency4B14 = EEPROM.readFloat(211);
Frequency5B14 = EEPROM.readFloat(216);
Frequency6B14 = EEPROM.readFloat(221);
delay(10);
Frequency1B16 = EEPROM.readFloat(126);
Frequency2B16 = EEPROM.readFloat(131);
Frequency3B16 = EEPROM.readFloat(136);
Frequency4B16 = EEPROM.readFloat(141);
Frequency5B16 = EEPROM.readFloat(176);
Frequency6B16 = EEPROM.readFloat(181);
delay(10);
DC = EEPROM.readFloat(246);
Serial.println("These are the variables stored in the previous run:");
Serial.println();
Serial.print("Main Frequency: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.println();
Serial.print("With a hop-time of: ");
Serial.print(intervalSearchLength);
Serial.println(" milliseconds");
Serial.println();
Serial.print("And a Duty Cycle of: ");
Serial.print(DC);
Serial.println("%");
Serial.println();
Serial.print("Frequency 1 for automatic fixed Frequency mode: ");
Serial.print(Frequency01);
Serial.println("Hz");
Serial.print("Frequency 2 for automatic fixed Frequency mode: ");
Serial.print(Frequency02);
Serial.println("Hz");
Serial.print("Frequency 3 for automatic fixed Frequency mode: ");
Serial.print(Frequency03);
Serial.println("Hz");
Serial.print("Frequency 4 for automatic fixed Frequency mode: ");
Serial.print(Frequency04);
Serial.println("Hz");
Serial.print("Frequency 5 for automatic fixed Frequency mode: ");
Serial.print(Frequency05);
Serial.println("Hz");
Serial.print("Frequency 6 for automatic fixed Frequency mode: ");
Serial.print(Frequency06);
Serial.println("Hz");
Serial.print("Frequency 7 for automatic fixed Frequency mode: ");
Serial.print(Frequency07);
Serial.println("Hz");
Serial.print("Frequency 8 for automatic fixed Frequency mode: ");
Serial.print(Frequency08);
Serial.println("Hz");
Serial.print("Frequency 9 for automatic fixed Frequency mode: ");
Serial.print(Frequency09);
Serial.println("Hz");
Serial.print("Frequency 10 for automatic fixed Frequency mode: ");
Serial.print(Frequency10);
Serial.println("Hz");
Serial.println();
Serial.print("Frequency 1 for Pin 12 in bind Frequency mode: ");
Serial.print(Frequency1B12);
Serial.println("Hz");
Serial.print("Frequency 2 for Pin 12 in bind Frequency mode: ");
Serial.print(Frequency2B12);
Serial.println("Hz");
Serial.print("Frequency 3 for Pin 12 in bind Frequency mode: ");
Serial.print(Frequency3B12);
Serial.println("Hz");
Serial.print("Frequency 4 for Pin 12 in bind Frequency mode: ");
Serial.print(Frequency4B12);
Serial.println("Hz");
Serial.print("Frequency 5 for Pin 12 in bind Frequency mode: ");
Serial.print(Frequency5B12);
Serial.println("Hz");
Serial.print("Frequency 6 for Pin 12 in bind Frequency mode: ");
Serial.print(Frequency6B12);
Serial.println("Hz");
Serial.println();
Serial.print("Frequency 1 for Pin 13 in bind Frequency mode: ");
Serial.print(Frequency1B13);
Serial.println("Hz");
Serial.print("Frequency 2 for Pin 13 in bind Frequency mode: ");
Serial.print(Frequency2B13);
Serial.println("Hz");
Serial.print("Frequency 3 for Pin 13 in bind Frequency mode: ");
Serial.print(Frequency3B13);
Serial.println("Hz");
Serial.print("Frequency 4 for Pin 13 in bind Frequency mode: ");
Serial.print(Frequency4B13);
Serial.println("Hz");
Serial.print("Frequency 5 for Pin 13 in bind Frequency mode: ");
Serial.print(Frequency5B13);
Serial.println("Hz");
Serial.print("Frequency 6 for Pin 13 in bind Frequency mode: ");
Serial.print(Frequency6B13);
Serial.println("Hz");
Serial.println();
Serial.print("Frequency 1 for Pin 14 in bind Frequency mode: ");
Serial.print(Frequency1B14);
Serial.println("Hz");
Serial.print("Frequency 2 for Pin 14 in bind Frequency mode: ");
Serial.print(Frequency2B14);
Serial.println("Hz");
Serial.print("Frequency 3 for Pin 14 in bind Frequency mode: ");
Serial.print(Frequency3B14);
Serial.println("Hz");
Serial.print("Frequency 4 for Pin 14 in bind Frequency mode: ");
Serial.print(Frequency4B14);
Serial.println("Hz");
Serial.print("Frequency 5 for Pin 14 in bind Frequency mode: ");
Serial.print(Frequency5B14);
Serial.println("Hz");
Serial.print("Frequency 6 for Pin 14 in bind Frequency mode: ");
Serial.print(Frequency6B14);
Serial.println("Hz");
Serial.println();
Serial.print("Frequency 1 for Pin 16 in bind Frequency mode: ");
Serial.print(Frequency1B16);
Serial.println("Hz");
Serial.print("Frequency 2 for Pin 16 in bind Frequency mode: ");
Serial.print(Frequency2B16);
Serial.println("Hz");
Serial.print("Frequency 3 for Pin 16 in bind Frequency mode: ");
Serial.print(Frequency3B16);
Serial.println("Hz");
Serial.print("Frequency 4 for Pin 16 in bind Frequency mode: ");
Serial.print(Frequency4B16);
Serial.println("Hz");
Serial.print("Frequency 5 for Pin 16 in bind Frequency mode: ");
Serial.print(Frequency5B16);
Serial.println("Hz");
Serial.print("Frequency 6 for Pin 16 in bind Frequency mode: ");
Serial.print(Frequency6B16);
Serial.println("Hz");
Serial.println();
// delay(10);
if (ProgramMode == 'b') {
Serial.println("Booting in bind Frequency mode...");
intervalSearchB12 = (((1/Frequency1B12)*1000000)/2);
intervalSearchB13 = (((1/Frequency1B13)*1000000)/2);
intervalSearchB14 = (((1/Frequency1B14)*1000000)/2);
intervalSearchB16 = (((1/Frequency1B16)*1000000)/2);
HighTimerB12 = ((intervalSearchB12 * 2) / 100) * DC;
LowTimerB12 = (intervalSearchB12 * 2) - HighTimerB12;
HighTimerB13 = ((intervalSearchB13 * 2) / 100) * DC;
LowTimerB13 = (intervalSearchB13 * 2) - HighTimerB13;
HighTimerB14 = ((intervalSearchB14 * 2) / 100) * DC;
LowTimerB14 = (intervalSearchB14 * 2) - HighTimerB14;
HighTimerB16 = ((intervalSearchB16 * 2) / 100) * DC;
LowTimerB16 = (intervalSearchB16 * 2) - HighTimerB16;
Freq1B12 = true; // marker to set this frequency position
Freq2B12 = false; // marker to set this frequency position
Freq3B12 = false; // marker to set this frequency position
Freq4B12 = false; // marker to set this frequency position
Freq5B12 = false; // marker to set this frequency position
Freq6B12 = false; // marker to set this frequency position
Freq1B13 = true; // marker to set this frequency position
Freq2B13 = false; // marker to set this frequency position
Freq3B13 = false; // marker to set this frequency position
Freq4B13 = false; // marker to set this frequency position
Freq5B13 = false; // marker to set this frequency position
Freq6B13 = false; // marker to set this frequency position
Freq1B14 = true; // marker to set this frequency position
Freq2B14 = false; // marker to set this frequency position
Freq3B14 = false; // marker to set this frequency position
Freq4B14 = false; // marker to set this frequency position
Freq5B14 = false; // marker to set this frequency position
Freq6B14 = false; // marker to set this frequency position
Freq1B16 = true; // marker to set this frequency position
Freq2B16 = false; // marker to set this frequency position
Freq3B16 = false; // marker to set this frequency position
Freq4B16 = false; // marker to set this frequency position
Freq5B16 = false; // marker to set this frequency position
Freq6B16 = false; // marker to set this frequency position
Fixed = false;
manualSearch = false;
Stop = false;
bootRun = false;
Bind = true;
}
if (ProgramMode == 'f') {
Serial.println("Booting in fixed Frequency mode...");
Freq01 = true; // marker to set this frequency position
Freq02 = false; // marker to set this frequency position
Freq03 = false; // marker to set this frequency position
Freq04 = false; // marker to set this frequency position
Freq05 = false; // marker to set this frequency position
Freq06 = false; // marker to set this frequency position
Freq07 = false; // marker to set this frequency position
Freq08 = false; // marker to set this frequency position
Freq09 = false; // marker to set this frequency position
Freq10 = false; // marker to set this frequency position
intervalSearch = (((1/Frequency01)*1000000)/2);
HighTimerSearch = ((intervalSearch * 2) / 100) * DC;
LowTimerSearch = (intervalSearch * 2) - HighTimerSearch;
Fixed = true;
manualSearch = false;
Stop = false;
bootRun = false;
}
if (ProgramMode == 'a') {
Serial.println("Booting in automatic mode...");
Serial.print("Current Frequency in automatic mode: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("Press 's' and Enter to set a new Frequency");
Serial.println();
intervalSearch = (((1/Frequency)*1000000)/2);
HighTimerSearch = ((intervalSearch * 2) / 100) * DC;
LowTimerSearch = (intervalSearch * 2) - HighTimerSearch;
manualSearch = false;
Stop = false;
Fixed = false;
bootRun = false;
specialHop = false;
}
if (ProgramMode == 'm') {
Serial.println("Booting in manual mode...");
intervalSearch = (((1/Frequency)*1000000)/2);
HighTimerSearch = ((intervalSearch * 2) / 100) * DC;
LowTimerSearch = (intervalSearch * 2) - HighTimerSearch;
manualSearch = true;
Stop = false;
Fixed = false;
bootRun = false;
specialHop = false;
Serial.print("Current Frequency in manual mode: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("Press 's' and Enter to set a new Frequency");
Serial.println();
}
if (ProgramMode != 'm' && ProgramMode != 'a' && ProgramMode != 'f' && ProgramMode != 'b') {
bootRun = true;
Stop = true;
Fixed = false;
manualSearch = true;
specialHop = false;
Serial.println("Did not detect the program mode... ");
}
esp_task_wdt_init(WDT_TIMEOUT, true); // set WDT
esp_task_wdt_add(NULL); // add the current thread
WDTtimer = millis();
}
void loop() {
unsigned long currentMicros = micros();
unsigned long currentMillis = millis();
if (bootRun == true && Fixed == false && Stop == true && manualSearch == false && Bind == true) {
escapeBindFrequency1B12:
Serial.println("Please input Frequency no. 1 in Hz for bind mode on Pin 12, therefore below 1000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency1B12 = Serial.parseFloat();
EEPROM.writeFloat(96, Frequency1B12);
EEPROM.commit();
}
if (Frequency1B12 == 0 || Frequency1B12 <= 0 || Frequency1B12 >= 1000) {
Serial.println("Please input a number above 0 and below 1000Hz, not any other character and press Enter: ");
Serial.println();
Frequency1B12 = 0;
goto escapeBindFrequency1B12;
}
Serial.print("The Frequency for slot 1 on Pin 12 is set at: ");
Serial.print(Frequency1B12);
Serial.print("Hz");
Serial.println();
escapeBindFrequency2B12:
Serial.println("Please input Frequency no. 2 in Hz for bind mode on Pin 12, therefore below 1000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency2B12 = Serial.parseFloat();
EEPROM.writeFloat(101, Frequency2B12);
EEPROM.commit();
}
if (Frequency2B12 == 0 || Frequency2B12 <= 0 || Frequency2B12 >= 1000) {
Serial.println("Please input a number above 0 and below 1000Hz, not any other character and press Enter: ");
Serial.println();
Frequency2B12 = 0;
goto escapeBindFrequency2B12;
}
Serial.print("The Frequency for slot 2 on Pin 12 is set at: ");
Serial.print(Frequency2B12);
Serial.print("Hz");
Serial.println();
escapeBindFrequency3B12:
Serial.println("Please input Frequency no. 3 in Hz for bind mode on Pin 12, therefore below 1000Hz ");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency3B12 = Serial.parseFloat();
EEPROM.writeFloat(106, Frequency3B12);
EEPROM.commit();
}
if (Frequency3B12 == 0 || Frequency3B12 <= 0 || Frequency3B12 >= 1000) {
Serial.println("Please input a number above 0 and below 1000Hz, not any other character and press Enter: ");
Serial.println();
Frequency3B12 = 0;
goto escapeBindFrequency3B12;
}
Serial.print("The Frequency for slot 3 on Pin 12 is set at: ");
Serial.print(Frequency3B12);
Serial.print("Hz");
Serial.println();
escapeBindFrequency4B12:
Serial.println("Please input Frequency no. 4 in Hz for bind mode on Pin 12, therefore below 1000Hz ");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency4B12 = Serial.parseFloat();
EEPROM.writeFloat(111, Frequency4B12);
EEPROM.commit();
}
if (Frequency4B12 == 0 || Frequency4B12 <= 0 || Frequency4B12 >= 1000) {
Serial.println("Please input a number above 0 and below 1000Hz, not any other character and press Enter: ");
Serial.println();
Frequency4B12 = 0;
goto escapeBindFrequency4B12;
}
Serial.print("The Frequency for slot 4 on Pin 12 is set at: ");
Serial.print(Frequency4B12);
Serial.print("Hz");
Serial.println();
escapeBindFrequency5B12:
Serial.println("Please input Frequency no. 5 in Hz for bind mode on Pin 12, therefore below 1000Hz ");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency5B12 = Serial.parseFloat();
EEPROM.writeFloat(116, Frequency5B12);
EEPROM.commit();
}
if (Frequency5B12 == 0 || Frequency5B12 <= 0 || Frequency5B12 >= 1000) {
Serial.println("Please input a number above 0 and below 1000Hz, not any other character and press Enter: ");
Serial.println();
Frequency5B12 = 0;
goto escapeBindFrequency5B12;
}
Serial.print("The Frequency for slot 5 on Pin 12 is set at: ");
Serial.print(Frequency5B12);
Serial.print("Hz");
Serial.println();
escapeBindFrequency6B12:
Serial.println("Please input Frequency no. 6 in Hz for bind mode on Pin 12, therefore below 1000Hz ");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency6B12 = Serial.parseFloat();
EEPROM.writeFloat(121, Frequency6B12);
EEPROM.commit();
}
if (Frequency6B12 == 0 || Frequency6B12 <= 0 || Frequency6B12 >= 1000) {
Serial.println("Please input a number above 0 and below 1000Hz, not any other character and press Enter: ");
Serial.println();
Frequency6B12 = 0;
goto escapeBindFrequency6B12;
}
Serial.print("The Frequency for slot 6 on Pin 12 is set at: ");
Serial.print(Frequency6B12);
Serial.print("Hz");
Serial.println();
Serial.println("Now over to Pin 13...");
Serial.println();
escapeBindFrequency1B13:
Serial.println("Please input Frequency no. 1 in Hz for bind mode on Pin 13, therefore above 999Hz and below 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency1B13 = Serial.parseFloat();
EEPROM.writeFloat(146, Frequency1B13);
EEPROM.commit();
}
if (Frequency1B13 == 0 || Frequency1B13 <= 0 || Frequency1B13 <= 999 || Frequency1B13 >= 10000) {
Serial.println("Please input a number above 999Hz and below 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency1B13 = 0;
goto escapeBindFrequency1B13;
}
Serial.print("The Frequency for slot 1 on Pin 13 is set at: ");
Serial.print(Frequency1B13);
Serial.print("Hz");
Serial.println();
escapeBindFrequency2B13:
Serial.println("Please input Frequency no. 2 in Hz for bind mode on Pin 13, therefore above 999Hz and below 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency2B13 = Serial.parseFloat();
EEPROM.writeFloat(151, Frequency2B13);
EEPROM.commit();
}
if (Frequency2B13 == 0 || Frequency2B13 <= 0 || Frequency2B13 <= 999 || Frequency2B13 >= 10000) {
Serial.println("Please input a number above 999Hz and below 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency2B13 = 0;
goto escapeBindFrequency2B13;
}
Serial.print("The Frequency for slot 2 on Pin 13 is set at: ");
Serial.print(Frequency2B13);
Serial.print("Hz");
Serial.println();
escapeBindFrequency3B13:
Serial.println("Please input Frequency no. 3 in Hz for bind mode on Pin 13, therefore above 999Hz and below 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency3B13 = Serial.parseFloat();
EEPROM.writeFloat(156, Frequency3B13);
EEPROM.commit();
}
if (Frequency3B13 == 0 || Frequency3B13 <= 0 || Frequency3B13 <= 999 || Frequency3B13 >= 10000) {
Serial.println("Please input a number above 999Hz and below 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency3B13 = 0;
goto escapeBindFrequency3B13;
}
Serial.print("The Frequency for slot 3 on Pin 13 is set at: ");
Serial.print(Frequency3B13);
Serial.print("Hz");
Serial.println();
escapeBindFrequency4B13:
Serial.println("Please input Frequency no. 4 in Hz for bind mode on Pin 13, therefore above 999Hz and below 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency4B13 = Serial.parseFloat();
EEPROM.writeFloat(161, Frequency4B13);
EEPROM.commit();
}
if (Frequency4B13 == 0 || Frequency4B13 <= 0 || Frequency4B13 <= 999 || Frequency4B13 >= 10000) {
Serial.println("Please input a number above 999Hz and below 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency4B13 = 0;
goto escapeBindFrequency4B13;
}
Serial.print("The Frequency for slot 4 on Pin 13 is set at: ");
Serial.print(Frequency4B13);
Serial.print("Hz");
Serial.println();
escapeBindFrequency5B13:
Serial.println("Please input Frequency no. 5 in Hz for bind mode on Pin 13, therefore above 999Hz and below 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency5B13 = Serial.parseFloat();
EEPROM.writeFloat(166, Frequency5B13);
EEPROM.commit();
}
if (Frequency5B13 == 0 || Frequency5B13 <= 0 || Frequency5B13 <= 999 || Frequency5B13 >= 10000) {
Serial.println("Please input a number above 999Hz and below 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency5B13 = 0;
goto escapeBindFrequency5B13;
}
Serial.print("The Frequency for slot 5 on Pin 13 is set at: ");
Serial.print(Frequency5B13);
Serial.print("Hz");
Serial.println();
escapeBindFrequency6B13:
Serial.println("Please input Frequency no. 6 in Hz for bind mode on Pin 13, therefore above 999Hz and below 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency6B13 = Serial.parseFloat();
EEPROM.writeFloat(171, Frequency6B13);
EEPROM.commit();
}
if (Frequency6B13 == 0 || Frequency6B13 <= 0 || Frequency6B13 <= 999 || Frequency6B13 >= 10000) {
Serial.println("Please input a number above 999Hz and below 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency6B13 = 0;
goto escapeBindFrequency6B13;
}
Serial.print("The Frequency for slot 6 on Pin 13 is set at: ");
Serial.print(Frequency6B13);
Serial.print("Hz");
Serial.println();
Serial.println("Now over to Pin 14...");
Serial.println();
escapeBindFrequency1B14:
Serial.println("Please input Frequency no. 1 in Hz for bind mode on Pin 14, therefore anything above 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency1B14 = Serial.parseFloat();
EEPROM.writeFloat(196, Frequency1B14);
EEPROM.commit();
}
if (Frequency1B14 == 0 || Frequency1B14 <= 0 || Frequency1B14 <= 9999) {
Serial.println("Please input a number above 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency1B14 = 0;
goto escapeBindFrequency1B14;
}
Serial.print("The Frequency for slot 1 on Pin 14 is set at: ");
Serial.print(Frequency1B14);
Serial.print("Hz");
Serial.println();
escapeBindFrequency2B14:
Serial.println("Please input Frequency no. 2 in Hz for bind mode on Pin 14, therefore anything above 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency2B14 = Serial.parseFloat();
EEPROM.writeFloat(201, Frequency2B14);
EEPROM.commit();
}
if (Frequency2B14 == 0 || Frequency2B14 <= 0 || Frequency2B14 <= 9999) {
Serial.println("Please input a number above 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency2B14 = 0;
goto escapeBindFrequency2B14;
}
Serial.print("The Frequency for slot 2 on Pin 14 is set at: ");
Serial.print(Frequency2B14);
Serial.print("Hz");
Serial.println();
escapeBindFrequency3B14:
Serial.println("Please input Frequency no. 3 in Hz for bind mode on Pin 14, therefore anything above 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency3B14 = Serial.parseFloat();
EEPROM.writeFloat(206, Frequency3B14);
EEPROM.commit();
}
if (Frequency3B14 == 0 || Frequency3B14 <= 0 || Frequency3B14 <= 9999) {
Serial.println("Please input a number above 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency3B14 = 0;
goto escapeBindFrequency3B14;
}
Serial.print("The Frequency for slot 3 on Pin 14 is set at: ");
Serial.print(Frequency3B14);
Serial.print("Hz");
Serial.println();
escapeBindFrequency4B14:
Serial.println("Please input Frequency no. 4 in Hz for bind mode on Pin 14, therefore anything above 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency4B14 = Serial.parseFloat();
EEPROM.writeFloat(211, Frequency4B14);
EEPROM.commit();
}
if (Frequency4B14 == 0 || Frequency4B14 <= 0 || Frequency4B14 <= 9999) {
Serial.println("Please input a number above 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency4B14 = 0;
goto escapeBindFrequency4B14;
}
Serial.print("The Frequency for slot 4 on Pin 14 is set at: ");
Serial.print(Frequency4B14);
Serial.print("Hz");
Serial.println();
escapeBindFrequency5B14:
Serial.println("Please input Frequency no. 5 in Hz for bind mode on Pin 14, therefore anything above 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency5B14 = Serial.parseFloat();
EEPROM.writeFloat(216, Frequency5B14);
EEPROM.commit();
}
if (Frequency5B14 == 0 || Frequency5B14 <= 0 || Frequency5B14 <= 9999) {
Serial.println("Please input a number above 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency5B14 = 0;
goto escapeBindFrequency5B14;
}
Serial.print("The Frequency for slot 5 on Pin 14 is set at: ");
Serial.print(Frequency5B14);
Serial.print("Hz");
Serial.println();
escapeBindFrequency6B14:
Serial.println("Please input Frequency no. 6 in Hz for bind mode on Pin 14, therefore anything above 10000Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency6B14 = Serial.parseFloat();
EEPROM.writeFloat(221, Frequency6B14);
EEPROM.commit();
}
if (Frequency6B14 == 0 || Frequency6B14 <= 0 || Frequency6B14 <= 9999) {
Serial.println("Please input a number above 10000Hz, not any other character and press Enter: ");
Serial.println();
Frequency6B14 = 0;
goto escapeBindFrequency6B14;
}
Serial.print("The Frequency for slot 6 on Pin 14 is set at: ");
Serial.print(Frequency6B14);
Serial.print("Hz");
Serial.println();
Serial.println("Now over to Pin 16...");
Serial.println();
escapeBindFrequency1B16:
Serial.println("Please input Frequency no. 1 in Hz for bind mode on Pin 16, therefore anything above 99999Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency1B16 = Serial.parseFloat();
EEPROM.writeFloat(126, Frequency1B16);
EEPROM.commit();
}
if (Frequency1B16 == 0 || Frequency1B16 <= 0 || Frequency1B16 <= 99999) {
Serial.println("Please input a number above 99999Hz, not any other character and press Enter: ");
Serial.println();
Frequency1B16 = 0;
goto escapeBindFrequency1B16;
}
Serial.print("The Frequency for slot 1 on Pin 16 is set at: ");
Serial.print(Frequency1B16);
Serial.print("Hz");
Serial.println();
escapeBindFrequency2B16:
Serial.println("Please input Frequency no. 2 in Hz for bind mode on Pin 16, therefore anything above 99999Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency2B16 = Serial.parseFloat();
EEPROM.writeFloat(131, Frequency2B16);
EEPROM.commit();
}
if (Frequency2B16 == 0 || Frequency2B16 <= 0 || Frequency2B16 <= 99999) {
Serial.println("Please input a number above 99999Hz, not any other character and press Enter: ");
Serial.println();
Frequency2B16 = 0;
goto escapeBindFrequency2B16;
}
Serial.print("The Frequency for slot 2 on Pin 16 is set at: ");
Serial.print(Frequency2B16);
Serial.print("Hz");
Serial.println();
escapeBindFrequency3B16:
Serial.println("Please input Frequency no. 3 in Hz for bind mode on Pin 16, therefore anything above 99999Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency3B16 = Serial.parseFloat();
EEPROM.writeFloat(136, Frequency3B16);
EEPROM.commit();
}
if (Frequency3B16 == 0 || Frequency3B16 <= 0 || Frequency3B16 <= 99999) {
Serial.println("Please input a number above 99999Hz, not any other character and press Enter: ");
Serial.println();
Frequency3B16 = 0;
goto escapeBindFrequency3B16;
}
Serial.print("The Frequency for slot 3 on Pin 16 is set at: ");
Serial.print(Frequency3B16);
Serial.print("Hz");
Serial.println();
escapeBindFrequency4B16:
Serial.println("Please input Frequency no. 4 in Hz for bind mode on Pin 16, therefore anything above 99999Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency4B16 = Serial.parseFloat();
EEPROM.writeFloat(141, Frequency4B16);
EEPROM.commit();
}
if (Frequency4B16 == 0 || Frequency4B16 <= 0 || Frequency4B16 <= 99999) {
Serial.println("Please input a number above 99999Hz, not any other character and press Enter: ");
Serial.println();
Frequency4B16 = 0;
goto escapeBindFrequency4B16;
}
Serial.print("The Frequency for slot 4 on Pin 16 is set at: ");
Serial.print(Frequency4B16);
Serial.print("Hz");
Serial.println();
escapeBindFrequency5B16:
Serial.println("Please input Frequency no. 5 in Hz for bind mode on Pin 16, therefore anything above 99999Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency5B16 = Serial.parseFloat();
EEPROM.writeFloat(176, Frequency5B16);
EEPROM.commit();
}
if (Frequency5B16 == 0 || Frequency5B16 <= 0 || Frequency5B16 <= 99999) {
Serial.println("Please input a number above 99999Hz, not any other character and press Enter: ");
Serial.println();
Frequency5B16 = 0;
goto escapeBindFrequency5B16;
}
Serial.print("The Frequency for slot 5 on Pin 16 is set at: ");
Serial.print(Frequency5B16);
Serial.print("Hz");
Serial.println();
escapeBindFrequency6B16:
Serial.println("Please input Frequency no. 6 in Hz for bind mode on Pin 16, therefore anything above 99999Hz");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency6B16 = Serial.parseFloat();
EEPROM.writeFloat(181, Frequency6B16);
EEPROM.commit();
}
if (Frequency6B16 == 0 || Frequency6B16 <= 0 || Frequency6B16 <= 99999) {
Serial.println("Please input a number above 99999z, not any other character and press Enter: ");
Serial.println();
Frequency6B16 = 0;
goto escapeBindFrequency6B16;
}
Serial.print("The Frequency for slot 6 on Pin 16 is set at: ");
Serial.print(Frequency6B16);
Serial.print("Hz");
Serial.println();
intervalSearchB12 = (((1/Frequency1B12)*1000000)/2);
intervalSearchB13 = (((1/Frequency1B13)*1000000)/2);
intervalSearchB14 = (((1/Frequency1B14)*1000000)/2);
intervalSearchB14 = (((1/Frequency1B16)*1000000)/2);
HighTimerB12 = ((intervalSearchB12 * 2) / 100) * DC;
LowTimerB12 = (intervalSearchB12 * 2) - HighTimerB12;
HighTimerB13 = ((intervalSearchB13 * 2) / 100) * DC;
LowTimerB13 = (intervalSearchB13 * 2) - HighTimerB13;
HighTimerB14 = ((intervalSearchB14 * 2) / 100) * DC;
LowTimerB14 = (intervalSearchB14 * 2) - HighTimerB14;
HighTimerB16 = ((intervalSearchB16 * 2) / 100) * DC;
LowTimerB16 = (intervalSearchB16 * 2) - HighTimerB16;
Freq1B12 = true; // markers to set this frequency position
Freq2B12 = false;
Freq3B12 = false;
Freq4B12 = false;
Freq5B12 = false;
Freq6B12 = false;
Freq1B13 = true;
Freq2B13 = false;
Freq3B13 = false;
Freq4B13 = false;
Freq5B13 = false;
Freq6B13 = false;
Freq1B13 = true;
Freq2B13 = false;
Freq3B13 = false;
Freq4B13 = false;
Freq5B13 = false;
Freq6B13 = false;
Serial.println("The 6 Frequencies are set separately for Pin 12, 13, 14 and 16");
Serial.println();
bootRun = false;
Stop = false;
}
if (bootRun == true && Fixed == false && Stop == true && manualSearch == true && Bind == false) {
escapeFrequency:
Serial.println("Please input the required Frequency in Hz (xxxxxxxxxx.xx) and press Enter:");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
Frequency = Serial.parseFloat();
EEPROM.writeFloat(1, Frequency);
EEPROM.commit();
}
if (Frequency == 0 || Frequency <= 0 || Frequency >= 9000000000) {
Serial.println("Please input a number above 0 and below 9000000000Hz, not any other character and press Enter: ");
Serial.println();
Frequency = 0;
goto escapeFrequency;
}
Serial.print("Frequency entered: ");
Serial.print(Frequency);
Serial.print("Hz");
Serial.println();
escapeUpperRange:
Serial.println("Please input the upper-range limit for the search (200% maximum), for 105% input '1.05' and press Enter:");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
UpperRange = Serial.parseFloat();
if (UpperRange <= 0.99 || UpperRange >= 2.00) {
Serial.println("Please input a number between 1 and 1.99, not any other character and press Enter: ");
Serial.println();
goto escapeUpperRange;
}
Serial.print("The upper-range limit is set at: ");
Serial.println(UpperRange);
}
escapeLowerRange:
Serial.println("Please input the lower-range limit for the search (1% minimum), for 95% input '0.95' and press Enter:");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
LowerRange = Serial.parseFloat();
if (LowerRange <= 0 || LowerRange >= 1.00 ) {
Serial.println("Please input a number above 0 and 0.99, not any other character and press Enter: ");
Serial.println();
goto escapeLowerRange;
}
Serial.print("The lower-range limit is set at: ");
Serial.println(LowerRange);
}
intervalSearch = (((1/Frequency)*1000000)/2); // 363 Micros at mid-range, 384 Micros at top-range in micros @ 2758Hz // 10000 Micros at mid-range. 10600 at top-range @ 100Hz (102Hz optimum)
intervalSearchLower = (intervalSearch*LowerRange); // 6% lower-range -> higher Frequency
EEPROM.writeFloat(76, intervalSearchLower);
EEPROM.commit();
intervalSearchUpper = (intervalSearch*UpperRange); // 6% upper-range -> lower Frequency
EEPROM.writeFloat(81, intervalSearchUpper);
EEPROM.commit();
LowerFrequency = ((1/intervalSearchLower/2)*1000000);
EEPROM.writeFloat(56, LowerFrequency);
EEPROM.commit();
UpperFrequency = ((1/intervalSearchUpper/2)*1000000);
EEPROM.writeFloat(61, UpperFrequency);
EEPROM.commit();
Serial.print("This is the lower search-limit for this Frequency: ");
Serial.print(UpperFrequency);
Serial.println("Hz");
Serial.print("This is the upper search-limit for this Frequency: ");
Serial.print(LowerFrequency);
Serial.println("Hz");
Serial.print("This is the PWM (HIGH-LOW) interval for the search: ");
Serial.print(intervalSearch);
Serial.println(" microseconds");
Serial.println("(the 1 uSecond limit exists however fractions might work on a fast processor, not sure...)");
Serial.println();
escapeDC:
Serial.println();
Serial.println("Please input the Duty Cycle in %, 50 is therefore 50%:");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
DC = Serial.parseFloat();
EEPROM.writeFloat(246, DC);
EEPROM.commit();
}
if (DC == 0 || DC <= 0 || DC >= 101) {
Serial.println("Please input a number above 0 and not above 100, not any other character and press Enter: ");
Serial.println();
intervalSearchLength = 0;
goto escapeDC;
}
Serial.print("Duty Cycle entered: ");
Serial.print(DC);
Serial.print("%");
Serial.println();
escapeiSLM:
Serial.println("Please input the hop-timer duration in milliseconds for the automatic search and press Enter: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
intervalSearchLength = Serial.parseFloat();
if (intervalSearchLength == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeiSLM;
}
EEPROM.writeFloat(71, intervalSearchLength);
EEPROM.commit();
Serial.print("The hop-timer was set at: ");
Serial.print(intervalSearchLength);
Serial.println(" milliseconds");
}
HighTimerSearch = ((intervalSearch * 2) / 100) * DC;
LowTimerSearch = (intervalSearch * 2) - HighTimerSearch;
Serial.println();
Serial.println("This Frequency is now running in manual mode ('m'),");
Serial.println("press 'a' and Enter to start the automatic search using the hop-timer, ");
Serial.println("or press 's' and Enter to reset the Frequency in case of inputting the wrong Frequency: ");
Serial.println();
if (Frequency >= 0) {
ProgramMode = 'm';
EEPROM.writeChar(86, ProgramMode);
EEPROM.commit();
manualSearch = true;
Fixed = false;
}
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
bootRun = false;
Stop = false;
}
if (bootRun == true && Fixed == true && Stop == true && manualSearch == false && Bind == false) {
escapeFrequency01:
Serial.println("Please input the Frequency for slot 1 and press Enter, slot 1 of 10: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0 && Freq01 == true) {
Frequency01 = Serial.parseFloat();
EEPROM.writeFloat(6, Frequency01);
EEPROM.commit();
if (Frequency01 == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeFrequency01;
}
Freq01 = false;
Freq02 = true;
Serial.print("The Frequency for slot 1 is set at: ");
Serial.print(Frequency01);
Serial.print("Hz");
Serial.println();
}
escapeFrequency02:
Serial.println("Please input the Frequency for slot 2 and press Enter, slot 2 of 10: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0 && Freq02 == true) {
Frequency02 = Serial.parseFloat();
EEPROM.writeFloat(11, Frequency02);
EEPROM.commit();
if (Frequency02 == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeFrequency02;
}
Freq02 = false;
Freq03 = true;
Serial.print("The Frequency for slot 2 is set at: ");
Serial.print(Frequency02);
Serial.print("Hz");
Serial.println();
}
escapeFrequency03:
Serial.println("Please input the Frequency for slot 3 and press Enter, slot 3 of 10: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0 && Freq03 == true) {
Frequency03 = Serial.parseFloat();
EEPROM.writeFloat(16, Frequency03);
EEPROM.commit();
if (Frequency03 == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeFrequency03;
}
Freq03 = false;
Freq04 = true;
Serial.print("The Frequency for slot 3 is set at: ");
Serial.print(Frequency03);
Serial.print("Hz");
Serial.println();
}
escapeFrequency04:
Serial.println("Please input the Frequency for slot 4 and press Enter, slot 4 of 10: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0 && Freq04 == true) {
Frequency04 = Serial.parseFloat();
EEPROM.writeFloat(21, Frequency04);
EEPROM.commit();
if (Frequency04 == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeFrequency04;
}
Freq04 = false;
Freq05 = true;
Serial.print("The Frequency for slot 4 is set at: ");
Serial.print(Frequency04);
Serial.print("Hz");
Serial.println();
}
escapeFrequency05:
Serial.println("Please input the Frequency for slot 5 and press Enter, slot 5 of 10: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0 && Freq05 == true) {
Frequency05 = Serial.parseFloat();
EEPROM.writeFloat(26, Frequency05);
EEPROM.commit();
if (Frequency05 == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeFrequency05;
}
Freq05 = false;
Freq06 = true;
Serial.print("The Frequency for slot 5 is set at: ");
Serial.print(Frequency05);
Serial.print("Hz");
Serial.println();
}
escapeFrequency06:
Serial.println("Please input the Frequency for slot 6 and press Enter, slot 6 of 10: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0 && Freq06 == true) {
Frequency06 = Serial.parseFloat();
EEPROM.writeFloat(31, Frequency06);
EEPROM.commit();
if (Frequency06 == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeFrequency06;
}
Freq06 = false;
Freq07 = true;
Serial.print("The Frequency for slot 6 is set at: ");
Serial.print(Frequency06);
Serial.print("Hz");
Serial.println();
}
escapeFrequency07:
Serial.println("Please input the Frequency for slot 7 and press Enter, slot 7 of 10: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0 && Freq07 == true) {
Frequency07 = Serial.parseFloat();
EEPROM.writeFloat(36, Frequency07);
EEPROM.commit();
if (Frequency07 == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeFrequency07;
}
Freq07 = false;
Freq08 = true;
Serial.print("The Frequency for slot 7 is set at: ");
Serial.print(Frequency07);
Serial.print("Hz");
Serial.println();
}
escapeFrequency08:
Serial.println("Please input the Frequency for slot 8 and press Enter, slot 8 of 10: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0 && Freq08 == true) {
Frequency08 = Serial.parseFloat();
EEPROM.writeFloat(41, Frequency08);
EEPROM.commit();
if (Frequency08 == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeFrequency08;
}
Freq08 = false;
Freq09 = true;
Serial.print("The Frequency for slot 8 is set at: ");
Serial.print(Frequency08);
Serial.print("Hz");
Serial.println();
}
escapeFrequency09:
Serial.println("Please input the Frequency for slot 9 and press Enter, slot 9 of 10: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0 && Freq09 == true) {
Frequency09 = Serial.parseFloat();
EEPROM.writeFloat(46, Frequency09);
EEPROM.commit();
if (Frequency09 == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeFrequency09;
}
Freq09 = false;
Freq10 = true;
Serial.print("The Frequency for slot 9 is set at: ");
Serial.print(Frequency09);
Serial.print("Hz");
Serial.println();
}
escapeFrequency10:
Serial.println("Please input the Frequency for slot 10 and press Enter, slot 10 of 10: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0 && Freq10 == true) {
Frequency10 = Serial.parseFloat();
EEPROM.writeFloat(51, Frequency10);
EEPROM.commit();
if (Frequency10 == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeFrequency10;
}
Freq10 = false;
Freq01 = true;
Serial.print("The Frequency for slot 10 is set at: ");
Serial.print(Frequency10);
Serial.print("Hz");
Serial.println();
bootRun = false;
}
escapehopTimer:
Serial.println();
Serial.println("Please input the frequency hop-timer in milliseconds, first press 't' for manual hop-timer input or press 'p' for special(!) mode and press Enter: ");
specialHop = false;
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
hopTimer = Serial.read();
if (hopTimer != 't' && hopTimer != 'p') {
Serial.println("Please input a character 't' or 'p', not a number and press Enter: ");
Serial.println();
goto escapehopTimer;
}
Serial.println();
}
escapeiSLF:
if (hopTimer == 't') {
Serial.println("Manual hop-timer was selected for fixed frequency mode, please input the hop-timer duration in milliseconds and press Enter: ");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
intervalSearchLength = Serial.parseFloat();
EEPROM.writeFloat(71, intervalSearchLength);
EEPROM.commit();
specialHop = false;
EEPROM.writeBool(91, specialHop);
EEPROM.commit();
if (intervalSearchLength == 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
goto escapeiSLF;
}
Serial.print("The hop-timer was set at: ");
Serial.print(intervalSearchLength);
Serial.println(" milliseconds");
Serial.println();
}
}
if (hopTimer == 'p') {
specialHop = true;
EEPROM.writeBool(91, specialHop);
EEPROM.commit();
Serial.println("Special mode was selected! (surprise: it is the duration in seconds for the amount of Hz)");
Serial.println();
}
Serial.println("Starting automatic fixed Frequency mode...");
Serial.println();
bootRun = false;
Stop = false;
}
if (Serial.available() > 0 && Stop == false && bootRun == false) {
ModeFunction = Serial.read();
Stop = true;
if (ModeFunction == 'b') {
ProgramMode = 'b';
EEPROM.writeChar(86, ProgramMode);
EEPROM.commit();
// delay(10);
Serial.println();
Serial.println("Entering bind mode...");
Serial.println();
// delay(10);
manualSearch = false;
Fixed = false;
bootRun = true;
specialHop = false;
Bind = true;
Freq1B12 = true; // marker to set this frequency position
Freq2B12 = false; // marker to set this frequency position
Freq3B12 = false; // marker to set this frequency position
Freq4B12 = false; // marker to set this frequency position
Freq5B12 = false; // marker to set this frequency position
Freq6B12 = false; // marker to set this frequency position
Freq1B13 = true; // marker to set this frequency position
Freq2B13 = false; // marker to set this frequency position
Freq3B13 = false; // marker to set this frequency position
Freq4B13 = false; // marker to set this frequency position
Freq5B13 = false; // marker to set this frequency position
Freq6B13 = false; // marker to set this frequency position
Freq1B14 = true; // marker to set this frequency position
Freq2B14 = false; // marker to set this frequency position
Freq3B14 = false; // marker to set this frequency position
Freq4B14 = false; // marker to set this frequency position
Freq5B14 = false; // marker to set this frequency position
Freq6B14 = false; // marker to set this frequency position
Freq1B16 = true; // marker to set this frequency position
Freq2B16 = false; // marker to set this frequency position
Freq3B16 = false; // marker to set this frequency position
Freq4B16 = false; // marker to set this frequency position
Freq5B16 = false; // marker to set this frequency position
Freq6B16 = false; // marker to set this frequency position
ModeFunction = 0;
goto escapeMF;
}
if (ModeFunction == 'a') {
ProgramMode = 'a';
EEPROM.writeChar(86, ProgramMode);
EEPROM.commit();
Serial.println();
Serial.println("Automatic mode was selected and is now running...");
Serial.println();
manualSearch = false;
Fixed = false;
bootRun = false;
specialHop = false;
Bind = false;
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == 'f') {
ProgramMode = 'f';
EEPROM.writeChar(86, ProgramMode);
EEPROM.commit();
Serial.println();
Serial.println("Entering the automatic fixed Frequency mode...");
Fixed = true;
bootRun = true;
manualSearch = false;
Bind = false;
Freq01 = true; // set the first marker to start programming the range
Freq02 = false; //
Freq03 = false; //
Freq04 = false; //
Freq05 = false; //
Freq06 = false; //
Freq07 = false; //
Freq08 = false; //
Freq09 = false; //
Freq10 = false; //
ModeFunction = 0;
goto escapeMF;
}
if (ModeFunction == 'm') {
ProgramMode = 'm';
EEPROM.writeChar(86, ProgramMode);
EEPROM.commit();
Serial.println();
Serial.println("Manual mode is running...");
Serial.println();
manualSearch = true;
specialHop = false;
Bind = false;
Fixed = false;
Freq01 = false; // set boolean
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
// delay(10);
Stop = false;
goto escapeMF;
}
if (ModeFunction == '0' && manualSearch == false && Fixed == true) {
intervalSearchLength = 10000;
Freq01 = true; // markers to set this frequency position
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == '1' && manualSearch == false && Fixed == true) {
intervalSearchLength = 10000;
Freq01 = false; // more markers
Freq02 = true;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == '2' && manualSearch == false && Fixed == true) {
intervalSearchLength = 10000;
Freq01 = false; // more markers
Freq02 = false;
Freq03 = true;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == '3' && manualSearch == false && Fixed == true) {
intervalSearchLength = 10000;
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = true;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
Stop = false;
goto escapeMF;
}
if (ModeFunction == '4' && manualSearch == false && Fixed == true) {
intervalSearchLength = 10000;
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = true;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == '5' && manualSearch == false && Fixed == true) {
intervalSearchLength = 10000;
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = true;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == '6' && manualSearch == false && Fixed == true) {
intervalSearchLength = 10000;
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = true;
Freq08 = false;
Freq09 = false;
Freq10 = false;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == '7' && manualSearch == false && Fixed == true) {
intervalSearchLength = 10000;
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = true;
Freq09 = false;
Freq10 = false;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == '8' && manualSearch == false && Fixed == true) {
intervalSearchLength = 10000;
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = true;
Freq10 = false;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == '9' && manualSearch == false && Fixed == true) {
intervalSearchLength = 10000;
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = true;
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == 'u' && manualSearch == false) {
ModeFunction = 0;
Serial.println();
Serial.println("'u', Frequency up, is only allowed in manual mode... Please choose a different input for the program...");
Serial.println();
Stop = false;
goto escapeMF;
}
if (ModeFunction == 'u' && manualSearch == true) {
if (Frequency >= 1 && Frequency <= 999) { // Hz range
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
if (intervalSearch <= intervalSearchLower) {
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
}
}
if (Frequency >= 1000 && Frequency <= 9999) { // 1-10 kHz range
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
if (intervalSearch <= intervalSearchLower) {
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
}
}
if (Frequency >= 10000 && Frequency <= 99999) { // 10-100 kHz range
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
if (intervalSearch <= intervalSearchLower) {
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
}
}
if (Frequency >= 100000 && Frequency <= 999999) { // 100-1000 kHz range
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
if (intervalSearch <= intervalSearchLower) {
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
}
}
if (Frequency >= 1000000 && Frequency <= 9999999) { // 1-10 MHz range
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
if (intervalSearch <= intervalSearchLower) {
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
}
}
if (Frequency >= 10000000 && Frequency <= 99999999) { // 10-100 MHz range
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
if (intervalSearch <= intervalSearchLower) {
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
}
}
if (Frequency >= 100000000 && Frequency <= 999999999) { // 100-1000 MHz range
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
if (intervalSearch <= intervalSearchLower) {
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
}
}
if (Frequency >= 1000000000 && Frequency <= 9999999990) { // 1-10 GHz range
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
if (intervalSearch <= intervalSearchLower) {
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
}
}
Frequency = (((1/intervalSearch)*1000000)/2);
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Shifted 0.01Hz up to: ");
Serial.print(Frequency);
Serial.print("Hz");
Serial.println();
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == 'd' && manualSearch == false) {
ModeFunction = 0;
Serial.println();
Serial.println("'d', Frequency down, is only allowed in manual mode... Please choose a different input for the program...");
Serial.println();
Stop = false;
goto escapeMF;
}
if (ModeFunction == 'd' && manualSearch == true) {
if (Frequency >= 1 && Frequency <= 999){ // Hz range
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
if (intervalSearch >= intervalSearchUpper) {
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
}
}
if (Frequency >= 1000 && Frequency <= 9999){ // 1-10 kHz range
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
if (intervalSearch >= intervalSearchUpper) {
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
}
}
if (Frequency >= 10000 && Frequency <= 99999) { // 10-100 kHz range
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
if (intervalSearch >= intervalSearchUpper) {
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
}
}
if (Frequency >= 100000 && Frequency <= 999999) { // 100-1000 kHz range
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
if (intervalSearch >= intervalSearchUpper) {
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
}
}
if (Frequency >= 1000000 && Frequency <= 9999999) { // 1-10 MHz range
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
if (intervalSearch >= intervalSearchUpper) {
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
}
}
if (Frequency >= 10000000 && Frequency <= 99999999) { // 10-100 MHz range
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
if (intervalSearch >= intervalSearchUpper) {
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
}
}
if (Frequency >= 100000000 && Frequency <= 999999999) { // 100-1000 MHz range
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
if (intervalSearch >= intervalSearchUpper) {
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
}
}
if (Frequency >= 1000000000 && Frequency <= 9999999990) { // 1-10 GHz range
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
if (intervalSearch >= intervalSearchUpper) {
intervalSearch = intervalSearch - (intervalSearch/Frequency/100);
}
}
Frequency = (((1/intervalSearch)*1000000)/2);
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Shifted 0.01Hz down to: ");
Serial.print(Frequency);
Serial.print("Hz");
Serial.println();
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
Serial.println();
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == 'i') {
Serial.println();
Serial.println("And now the Program Instructions:");
Serial.println();
Serial.println("Type: m");
Serial.println("and press Enter to start manual searching");
Serial.println("Type: s");
Serial.println("and press Enter to set the search Frequency in manual mode (also sets the frequency for the automatic mode except in 'f' automatic mode)");
Serial.println("Type: u");
Serial.println("and press Enter for shifting the Frequency 0.1Hz higher in manual mode, multiple 'u's at once is possible, to store this new frequency in the memory press 's' again");
Serial.println("Type: d");
Serial.println("and press Enter for shifting the Frequency 0.1Hz lower in manual mode, multiple 'd's at once is possible, to store this new frequency in the memory press 's' again");
Serial.println("Type: x");
Serial.println("to set the Duty Cycle, 50 is 50%");
Serial.println();
Serial.println("Type: a");
Serial.println("and press Enter to start automatic searching for the Frequency as set in manual mode (set Frequency to lower-Frequency-range to upper-Frequency-range and back to lower-Frequency-range");
Serial.println("press 'm' at any time to Stop the automatic search at the specific Frequency");
Serial.println();
Serial.println("Type: f");
Serial.println("and press Enter to input 10 fixed Frequencies for automatic mode,");
Serial.println("input '0' to '9' in this mode, only after inputting the 10 Frequencies, to drive them each for 10 seconds");
Serial.println();
Serial.println("Type: b");
Serial.println("and press Enter to bind 6 Frequencies (for one Frequency just input the same Frequency 6x) to each available Pin which are Pin 12 (up to 999Hz), Pin 13 (up to 1000-9999Hz), Pin 14 (above 10000Hz) and Pin 16 (above 99000Hz)");
Serial.println("input '0' to '9' in this mode, only after inputting the 10 Frequencies, to drive them for 10 seconds");
Serial.println();
Serial.println("Type: t");
Serial.println("to set the hop-timer (this adjusts the time between shifts in Frequency), minimum timings are recommended to be above 200 milliseconds");
Serial.println();
Serial.println("Type: h");
Serial.println("to perform a Hall-effect sensor and Frequency read-out");
Serial.println();
Serial.println("Type: i");
Serial.println("to receive the Program Instructions when running");
Serial.println();
Serial.println("Type: p");
Serial.println("to print the memory");
Serial.println();
Serial.println("Type: c");
Serial.println("to calculate the Wave- and antenna-length");
Serial.println();
Serial.println();
Serial.println("Good luck!");
Serial.println("the program should not stop working, if it somehow does then the code triggers a WatchDogTimer (WDT) afer several minutes...");
Serial.println("when the operator does not provide input for several minutes then the WDT is also triggered for reliability in operation...");
Serial.println();
Serial.println();
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == 's') {
bootRun = true;
Fixed = false;
manualSearch = true;
Bind = false;
ModeFunction = 0;
goto escapeMF;
}
if (ModeFunction == 'p') {
Serial.println();
Serial.println("These are the parameters stored in the memory:");
Serial.println();
Frequency = EEPROM.readFloat(1); // 1 is the address for Frequency
Frequency01 = EEPROM.readFloat(6);
Frequency02 = EEPROM.readFloat(11);
Frequency03 = EEPROM.readFloat(16);
Frequency04 = EEPROM.readFloat(21);
Frequency05 = EEPROM.readFloat(26);
Frequency06 = EEPROM.readFloat(31);
Frequency07 = EEPROM.readFloat(36);
Frequency08 = EEPROM.readFloat(41);
Frequency09 = EEPROM.readFloat(46);
Frequency10 = EEPROM.readFloat(51);
LowerFrequency = EEPROM.readFloat(56);
UpperFrequency = EEPROM.readFloat(61);
ProgramMode = EEPROM.readChar(86);
Frequency1B12 = EEPROM.readBool(96);
Frequency2B12 = EEPROM.readBool(101);
Frequency3B12 = EEPROM.readBool(106);
Frequency4B12 = EEPROM.readBool(111);
Frequency5B12 = EEPROM.readBool(116);
Frequency6B12 = EEPROM.readBool(121);
Frequency1B13 = EEPROM.readBool(146);
Frequency2B13 = EEPROM.readBool(151);
Frequency3B13 = EEPROM.readBool(156);
Frequency4B13 = EEPROM.readBool(161);
Frequency5B13 = EEPROM.readBool(166);
Frequency6B13 = EEPROM.readBool(171);
Frequency1B14 = EEPROM.readBool(196);
Frequency2B14 = EEPROM.readBool(201);
Frequency3B14 = EEPROM.readBool(206);
Frequency4B14 = EEPROM.readBool(211);
Frequency5B14 = EEPROM.readBool(216);
Frequency6B14 = EEPROM.readBool(221);
Frequency1B16 = EEPROM.readBool(126);
Frequency2B16 = EEPROM.readBool(131);
Frequency3B16 = EEPROM.readBool(136);
Frequency4B16 = EEPROM.readBool(141);
Frequency5B16 = EEPROM.readBool(176);
Frequency6B16 = EEPROM.readBool(181);
Serial.print("This is the program mode: ");
Serial.print(ProgramMode);
Serial.println();
Serial.print("The manual and automatic Frequency is set at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.println();
Serial.print("The lower-limit for the Frequency search is set at: ");
Serial.print(LowerFrequency);
Serial.println("Hz");
Serial.print("The upper-limit for the Frequency search is set at: ");
Serial.print(UpperFrequency);
Serial.println("Hz");
Serial.println();
Serial.print("At a Duty Cycle of: ");
Serial.print(DC);
Serial.println("%");
Serial.println();
Serial.print("The hop-timer value is set at: ");
Serial.print(intervalSearchLength);
Serial.println(" milliseconds");
Serial.println();
Serial.print("Slot 1 in fixed Frequency mode is set for: ");
Serial.print(Frequency01);
Serial.println("Hz");
Serial.print("Slot 2 in fixed Frequency mode is set for: ");
Serial.print(Frequency02);
Serial.println("Hz");
Serial.print("Slot 3 in fixed Frequency mode is set for: ");
Serial.print(Frequency03);
Serial.println("Hz");
Serial.print("Slot 4 in fixed Frequency mode is set for: ");
Serial.print(Frequency04);
Serial.println("Hz");
Serial.print("Slot 5 in fixed Frequency mode is set for: ");
Serial.print(Frequency05);
Serial.println("Hz");
Serial.print("Slot 6 in fixed Frequency mode is set for: ");
Serial.print(Frequency06);
Serial.println("Hz");
Serial.print("Slot 7 in fixed Frequency mode is set for: ");
Serial.print(Frequency07);
Serial.println("Hz");
Serial.print("Slot 8 in fixed Frequency mode is set for: ");
Serial.print(Frequency08);
Serial.println("Hz");
Serial.print("Slot 9 in fixed Frequency mode is set for: ");
Serial.print(Frequency09);
Serial.println("Hz");
Serial.print("Slot 10 in fixed Frequency mode is set for: ");
Serial.print(Frequency10);
Serial.println("Hz");
Serial.println();
Serial.print("The Frequencies in bind mode are... ");
Serial.println(Frequency1B12);
Serial.print("Slot 1 for Pin 12 is set for: ");
Serial.print(Frequency2B12);
Serial.println("Hz");
Serial.print("Slot 2 for Pin 12 is set for: ");
Serial.print(Frequency3B12);
Serial.println("Hz");
Serial.print("Slot 3 for Pin 12 is set for: ");
Serial.print(Frequency3B12);
Serial.println("Hz");
Serial.print("Slot 4 for Pin 12 is set for: ");
Serial.print(Frequency4B12);
Serial.println("Hz");
Serial.print("Slot 5 for Pin 12 is set for: ");
Serial.print(Frequency5B12);
Serial.println("Hz");
Serial.print("Slot 6 for Pin 12 is set for: ");
Serial.print(Frequency6B12);
Serial.println("Hz");
Serial.println();
Serial.print("Moving over to the slots for Pin 13... ");
Serial.println();
Serial.print("Slot 1 for Pin 13 is set for: ");
Serial.print(Frequency2B13);
Serial.println("Hz");
Serial.print("Slot 2 for Pin 13 is set for: ");
Serial.print(Frequency3B13);
Serial.println("Hz");
Serial.print("Slot 3 for Pin 13 is set for: ");
Serial.print(Frequency3B13);
Serial.println("Hz");
Serial.print("Slot 4 for Pin 13 is set for: ");
Serial.print(Frequency4B13);
Serial.println("Hz");
Serial.print("Slot 5 for Pin 13 is set for: ");
Serial.print(Frequency5B13);
Serial.println("Hz");
Serial.print("Slot 6 for Pin 13 is set for: ");
Serial.print(Frequency6B13);
Serial.println("Hz");
Serial.println();
Serial.print("Moving over to the slots for Pin 14... ");
Serial.println();
Serial.print("Slot 1 for Pin 14 is set for: ");
Serial.print(Frequency2B14);
Serial.println("Hz");
Serial.print("Slot 2 for Pin 14 is set for: ");
Serial.print(Frequency3B14);
Serial.println("Hz");
Serial.print("Slot 3 for Pin 14 is set for: ");
Serial.print(Frequency3B14);
Serial.println("Hz");
Serial.print("Slot 4 for Pin 14 is set for: ");
Serial.print(Frequency4B14);
Serial.println("Hz");
Serial.print("Slot 5 for Pin 14 is set for: ");
Serial.print(Frequency5B14);
Serial.println("Hz");
Serial.print("Slot 6 for Pin 14 is set for: ");
Serial.print(Frequency6B14);
Serial.println("Hz");
Serial.println();
Serial.print("Moving over to the slots for Pin 16... ");
Serial.println();
Serial.print("Slot 1 for Pin 16 is set for: ");
Serial.print(Frequency2B16);
Serial.println("Hz");
Serial.print("Slot 2 for Pin 16 is set for: ");
Serial.print(Frequency3B16);
Serial.println("Hz");
Serial.print("Slot 3 for Pin 16 is set for: ");
Serial.print(Frequency3B16);
Serial.println("Hz");
Serial.print("Slot 4 for Pin 16 is set for: ");
Serial.print(Frequency4B14);
Serial.println("Hz");
Serial.print("Slot 5 for Pin 16 is set for: ");
Serial.print(Frequency5B16);
Serial.println("Hz");
Serial.print("Slot 6 for Pin 16 is set for: ");
Serial.print(Frequency6B16);
Serial.println("Hz");
Serial.println();
Serial.println();
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == 'c' && Bind == true) {
ModeFunction = 0;
Serial.println();
Serial.println("'c' is not allowed in bind mode because multiple Frequencies are running. Please choose a different input for the program...");
Serial.println();
Stop = false;
goto escapeMF;
}
if (ModeFunction == 'c') {
Wavelength = 299792458/Frequency;
Serial.println();
Serial.print("The Wavelength for ");
Serial.print(Frequency);
Serial.print("Hz ");
Serial.print("is ");
Serial.print(Wavelength);
Serial.println("m");
antenna = Wavelength;
while (antenna >= 2) {antenna = antenna/4;}
Serial.print("Recommended antenna-length below 200cm would be (based on Wavelength/4/4/4/etc.): ");
Serial.print(antenna);
Serial.println("cm");
Serial.println();
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == 'h') {
delayMicroseconds(10);
if (Bind == true) {
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.print("Now running at: ");
Serial.print(FrequencyB12);
Serial.println("Hz for Pin 12");
Serial.print("Now running at: ");
Serial.print(FrequencyB13);
Serial.println("Hz for Pin 13");
Serial.print("Now running at: ");
Serial.print(FrequencyB14);
Serial.println("Hz for Pin 14");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at these Frequencies");
}
if (Bind == false) {
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
Serial.println();
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
Serial.println();
}
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == 't') {
escapeHopT:
Serial.println();
Serial.println("Please input the hop-timer value in milliseconds and press Enter:");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
intervalSearchLength = Serial.parseFloat();
EEPROM.writeFloat(71, intervalSearchLength);
EEPROM.commit();
}
if (intervalSearchLength == 0 || intervalSearchLength <= 0) {
Serial.println("Please input a number above 0, not any other character and press Enter: ");
Serial.println();
intervalSearchLength = 0;
goto escapeHopT;
}
Serial.print("Hop-timer entered: ");
Serial.print(intervalSearchLength);
Serial.print(" milliseconds");
Serial.println();
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
if (ModeFunction == 'x') {
escapeDT:
Serial.println();
Serial.print("Current Duty Cycle is: ");
Serial.print(DC);
Serial.println("%");
Serial.println();
Serial.println("Please input the Duty Cycle in %, 50 is therefore 50%:");
while (Serial.available() == 0) {}
if (Serial.available() > 0) {
DC = Serial.parseFloat();
EEPROM.writeFloat(246, DC);
EEPROM.commit();
}
if (DC == 0 || DC <= 0 || DC >= 101) {
Serial.println("Please input a number above 0 and not above 100, not any other character and press Enter: ");
Serial.println();
intervalSearchLength = 0;
goto escapeDT;
}
Serial.print("Duty Cycle entered: ");
Serial.print(DC);
Serial.print("%");
Serial.println();
Serial.println();
ModeFunction = 0;
Stop = false;
goto escapeMF;
}
else {
ModeFunction = 0;
Serial.println();
Serial.println("Input for the Program was not correct... Please try again...");
Serial.println();
Stop = false;
goto escapeMF;
}
} escapeMF:
// Detect the SearchLength
if (currentMillis - previousMillisSearchLength >= intervalSearchLength && Stop == false && manualSearch == false && bootRun == false) {
// Stop = true;
// Interval
previousMillisSearchLength = currentMillis;
if (Bind == true) {
FrequencyShiftB12 = true;
FrequencyShiftB13 = true;
FrequencyShiftB14 = true;
FrequencyShiftB16 = true;
if (Freq1B12 == true && FrequencyShiftB12 == true) {
if (Frequency1B12 > 0) {
intervalSearchB12 = (((1/Frequency1B12)*1000000)/2);
}
Freq1B12 = false; // markers to set this frequency position
Freq2B12 = true;
Freq3B12 = false;
Freq4B12 = false;
Freq5B12 = false;
Freq6B12 = false;
FrequencyShiftB12 = false;
}
if (Freq2B12 == true && FrequencyShiftB12 == true) {
if (Frequency2B12 > 0) {
intervalSearchB12 = (((1/Frequency2B12)*1000000)/2);
}
Freq1B12 = false; // more markers
Freq2B12 = false;
Freq3B12 = true;
Freq4B12 = false;
Freq5B12 = false;
Freq6B12 = false;
FrequencyShiftB12 = false;
}
if (Freq3B12 == true && FrequencyShiftB12 == true) {
if (Frequency3B12 > 0) {
intervalSearchB12 = (((1/Frequency3B12)*1000000)/2);
}
Freq1B12 = false; // more markers
Freq2B12 = false;
Freq3B12 = false;
Freq4B12 = true;
Freq5B12 = false;
Freq6B12 = false;
FrequencyShiftB12 = false;
}
if (Freq4B12 == true && FrequencyShiftB12 == true) {
if (Frequency4B12 > 0) {
intervalSearchB12 = (((1/Frequency4B12)*1000000)/2);
}
Freq1B12 = false; // more markers
Freq2B12 = false;
Freq3B12 = false;
Freq4B12 = false;
Freq5B12 = true;
Freq6B12 = false;
FrequencyShiftB12 = false;
}
if (Freq5B12 == true && FrequencyShiftB12 == true) {
if (Frequency5B12 > 0) {
intervalSearchB12 = (((1/Frequency5B12)*1000000)/2);
}
Freq1B12 = false; // more markers
Freq2B12 = false;
Freq3B12 = false;
Freq4B12 = false;
Freq5B12 = false;
Freq6B12 = true;
FrequencyShiftB12 = false;
}
if (Freq6B12 == true && FrequencyShiftB12 == true) {
if (Frequency6B12 > 0) {
intervalSearchB12 = (((1/Frequency6B12)*1000000)/2);
}
Freq1B12 = true; // more markers
Freq2B12 = false;
Freq3B12 = false;
Freq4B12 = false;
Freq5B12 = false;
Freq6B12 = false;
FrequencyShiftB12 = false;
}
if (Freq1B13 == true && FrequencyShiftB13 == true) {
if (Frequency1B13 > 0) {
intervalSearchB13 = (((1/Frequency1B13)*1000000)/2);
}
Freq1B13 = false; // more markers
Freq2B13 = true;
Freq3B13 = false;
Freq4B13 = false;
Freq5B13 = false;
Freq6B13 = false;
FrequencyShiftB13 = false;
}
if (Freq2B13 == true && FrequencyShiftB13 == true) {
if (Frequency2B13 > 0) {
intervalSearchB13 = (((1/Frequency2B13)*1000000)/2);
}
Freq1B13 = false; // more markers
Freq2B13 = false;
Freq3B13 = true;
Freq4B13 = false;
Freq5B13 = false;
Freq6B13 = false;
FrequencyShiftB13 = false;
}
if (Freq3B13 == true && FrequencyShiftB13 == true) {
if (Frequency3B13 > 0) {
intervalSearchB13 = (((1/Frequency3B13)*1000000)/2);
}
Freq1B13 = false; // more markers
Freq2B13 = false;
Freq3B13 = false;
Freq4B13 = true;
Freq5B13 = false;
Freq6B13 = false;
FrequencyShiftB13 = false;
}
if (Freq4B13 == true && FrequencyShiftB13 == true) {
if (Frequency4B13 > 0) {
intervalSearchB13 = (((1/Frequency4B13)*1000000)/2);
}
Freq1B13 = false; // more markers
Freq2B13 = false;
Freq3B13 = false;
Freq4B13 = false;
Freq5B13 = true;
Freq6B13 = false;
FrequencyShiftB13 = false;
}
if (Freq5B13 == true && FrequencyShiftB13 == true) {
if (Frequency5B13 > 0) {
intervalSearchB13 = (((1/Frequency5B13)*1000000)/2);
}
Freq1B13 = false; // more markers
Freq2B13 = false;
Freq3B13 = false;
Freq4B13 = false;
Freq5B13 = false;
Freq6B13 = true;
FrequencyShiftB13 = false;
}
if (Freq6B13 == true && FrequencyShiftB13 == true) {
if (Frequency6B13 > 0) {
intervalSearchB13 = (((1/Frequency6B13)*1000000)/2);
}
Freq1B13 = true; // more markers
Freq2B13 = false;
Freq3B13 = false;
Freq4B13 = false;
Freq5B13 = false;
Freq6B13 = false;
FrequencyShiftB13 = false;
}
if (Freq1B14 == true && FrequencyShiftB14 == true) {
if (Frequency1B14 > 0) {
intervalSearchB14 = (((1/Frequency1B14)*1000000)/2);
}
Freq1B14 = false; // more markers
Freq2B14 = true;
Freq3B14 = false;
Freq4B14 = false;
Freq5B14 = false;
Freq6B14 = false;
FrequencyShiftB14 = false;
}
if (Freq2B14 == true && FrequencyShiftB14 == true) {
if (Frequency2B14 > 0) {
intervalSearchB14 = (((1/Frequency2B14)*1000000)/2);
}
Freq1B14 = false;
Freq2B14 = false;
Freq3B14 = true;
Freq4B14 = false;
Freq5B14 = false;
Freq6B14 = false;
FrequencyShiftB14 = false;
}
if (Freq3B14 == true && FrequencyShiftB14 == true) {
if (Frequency3B14 > 0) {
intervalSearchB14 = (((1/Frequency3B14)*1000000)/2);
}
Freq1B14 = false; // more markers
Freq2B14 = false;
Freq3B14 = false;
Freq4B14 = true;
Freq5B14 = false;
Freq6B14 = false;
FrequencyShiftB14 = false;
}
if (Freq4B14 == true && FrequencyShiftB14 == true) {
if (Frequency4B14 > 0) {
intervalSearchB14 = (((1/Frequency4B14)*1000000)/2);
}
Freq1B14 = false; // more markers
Freq2B14 = false;
Freq3B14 = false;
Freq4B14 = false;
Freq5B14 = true;
Freq6B14 = false;
FrequencyShiftB14 = false;
}
if (Freq5B14 == true && FrequencyShiftB14 == true) {
if (Frequency5B14 > 0) {
intervalSearchB14 = (((1/Frequency5B14)*1000000)/2);
}
Freq1B14 = false; // more markers
Freq2B14 = false;
Freq3B14 = false;
Freq4B14 = false;
Freq5B14 = false;
Freq6B14 = true;
FrequencyShiftB14 = false;
}
if (Freq6B14 == true && FrequencyShiftB14 == true) {
if (Frequency6B14 > 0) {
intervalSearchB14 = (((1/Frequency6B14)*1000000)/2);
}
Freq1B14 = true; // more markers
Freq2B14 = false;
Freq3B14 = false;
Freq4B14 = false;
Freq5B14 = false;
Freq6B14 = false;
FrequencyShiftB14 = false;
}
if (Freq1B16 == true && FrequencyShiftB16 == true) {
if (Frequency1B16 > 0) {
intervalSearchB16 = (((1/Frequency1B16)*1000000)/2);
}
Freq1B16 = false; // more markers
Freq2B16 = true;
Freq3B16 = false;
Freq4B16 = false;
Freq5B16 = false;
Freq6B16 = false;
FrequencyShiftB16 = false;
}
if (Freq2B16 == true && FrequencyShiftB16 == true) {
if (Frequency2B16 > 0) {
intervalSearchB16 = (((1/Frequency2B16)*1000000)/2);
}
Freq1B16 = false; // more markers
Freq2B16 = false;
Freq3B16 = true;
Freq4B16 = false;
Freq5B16 = false;
Freq6B16 = false;
FrequencyShiftB16 = false;
}
if (Freq3B16 == true && FrequencyShiftB16 == true) {
if (Frequency3B16 > 0) {
intervalSearchB16 = (((1/Frequency3B16)*1000000)/2);
}
Freq1B16 = false; // more markers
Freq2B16 = false;
Freq3B16 = false;
Freq4B16 = true;
Freq5B16 = false;
Freq6B16 = false;
FrequencyShiftB16 = false;
}
if (Freq4B16 == true && FrequencyShiftB16 == true) {
if (Frequency4B16 > 0) {
intervalSearchB16 = (((1/Frequency4B16)*1000000)/2);
}
Freq1B16 = false; // more markers
Freq2B16 = false;
Freq3B16 = false;
Freq4B16 = false;
Freq5B16 = true;
Freq6B16 = false;
FrequencyShiftB16 = false;
}
if (Freq5B16 == true && FrequencyShiftB16 == true) {
if (Frequency5B16 > 0) {
intervalSearchB16 = (((1/Frequency5B16)*1000000)/2);
}
Freq1B16 = false; // more markers
Freq2B16 = false;
Freq3B16 = false;
Freq4B16 = false;
Freq5B16 = false;
Freq6B14 = true;
FrequencyShiftB16 = false;
}
if (Freq6B16 == true && FrequencyShiftB16 == true) {
if (Frequency6B16 > 0) {
intervalSearchB16 = (((1/Frequency6B16)*1000000)/2);
}
Freq1B16 = true; // more markers
Freq2B16 = false;
Freq3B16 = false;
Freq4B16 = false;
Freq5B16 = false;
Freq6B16 = false;
FrequencyShiftB16 = false;
}
HighTimerB12 = ((intervalSearchB12 * 2) / 100) * DC;
LowTimerB12 = (intervalSearchB12 * 2) - HighTimerB12;
HighTimerB13 = ((intervalSearchB13 * 2) / 100) * DC;
LowTimerB13 = (intervalSearchB13 * 2) - HighTimerB13;
HighTimerB14 = ((intervalSearchB14 * 2) / 100) * DC;
LowTimerB14 = (intervalSearchB14 * 2) - HighTimerB14;
HighTimerB16 = ((intervalSearchB16 * 2) / 100) * DC;
LowTimerB16 = (intervalSearchB16 * 2) - HighTimerB16;
FrequencyB12 = (((1/intervalSearchB12)*1000000)/2);
FrequencyB13 = (((1/intervalSearchB13)*1000000)/2);
FrequencyB14 = (((1/intervalSearchB14)*1000000)/2);
FrequencyB16 = (((1/intervalSearchB16)*1000000)/2);
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
}
if (Fixed == false) {
intervalSearch = intervalSearch + (intervalSearch/Frequency/100);
if (intervalSearch >= intervalSearchUpper) { // lower frequency
intervalSearch = intervalSearchLower;
}
}
if (Fixed == true) {
FrequencyShift = true;
if (Freq01 == true && FrequencyShift == true) {
if (Frequency01 > 0) {
intervalSearch = (((1/Frequency01)*1000000)/2);
}
Freq01 = false; // more markers
Freq02 = true; // marker to set this frequency position
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
FrequencyShift = false;
}
if (Freq02 == true && FrequencyShift == true) {
if (Frequency02 > 0) {
intervalSearch = (((1/Frequency02)*1000000)/2);
}
Freq01 = false; // more markers
Freq02 = false;
Freq03 = true;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
FrequencyShift = false;
}
if (Freq03 == true && FrequencyShift == true) {
if (Frequency03 > 0) {
intervalSearch = (((1/Frequency03)*1000000)/2);
}
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = true;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
FrequencyShift = false;
}
if (Freq04 == true && FrequencyShift == true) {
if (Frequency04 > 0) {
intervalSearch = (((1/Frequency04)*1000000)/2);
}
Freq01 = false;
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = true;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
FrequencyShift = false;
}
if (Freq05 == true && FrequencyShift == true) {
if (Frequency05 > 0) {
intervalSearch = (((1/Frequency05)*1000000)/2);
}
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = true;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
FrequencyShift = false;
}
if (Freq06 == true && FrequencyShift == true) {
if (Frequency06 > 0) {
intervalSearch = (((1/Frequency06)*1000000)/2);
}
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = true;
Freq08 = false;
Freq09 = false;
Freq10 = false;
FrequencyShift = false;
}
if (Freq07 == true && FrequencyShift == true) {
if (Frequency07 > 0) {
intervalSearch = (((1/Frequency07)*1000000)/2);
}
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = true;
Freq09 = false;
Freq10 = false;
FrequencyShift = false;
}
if (Freq08 == true && FrequencyShift == true) {
if (Frequency08 > 0) {
intervalSearch = (((1/Frequency08)*1000000)/2);
}
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = true;
Freq10 = false;
FrequencyShift = false;
}
if (Freq09 == true && FrequencyShift == true) {
if (Frequency09 > 0) {
intervalSearch = (((1/Frequency09)*1000000)/2);
}
Freq01 = false; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = true;
FrequencyShift = false;
}
if (Freq10 == true && FrequencyShift == true) {
if (Frequency10 > 0) {
intervalSearch = (((1/Frequency10)*1000000)/2);
}
Freq01 = true; // more markers
Freq02 = false;
Freq03 = false;
Freq04 = false;
Freq05 = false;
Freq06 = false;
Freq07 = false;
Freq08 = false;
Freq09 = false;
Freq10 = false;
FrequencyShift = false;
}
}
// calculates the LOW and HIGH times for the pin
HighTimerSearch = ((intervalSearch * 2) / 100) * DC;
LowTimerSearch = (intervalSearch * 2) - HighTimerSearch;
if (Bind == false) {
Frequency = (((1/intervalSearch)*1000000)/2);
Serial.print("Now running at: ");
Serial.print(Frequency);
Serial.println("Hz");
Serial.print("External Hall-effect sensor reads: ");
Serial.print(HallVoltage, 1); // one decimal precision
Serial.print("mV ");
Serial.println("at this Frequency");
if (specialHop == true) {
intervalSearchLength = (Frequency*1000);
}
HallVoltage = analogRead(HallPin) * (3.3 / 4095) * 1000; // in millivolts
if (Reference - HallVoltage >= 10) {
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
}
if (Reference - HallVoltage <= -10) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
}
if (Reference - HallVoltage >= -9 && Reference - HallVoltage <= 9) {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
}
if(millis() - WDTtimer >= 290000){
esp_task_wdt_reset();
WDTtimer = millis();
}
}
}
if (currentMicros - previousMicrosB12 >= LowTimerB12 && StatePinBind12 == LOW && Stop == false && bootRun == false && Bind == true) {
previousMicrosB12 = currentMicros;
StatePinBind12 = HIGH;
// Write -level
digitalWrite(Pin999, StatePinBind12);
}
if (currentMicros - previousMicrosB12 >= HighTimerB12 && StatePinBind12 == HIGH && Stop == false && bootRun == false && Bind == true) {
previousMicrosB12 = currentMicros;
StatePinBind12 = LOW;
// Write -level
digitalWrite(Pin999, StatePinBind12);
}
if (currentMicros - previousMicrosB13 >= LowTimerB13 && StatePinBind13 == LOW && Stop == false && bootRun == false && Bind == true) {
previousMicrosB13 = currentMicros;
StatePinBind13 = HIGH;
// Write -level
digitalWrite(Pin9999, StatePinBind13);
}
if (currentMicros - previousMicrosB13 >= HighTimerB13 && StatePinBind13 == HIGH && Stop == false && bootRun == false && Bind == true) {
previousMicrosB13 = currentMicros;
StatePinBind13 = LOW;
// Write -level
digitalWrite(Pin9999, StatePinBind13);
}
if (currentMicros - previousMicrosB14 >= LowTimerB14 && StatePinBind14 == LOW && Stop == false && bootRun == false && Bind == true) {
previousMicrosB14 = currentMicros;
StatePinBind14 = HIGH;
// Write -level
digitalWrite(Pin99999, StatePinBind14);
}
if (currentMicros - previousMicrosB14 >= HighTimerB14 && StatePinBind14 == HIGH && Stop == false && bootRun == false && Bind == true) {
previousMicrosB14 = currentMicros;
StatePinBind14 = LOW;
// Write -level
digitalWrite(Pin99999, StatePinBind14);
}
if (currentMicros - previousMicrosB16 >= LowTimerB16 && StatePinBind16 == LOW && Stop == false && bootRun == false && Bind == true) {
previousMicrosB16 = currentMicros;
StatePinBind16 = HIGH;
// Write -level
digitalWrite(Pin999999, StatePinBind16);
}
if (currentMicros - previousMicrosB16 >= HighTimerB16 && StatePinBind16 == HIGH && Stop == false && bootRun == false && Bind == true) {
previousMicrosB16 = currentMicros;
StatePinBind16 = LOW;
// Write -level
digitalWrite(Pin999999, StatePinBind16);
}
if (currentMicros - previousMicrosSearch >= LowTimerSearch && StateSearch == LOW && Stop == false && bootRun == false && Bind == false) {
previousMicrosSearch = currentMicros;
StateSearch = HIGH;
// Write -level
if (Frequency >= 1 && Frequency <= 999) {
digitalWrite(Pin999, StateSearch);
digitalWrite(Pin9999, LOW);
digitalWrite(Pin99999, LOW);
digitalWrite(Pin999999, LOW);
}
if (Frequency >= 1000 && Frequency <= 9999) {
digitalWrite(Pin9999, StateSearch);
digitalWrite(Pin999, LOW);
digitalWrite(Pin99999, LOW);
digitalWrite(Pin999999, LOW);
}
if (Frequency >= 10000 && Frequency <= 99999) {
digitalWrite(Pin99999, StateSearch);
digitalWrite(Pin999, LOW);
digitalWrite(Pin9999, LOW);
digitalWrite(Pin999999, LOW);
}
if (Frequency >= 100000) {
digitalWrite(Pin999999, StateSearch);
digitalWrite(Pin999, LOW);
digitalWrite(Pin9999, LOW);
digitalWrite(Pin99999, LOW);
}
}
if (currentMicros - previousMicrosSearch >= HighTimerSearch && StateSearch == HIGH && Stop == false && bootRun == false && Bind == false) {
previousMicrosSearch = currentMicros;
StateSearch = LOW;
// Write -level
if (Frequency >= 1 && Frequency <= 999) {
digitalWrite(Pin999, StateSearch);
digitalWrite(Pin9999, LOW);
digitalWrite(Pin99999, LOW);
digitalWrite(Pin999999, LOW);
}
if (Frequency >= 1000 && Frequency <= 9999) {
digitalWrite(Pin9999, StateSearch);
digitalWrite(Pin999, LOW);
digitalWrite(Pin99999, LOW);
digitalWrite(Pin999999, LOW);
}
if (Frequency >= 10000 && Frequency <= 99999) {
digitalWrite(Pin99999, StateSearch);
digitalWrite(Pin999, LOW);
digitalWrite(Pin9999, LOW);
digitalWrite(Pin999999, LOW);
}
if (Frequency >= 100000) {
digitalWrite(Pin999999, StateSearch);
digitalWrite(Pin999, LOW);
digitalWrite(Pin9999, LOW);
digitalWrite(Pin99999, LOW);
}
}
// resets the WDT timer after before a time-out
if(millis() - WDTtimer >= 290000){
esp_task_wdt_reset();
WDTtimer = millis();
}
}
There is a minor bug which causes the setting to be lost when the duty-cycle is updated using x through the serial monitor (let me check on that, press m for that in the meantime to get back on track). Let me know if you find other problems. Always check your real output with an oscilloscope.
I uploaded it to a WEMOS ESP32 and the program is functional on mine.
The program was written several years ago with little time so please do improve on it.