// 04/01/23 - upgraded sketch that drives Al Wards 47 GHz WR28 waveguide switch // sketch now uses stored EEPROM values at startup // the EEPROM values should be initialized through a calibrarion run #include #include Servo myservo; int rxlimitPin = 0; // analog pin used to connect the potentiometer int txlimitPin = 1; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin int gotopos; // position to go to int servo_wait = 100; const int PTTbuttonpin = 11; const int CALbuttonpin = 12; const int RXledPIN = 10; const int TXledPIN = 9; const int CALledPIN = 8; int PTTbutton_state=0; int CalLEDState=0; int Calbutton_new; int Calbutton_old=1; //cause flip-flop on startup (cal is toggled off by cal logic in loop) int value; void setup() { // myservo.attach(7); // jrm01 pinMode(PTTbuttonpin, INPUT); pinMode(CALbuttonpin, INPUT); pinMode(RXledPIN, OUTPUT); pinMode(TXledPIN, OUTPUT); pinMode(CALledPIN, OUTPUT); Serial.begin(9600); //TXval = analogRead(txlimitPin); // reads the pot (value between 0 and 1023) //Serial.println("INIT 1. TXval from analog read= "); //Serial.println(TXval); //RXval = analogRead(rxlimitPin); //Serial.println("INIT 2. RXval from analog read= "); //Serial.println(RXval); PTTbutton_state = digitalRead(PTTbuttonpin); if(PTTbutton_state == HIGH){ // the PTT button is in up state (not pressed) and reads HIGH on the PTTbutton_state Serial.println("PTT - HIGH");} if(PTTbutton_state == LOW){ Serial.println("PTT - LOW");} } void loop() { int TXval; // variable to read the value from the analog pin int RXval; // variable to read the value from the analog pin // read switches PTTbutton_state = digitalRead(PTTbuttonpin); Serial.print("PTT= "); Serial.println(PTTbutton_state); value=EEPROM.read(1); Serial.print("EEPROM TXval= "); Serial.println(value); TXval=value * 4; //assign it value=EEPROM.read(2); Serial.print("EEPROM RXval= "); Serial.println(value); RXval=value * 4; // assign it if (CalLEDState==1) { //it's in calibration state TXval = analogRead(txlimitPin); RXval = analogRead(rxlimitPin); } if(PTTbutton_state == LOW){ // button pressed TRANSMIT mode digitalWrite(TXledPIN,HIGH); digitalWrite(RXledPIN,LOW); Serial.print("TXVal= "); Serial.println(TXval); val = map(TXval, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180) myservo.attach(7); //jrm01 myservo.write(val); // sets the servo position according to the scaled value delay(servo_wait); // waits for the servo to get there myservo.detach(); //jrm01 } if(PTTbutton_state == HIGH){ // button not pressed RECEIVE mode digitalWrite(RXledPIN,HIGH); digitalWrite(TXledPIN,LOW); Serial.print("RXVal= "); Serial.println(RXval); val = map(RXval, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180) myservo.attach(7); // jrm01 myservo.write(val); // sets the servo position according to the scaled value delay(servo_wait); // waits for the servo to get there myservo.detach(); // jrm01 } //Serial.println('check CALbutton_state'); Calbutton_new = digitalRead(CALbuttonpin); if(Calbutton_old==0 && Calbutton_new==1){ if (CalLEDState==0){ digitalWrite(CALledPIN,HIGH); CalLEDState=1; } else{ int TXvalue=analogRead(txlimitPin); int RXvalue=analogRead(rxlimitPin); digitalWrite(CALledPIN, LOW); // write value EEPROM.update(1,TXvalue/4); EEPROM.update(2,RXvalue/4); value=EEPROM.read(1); Serial.print("EEPROM calibrated TXvalue= "); Serial.println(value); Serial.print("EEPROM written TXvalue= "); Serial.println(TXvalue); value=EEPROM.read(2); Serial.print("EEPROM calibrated RXvalue= "); Serial.println(value); Serial.print("EEPROM written RXvalue= "); Serial.println(RXvalue); CalLEDState=0; } } Calbutton_old=Calbutton_new; delay(servo_wait); }