/* CI-V Icom band decode for PTT Language: Wiring/Arduino ON6MH - ON5AV V1.0 05/2020 */ int band; // current band 1 = 2M 2 = 70CM 3 = 23CM // for CI-V decode int inByte = 0; // incoming serial byte int soByte = 0; int deByte = 0; int cmByte = 0; int f1Byte = 0; int f2Byte = 0; int f3Byte = 0; int f4Byte = 0; int f5Byte = 0; int stByte = 0; void setup() { // start serial port at 9600 bps: Serial.begin(9600); //for relais driving pinMode(2, OUTPUT); digitalWrite(2, LOW); // relay 144 pinMode(3, OUTPUT); digitalWrite(3, LOW); // relay 432 pinMode(4, OUTPUT); digitalWrite(4, LOW); // relay 1296 // set band to 0 (unknown) no CI-V decoded yet band = 0; Serial.println("setup completed ......................"); } void loop() { if (Serial.available() > 0) { inByte = Serial.read(); if (inByte == 254) { // see if we have $FE delay(3); // wait 3 ms to be sure next byte arrived inByte = Serial.read(); // read byte if (inByte == 254) { // if is $FE then we get preamble ok delay(3); // wait 3 ms to be sure next byte arrived deByte = Serial.read(); // read destination of message delay(3); soByte = Serial.read(); // read source of message delay(3); cmByte = Serial.read(); // read command if (cmByte == 0 || cmByte == 3 || cmByte == 5) { // $00 $03 $05 = frequency data delay(3); f1Byte = Serial.read(); // read f byte 1 delay(3); f2Byte = Serial.read(); // read f byte 2 delay(3); f3Byte = Serial.read(); // read f byte 3 delay(3); f4Byte = Serial.read(); // read f byte 4 delay(3); f5Byte = Serial.read(); // read f byte 5 delay(3); stByte = Serial.read(); // should be $FD end of message if (stByte == 253) { // stop byte ok switch (f5Byte) { case 0: // 100 Mhz = 0 Serial.println("-------------------Rien"); digitalWrite(2, LOW); // relay 144 digitalWrite(3, LOW); // relay 432 digitalWrite(4, LOW); // relay 1296 break; case 01: // 144 detected Serial.println("-------------------144MHZ"); digitalWrite(2, HIGH); // relay 144 digitalWrite(3, LOW); // relay 432 digitalWrite(4, LOW); // relay 1296 break; case 04: // 432 detected Serial.println("-------------------432MHZ"); digitalWrite(2, LOW); // relay 144 digitalWrite(3, HIGH); // relay 432 digitalWrite(4, LOW); // relay 1296 break; case 18: // 1.296 detected Serial.println("-------------------1296MHZ"); digitalWrite(2, LOW); // relay 144 digitalWrite(3, LOW); // relay 432 digitalWrite(4, HIGH); // relay 1296 break; /* Serial.print("destination: "); //for debug Serial.println(deByte, HEX); Serial.print("source: "); Serial.println(soByte, HEX); Serial.print("command: "); Serial.println(cmByte, HEX); Serial.print("f byte 1: "); Serial.println(f1Byte, HEX); Serial.print("f byte 2: "); Serial.println(f2Byte, HEX); Serial.print("f byte 3: "); Serial.println(f3Byte, HEX); Serial.print("f byte 4: "); Serial.println(f4Byte, HEX); Serial.print("f byte 5: "); Serial.println(f5Byte, HEX); Serial.print("end byte FD: "); Serial.println(stByte, HEX); */ } } } } } } }