├── pcb.png
├── FT817.zip
├── cable.jpg
├── FT817-ACC.png
├── schematic.png
├── IMG_20200801_121522.jpg
├── README.md
└── FT817-SAT.ino
/pcb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ok1cdj/FT817-satmode/HEAD/pcb.png
--------------------------------------------------------------------------------
/FT817.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ok1cdj/FT817-satmode/HEAD/FT817.zip
--------------------------------------------------------------------------------
/cable.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ok1cdj/FT817-satmode/HEAD/cable.jpg
--------------------------------------------------------------------------------
/FT817-ACC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ok1cdj/FT817-satmode/HEAD/FT817-ACC.png
--------------------------------------------------------------------------------
/schematic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ok1cdj/FT817-satmode/HEAD/schematic.png
--------------------------------------------------------------------------------
/IMG_20200801_121522.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ok1cdj/FT817-satmode/HEAD/IMG_20200801_121522.jpg
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FT817-satmode
2 | SAT mode emulation for 2x FT817 and Arduino NANO
3 |
4 | Uses modified FT817 CAT library
5 |
6 | 2 SW serials are set to 9600, HW serial is free for easy debug
7 |
8 | Short press off button enable / disable tracking
9 |
10 | Long press invert mode
11 |
12 | Master radio - 2 RX, 3 TX
13 |
14 | Slave radio - 4 RX, 5 TX
15 |
16 | Button is connected to PIN 6
17 |
18 | Piezo speaker is connected to PIN 9
19 |
20 |
21 |
22 | **KIT is available here:** https://www.hamshop.cz/radio-accessories-c25/ft817-ft818-dual-tune-i393/
23 |
24 |
25 |
26 | **Building instructions:** https://github.com/ok1cdj/FT817-satmode/wiki
27 |
28 |
29 | 
30 |
--------------------------------------------------------------------------------
/FT817-SAT.ino:
--------------------------------------------------------------------------------
1 | /* SAT mode emulation for 2x FT817 and Arduino NANO
2 | *
3 | * by OK1CDJ v 0.1 2020
4 | *
5 | * Uses FT817 CAT library
6 | * 2 SW serials are set to 9600, HW serial is free for easy debug
7 | * Short press off button enable / disable tracking,
8 | * Long press invert mode
9 | *
10 | * Master radio - 2 RX, 3 TX
11 | * Slave radio - 4 RX, 5 TX
12 | * Button is connected to PIN 6
13 | * Piezo speaker is connected to PIN 9
14 |
15 | This program is free software: you can redistribute it and/or modify
16 | it under the terms of the GNU General Public License as published by
17 | the Free Software Foundation, either version 2 of the License, or
18 | (at your option) any later version.
19 | This program is distributed in the hope that it will be useful,
20 | but WITHOUT ANY WARRANTY; without even the implied warranty of
21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 | GNU General Public License for more details.
23 | You should have received a copy of the GNU General Public License
24 | along with this program. If not, see .
25 | */
26 |
27 | #define SER // SW serial
28 |
29 | /*************************************************************************************************/
30 | /* Configure the FT 817 stuff */
31 | #include
32 | #define INIT_WAIT_TIME 1000
33 | long freq;
34 |
35 | SoftwareSerial mySerial(2, 3); // RX, TX master radio connected here
36 | SoftwareSerial mySerial2(4, 5); // RX, TX slave radio connected here
37 |
38 | #define FT817_SPEED 9600
39 |
40 | #define SMETER_LEN 4
41 | #define MODE_LEN 5
42 |
43 | #define LED 13
44 | #define BUTTON 6
45 | #define BUZZER 9
46 |
47 | #define PRESSED LOW
48 | #define NOT_PRESSED HIGH
49 |
50 | const unsigned long shortPress = 100;
51 | const unsigned long longPress = 300;
52 |
53 | long freq_master_old = 0;
54 | long freq_slave_diff = 0;
55 | long freq_slave = 0;
56 | int active = 0;
57 | int inverted = 1;
58 |
59 | typedef struct
60 | {
61 | // current status
62 | long freq;
63 | char mode[MODE_LEN];
64 | char smeter[SMETER_LEN];
65 | byte smeterbyte;
66 | }
67 | t_status;
68 | t_status rig_master;
69 | t_status rig_slave;
70 |
71 | typedef struct Buttons {
72 | const byte pin = BUTTON;
73 | const int debounce = 10;
74 |
75 | unsigned long counter = 0;
76 | bool prevState = NOT_PRESSED;
77 | bool currentState;
78 | } Button;
79 |
80 | // create a Button variable
81 | Button button;
82 |
83 | FT817 ft817_master(&mySerial);
84 | FT817 ft817_slave(&mySerial2);
85 |
86 | void initialize_ft817 ()
87 | {
88 | Serial.println("Init FT817 Master");
89 | ft817_master.begin(FT817_SPEED);
90 | delay(INIT_WAIT_TIME);
91 | Serial.println("Init FT817 Slave");
92 | ft817_slave.begin(FT817_SPEED);
93 | delay(INIT_WAIT_TIME);
94 |
95 | }
96 |
97 |
98 |
99 | /*************************************************************************************************/
100 | void read_rig_master ()
101 | {
102 | rig_master.freq = ft817_master.getFreqMode(rig_master.mode);
103 | Serial.print("FRQ master:");
104 | Serial.print(rig_master.freq);
105 | Serial.print(" ");
106 | Serial.println(rig_master.mode);
107 | }
108 |
109 | void read_rig_slave ()
110 | {
111 | rig_slave.freq = ft817_slave.getFreqMode(rig_slave.mode);
112 | Serial.print("FRQ slave:");
113 | Serial.print(rig_slave.freq);
114 | Serial.print(" ");
115 | Serial.println(rig_slave.mode);
116 | freq_slave = rig_slave.freq;
117 | }
118 |
119 |
120 | /*************************************************************************************************/
121 | // Global Setup Routing
122 | void setup ()
123 | {
124 | pinMode(button.pin, INPUT_PULLUP);
125 | pinMode(LED, OUTPUT);
126 | tone(BUZZER, 650, 100);
127 | Serial.begin(9600);
128 | pinMode(LED, OUTPUT);
129 | initialize_ft817();
130 | read_rig_slave ();
131 | delay(100);
132 | read_rig_master();
133 |
134 | }
135 |
136 | /*************************************************************************************************/
137 | // Main loop
138 | void loop ()
139 | {
140 | button.currentState = digitalRead(button.pin);
141 |
142 | // has it changed?
143 | if (button.currentState != button.prevState) {
144 | delay(button.debounce);
145 | // update status in case of bounce
146 | button.currentState = digitalRead(button.pin);
147 | if (button.currentState == PRESSED) {
148 | // a new press event occured
149 | // record when button went down
150 | button.counter = millis();
151 | }
152 |
153 | if (button.currentState == NOT_PRESSED) {
154 | // but no longer pressed, how long was it down?
155 | unsigned long currentMillis = millis();
156 | if ((currentMillis - button.counter >= shortPress) && !(currentMillis - button.counter >= longPress)) {
157 | // short press detected - activate tracking
158 | tone(BUZZER, 650, 50);
159 | delay(50);
160 | if (active)
161 | {
162 | active = 0;
163 | digitalWrite(LED,LOW);
164 | } else {
165 | active = 1;
166 | digitalWrite(LED,HIGH);
167 | }
168 | read_rig_slave ();
169 | read_rig_master();
170 |
171 | }
172 | if ((currentMillis - button.counter >= longPress)) {
173 | // the long press was detected
174 | tone(BUZZER, 650, 50);
175 | delay(100);
176 | tone(BUZZER, 650, 50);
177 | delay(50);
178 | if (inverted==1) inverted = -1; else inverted = 1;
179 | read_rig_slave ();
180 | read_rig_master();
181 | }
182 | }
183 | // used to detect when state changes
184 | button.prevState = button.currentState;
185 | }
186 | if (active) {
187 | freq_master_old = rig_master.freq;
188 | read_rig_master();
189 | freq_slave_diff = rig_master.freq - freq_master_old;
190 | Serial.print("Diff: ");
191 | Serial.println(freq_slave_diff);
192 | if (freq_slave_diff != 0) {
193 | Serial.print("FRQ slave:");
194 | Serial.println(freq_slave);
195 | freq_slave = freq_slave + freq_slave_diff * inverted;
196 | ft817_slave.setFreq(freq_slave);
197 | }
198 | delay(100);
199 | }
200 | }
201 |
202 |
--------------------------------------------------------------------------------