/* RemoteAntennaSwitch
* Arduino Ethernet Remote Antenna switch Control
*
* by Gianfranco IZ8EWD
* www.pianetaradio.it
*
* Arduino Nano
* Ethernet shield
*
*
* Hardware connections (Arduino UNO/Nano):
* Ethernet shield
* SS -> D10
* MOSI -> D11
* MISO <- D12
* SCK -> D13
* SD CS -> D4
*
* Relay
* Relay1 -> D5
* Relay2 -> D6
* Relay3 -> D7
* Relay4 -> D8
* Relay5 -> D9
*
*
* v 1.1 19/08/2021
* + reset button
*
* v 1.0 23/06/2021
* first issue
*/
//Libraries
#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Constants
#define switch1 5 //Relay1
#define switch2 6 //Relay2
#define switch3 7 //Relay3
#define switch4 8 //Relay4
#define switch5 9 //Relay5
#define button1 14 //button1
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //MAC address
IPAddress ip(192,168,51,4); //static IP
IPAddress gateway(192,168,51,1); //gateway
IPAddress subnet(255,255,255,0); //subnet mask
EthernetServer server(80); //server port
//Variables
int status1 = LOW;
int status2 = LOW;
int status3 = LOW;
int status4 = LOW;
int status5 = LOW;
String readString;
//Code
void setup() {
lcd.begin();
lcd.backlight(); //accende la retroilluminazione
//Port definition
pinMode(switch1, OUTPUT);
pinMode(switch2, OUTPUT);
pinMode(switch3, OUTPUT);
pinMode(switch4, OUTPUT);
pinMode(switch5, OUTPUT);
pinMode(button1, INPUT);
//Port init
digitalWrite(switch1, LOW);
digitalWrite(switch2, LOW);
digitalWrite(switch3, LOW);
digitalWrite(switch4, LOW);
digitalWrite(switch5, LOW);
digitalWrite(button1, LOW);
//Start the server
Ethernet.init(10);
Ethernet.begin(mac, ip, gateway, subnet); //Static IP
//Ethernet.begin(mac); //DHCP
delay(500);
server.begin();
}
void setports(int ant) {
digitalWrite(switch1, LOW);
status1=LOW;
digitalWrite(switch2, LOW);
status2=LOW;
digitalWrite(switch3, LOW);
status3=LOW;
digitalWrite(switch4, LOW);
status4=LOW;
digitalWrite(switch5, LOW);
status5=LOW;
if (ant > 0) digitalWrite(ant, HIGH);
}
void loop() {
//waiting for client
lcd.setCursor(0, 0);
lcd.print("IU2JMZ");
delay (1000);
lcd.setCursor(0, 1);
lcd.print("TEST");
delay (1000);
EthernetClient client = server.available();
if ((digitalRead(switch1) == LOW) && (digitalRead(button1) == HIGH)) {
digitalWrite(switch1, HIGH);
delay(1);
}
if ((digitalRead(button1) == LOW)) {
digitalWrite(switch1, LOW);
delay(1);
}
//read the HTML request
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 100) {
readString += c;
}
//generate HTML page
if (c == '\n') {
client.println("<html>");
client.println("<head>");
client.println("<title>Remote Antenna Switch</title>");
client.println("<meta http-equiv=\"refresh\" content=\"5;url=/\">"); //auto refresh every 5 seconds
client.println("</head>");
client.println("<body>");
client.println("<h1>Remote Antenna Switch</h1>");
client.println("<hr style=\"color: blue;\">");
client.println("<b>Switch control</b>");
client.println("<table border=\"1px solid black;\" cellpadding=\"10px;\">");
client.println("<tr><th>Antenna</th><th>Switch</th><th>Status</th></tr>");
client.print("<tr><td>Ant 1</td><td><input type=\"button\" value=\" SET \" onclick=\"location.href='/?b1'\"></td><td");
if (status1) client.print (" bgcolor=\"lime\"");
client.print(">");
//client.print(status1);
client.println("</td></tr>");
client.print("<tr><td>Ant 2</td><td><input type=\"button\" value=\" SET \" onclick=\"location.href='/?b2'\"></td><td");
if (status2) client.print (" bgcolor=\"lime\"");
client.print(">");
//client.print(status2);
client.println("</td></tr>");
client.print("<tr><td>Ant 3</td><td><input type=\"button\" value=\" SET \" onclick=\"location.href='/?b3'\"></td><td");
if (status3) client.print (" bgcolor=\"lime\"");
client.print(">");
//client.print(status3);
client.println("</td></tr>");
client.print("<tr><td>Ant 4</td><td><input type=\"button\" value=\" SET \" onclick=\"location.href='/?b4'\"></td><td");
if (status4) client.print (" bgcolor=\"lime\"");
client.print(">");
//client.print(status4);
client.println("</td></tr>");
client.print("<tr><td>Ant 5</td><td><input type=\"button\" value=\" SET \" onclick=\"location.href='/?b5'\"></td><td");
if (status5) client.print (" bgcolor=\"lime\"");
client.print(">");
//client.print(status5);
client.println("</td></tr>");
client.println("<tr><td>All off</td><td><input type=\"button\" value=\" RESET \" onclick=\"location.href='/?b0'\"></td><td></td></tr>");
client.println("</table>");
client.println("<br/>");
client.println("</body>");
client.println("</html>");
delay(1);
client.stop();
//Read command and change port status
if (readString.indexOf("?b1") > 0){
setports(switch1);
status1 = digitalRead(switch1);
}
if (readString.indexOf("?b2" ) > 0){
setports(switch2);
status2 = digitalRead(switch2);
}
if (readString.indexOf("?b3") > 0){
setports(switch3);
status3 = digitalRead(switch3);
}
if (readString.indexOf("?b4") > 0){
setports(switch4);
status4 = digitalRead(switch4);
}
if (readString.indexOf("?b5") > 0){
setports(switch5);
status5 = digitalRead(switch5);
}
if (readString.indexOf("?b0") > 0) setports(0);
readString="";
}
}
}
}
}