// 06 Avril 2013 v4 // F6EHP : REMOTE CONTROL FOR a WB6DHW BPF + a manual 6xLPF from K5OOR motorized with a Digital SERVOMOTOR // HARDWARE :ARDUINO ETHERNET card & Tower Pro MG946R servo // Power supply : TAKE CARE : the servomotor is hungry and needs a 5/6V external source - or, usb+arduino external PS // each LPF filter position is 30deg from the next - servo steps must be modulo 30, with line 9 // BPF is controlled with S0,S1,S2 digit lines 6,7,8 // Antenna Switch Controller - 10W HF PA, VHF=2m, 6m , HF1, HF2 ( which drives Power supply Switch for 2m & 6m Transverters) with S3,S4,S5,S6,S7 digit lines 1,2,3,4,5 // 2m transverter needs a 20m HF exciter // 6m transverter needs a 10m HF exciter // default setting is 20m LPF, SlaveRX BPF, 10W PA OFF , HF1 ON, other OFF // pins 0 & 1 do not work as output ? #include #include #include byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x94, 0x7C }; IPAddress ip(192,0,0,49); EthernetServer server(4900); String readString = String(30); //string for fetching data from address String LPFtx = ""; // Low pass Filter for TXing status flag String LASTLPFtx = ""; // last LPF status flag String BPFrx = ""; //Band pass Filter for RX status flag String LASTBPFrx = ""; // last BPF status flag String ANT = ""; // Antenna flag Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 0; // variable to store the servo position const int s0 = 6; // Output pin connected to S0 WB6HDW control pin const int s1 = 7; // Output pin connected to S1 WB6HDW control pin const int s2 = 8; // Output pin connected to S2 WB6HDW control pin const int s3 = 10; // Output pin connected to control pin 1 on Antenna Switch for 10W HF PA const int s4 = 2; // Output pin connected to control pin 2 on Antenna Switch for VHF=2m const int s5 = 3; // Output pin connected to control pin 3 on Antenna Switch for 6m const int s6 = 4; // Output pin connected to control pin 4 on Antenna Switch for HF1 const int s7 = 5; // Output pin connected to control pin 5 on Antenna Switch for HF2 void setup() { // Open communications and wait for port to open: // start the Ethernet connection and the server: Ethernet.begin(mac, ip); server.begin(); Serial.begin(9600); myservo.attach(9); // attaches the servo on pin 9 to the servo object myservo.write(100); // init to 20m BPF as 90 is between 2 positions pinMode(s0, OUTPUT) ; // select pin as output pinMode(s1, OUTPUT) ; pinMode(s2, OUTPUT) ; pinMode(s3, OUTPUT) ; pinMode(s4, OUTPUT) ; pinMode(s5, OUTPUT) ; pinMode(s6, OUTPUT) ; pinMode(s7, OUTPUT) ; digitalWrite(s0, HIGH); // switch off the BPF (SlaveRX) digitalWrite(s1, HIGH); digitalWrite(s2, LOW); digitalWrite(s3, LOW); // set 10W PA OFF digitalWrite(s4, LOW); // set VHF OFF digitalWrite(s5, LOW); // set 6m OFF digitalWrite(s6, HIGH); // set HF1 ON digitalWrite(s7, LOW); // set HF2 OFF } void loop(){ // Create a client connection EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); //read char by char HTTP request if (readString.length() < 30) { //store characters to string readString+=c; } //output chars to serial port Serial.print(c); //if HTTP request has ended if (c == '\n') { //lets check if Filters should be switched if(readString.indexOf("L=160m") >=0) { LPFtx = "unused"; BPFrx = "0"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=80m") >=0) { LPFtx = "80m"; BPFrx = "1"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=60m") >=0) { LPFtx = "60m"; BPFrx = "5"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=40m") >=0) { LPFtx = "40m"; BPFrx = "5"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=30m") >=0) { LPFtx = "30m"; BPFrx = "5"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=20m") >=0) { LPFtx = "20m"; BPFrx = "6"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=17m") >=0) { LPFtx = "17m"; BPFrx = "6"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=15m") >=0) { LPFtx = "15m"; BPFrx = "7"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=12m") >=0) { LPFtx = "12m"; BPFrx = "7"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=10m") >=0) { LPFtx = "10m"; BPFrx = "7"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=VHF") >=0) { LPFtx = "VHF"; BPFrx = "7"; digitalWrite(s3, LOW); digitalWrite(s4, HIGH); digitalWrite(s5, LOW); digitalWrite(s6, LOW); digitalWrite(s7, LOW); } // set 10W PA & HF1 OFF, VHF ON else if(readString.indexOf("L=6m") >=0) { LPFtx = "6m"; BPFrx = "6"; digitalWrite(s3, LOW); digitalWrite(s4, LOW); digitalWrite(s5, HIGH); digitalWrite(s6, LOW); digitalWrite(s7, LOW); } // set 10W PA & HF1 OFF, 6m ON else if(readString.indexOf("L=antHF1") >=0) { ANT = "ant_HF_1"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON else if(readString.indexOf("L=antHF2") >=0) { ANT = "ant_HF_2"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, LOW); digitalWrite(s7, HIGH); } // set 10W PA & HF2 ON else if(readString.indexOf("slaveRX") >=0) { LPFtx = "slave RX"; BPFrx = "3"; digitalWrite(s3, HIGH); digitalWrite(s4, LOW); digitalWrite(s5, LOW); digitalWrite(s6, HIGH); digitalWrite(s7, LOW); } // set 10W PA & HF1 ON, VHF & 6m OFF NO INPUT FILTER for slave RX use only else { LPFtx = "as for last use";} // now output HTML data starting with standart header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); //send first heading client.println("BPF & LPF web control for the Remote Softrock 6.3"); client.println("
"); client.print(" - Band in use: "); client.println(""+LPFtx); //client.println("

");//some space between lines //controlling led via checkbox //client.println("

BAND SELECT

"); // client.println("
antHF1antHF2 - VHF6m
slaveRX
160m 80m 40m
30m 20m 17m
15m 12m 10m
"); client.println("K5OOR LowPassFilters and WB6DHW BandPassFilters v4"); //client.println("
"); client.println(""); //clearing string for next read readString=""; //stopping client client.stop(); } } } } // LPF K5OOR control with a servomotor if (LPFtx != LASTLPFtx) { if(LPFtx=="unused") {pos=40;} // the MG946 cannot go down to 10 ! 160m is not used else if (LPFtx == "80m") {pos=40;} else if (LPFtx == "60m" || LPFtx == "40m") {pos=70;} else if (LPFtx == "30m" || LPFtx == "20m") {pos=100;} else if (LPFtx == "17m" || LPFtx == "15m") {pos=130;} else if (LPFtx == "12m" || LPFtx == "10m") {pos=160;} else if (LPFtx == "VHF") {pos=160;} // VHF supposed to be with a 10m exciter else if (LPFtx == "6m") {pos=100;} // 6m supposed to be with a 20m exciter // Serial.print(pos); // delay (1000); myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position LASTLPFtx = LPFtx; } // set memory flag // BPF filter WB6DHW control if (BPFrx != LASTBPFrx) { if ( BPFrx == "0") { digitalWrite(s0, LOW); // 160m digitalWrite(s1, LOW); digitalWrite(s2, LOW); } else if ( BPFrx == "1") { digitalWrite(s0, HIGH); // 80m digitalWrite(s1, LOW); digitalWrite(s2, LOW); } else if ( BPFrx == "2") { digitalWrite(s0, LOW); // 60m digitalWrite(s1, HIGH); digitalWrite(s2, LOW); } else if ( BPFrx == "3") { digitalWrite(s0, HIGH); // no filter for RX slave digitalWrite(s1, HIGH); digitalWrite(s2, LOW); } else if ( BPFrx == "5") { digitalWrite(s0, HIGH); // 30m & 40m digitalWrite(s1, LOW); digitalWrite(s2, HIGH); } else if ( BPFrx == "6") { digitalWrite(s0, LOW); // 17m & 20m digitalWrite(s1, HIGH); digitalWrite(s2, HIGH); } else if ( BPFrx == "7") { digitalWrite(s0, HIGH); // 15m & 12m & 10m & VHF digitalWrite(s1, HIGH); digitalWrite(s2, HIGH); } LASTBPFrx = BPFrx; } // set memory flag } // end