You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+46-17Lines changed: 46 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
-
JT65/JT9/JT4/WSPR/FSQ Encoder Library for Arduino
2
-
=============================================
3
-
This library very simply generates a set of channel symbols for JT65, JT9, JT4, or WSPR based on the user providing a properly formatted Type 6 message for JT65, JT9, or JT4 (which is 13 valid characters) or a callsign, Maidenhead grid locator, and power output for WSPR. It will also generate an arbitrary FSQ message of up to 200 characters in both directed and non-directed format. When paired with a synthesizer that can output frequencies in fine, phase-continuous tuning steps (such as the Si5351), then a beacon or telemetry transmitter can be created which can change the transmitted characters as needed from the Arduino.
1
+
JT65/JT9/JT4/FT8/WSPR/FSQ Encoder Library for Arduino
This library very simply generates a set of channel symbols for JT65, JT9, JT4, FT8, or WSPR based on the user providing a properly formatted Type 6 message for JT65, JT9, or JT4 (which is 13 valid characters), Type 0.0 or 0.5 message for FT8 (v2.0.0 protocol) or a callsign, Maidenhead grid locator, and power output for WSPR. It will also generate an arbitrary FSQ message of up to 200 characters in both directed and non-directed format. When paired with a synthesizer that can output frequencies in fine, phase-continuous tuning steps (such as the Si5351), then a beacon or telemetry transmitter can be created which can change the transmitted characters as needed from the Arduino.
4
4
5
5
Please feel free to use the issues feature of GitHub if you run into problems or have suggestions for important features to implement.
6
6
@@ -28,7 +28,7 @@ There is a simple example that is placed in your examples menu under JTEncode. O
28
28
29
29
To run this example, be sure to download the [Si5351Arduino](https://github.com/etherkit/Si5351Arduino) library and follow the instructions there to connect the Si5351A Breakout Board to your Arduino. In order to trigger transmissions, you will also need to connect a momentary pushbutton from pin 12 of the Arduino to ground.
30
30
31
-
The example sketch itself is fairly straightforward. JT65, JT9, JT4, WSPR, and FSQ modes are modulated in same way: phase-continuous multiple-frequency shift keying (MFSK). The message to be transmitted is passed to the JTEncode method corresponding to the desired mode, along with a pointer to an array which holds the returned channel symbols. When the pushbutton is pushed, the sketch then transmits each channel symbol sequentially as an offset from the base frequency given in the sketch define section.
31
+
The example sketch itself is fairly straightforward. JT65, JT9, JT4, FT8, WSPR, and FSQ modes are modulated in same way: phase-continuous multiple-frequency shift keying (MFSK). The message to be transmitted is passed to the JTEncode method corresponding to the desired mode, along with a pointer to an array which holds the returned channel symbols. When the pushbutton is pushed, the sketch then transmits each channel symbol sequentially as an offset from the base frequency given in the sketch define section.
32
32
33
33
An instance of the JTEncode object is created:
34
34
@@ -64,6 +64,12 @@ On sketch startup, the mode parameters are set based on which mode is currently
64
64
tone_spacing = WSPR_TONE_SPACING;
65
65
tone_delay = WSPR_DELAY;
66
66
break;
67
+
case MODE_FT8:
68
+
freq = FT8_DEFAULT_FREQ;
69
+
symbol_count = FT8_SYMBOL_COUNT; // From the library defines
70
+
tone_spacing = FT8_TONE_SPACING;
71
+
tone_delay = FT8_DELAY;
72
+
break;
67
73
case MODE_FSQ_2:
68
74
freq = FSQ_DEFAULT_FREQ;
69
75
tone_spacing = FSQ_TONE_SPACING;
@@ -105,6 +111,9 @@ Before transmit, the proper class method is chosen based on the desired mode, th
105
111
case MODE_WSPR:
106
112
jtencode.wspr_encode(call, loc, dbm, tx_buffer);
107
113
break;
114
+
case MODE_FT8:
115
+
jtencode.ft_encode(message, tx_buffer);
116
+
break;
108
117
case MODE_FSQ_2:
109
118
case MODE_FSQ_3:
110
119
case MODE_FSQ_4_5:
@@ -135,8 +144,8 @@ Public Methods
135
144
* a channel symbol table.
136
145
*
137
146
* message - Plaintext Type 6 message.
138
-
* symbols - Array of channel symbols to transmit retunred by the method.
139
-
* Ensure that you pass a uint8_t array of size JT65_SYMBOL_COUNT to the method.
147
+
* symbols - Array of channel symbols to transmit returned by the method.
148
+
* Ensure that you pass a uint8_t array of at least size JT65_SYMBOL_COUNT to the method.
140
149
*
141
150
*/
142
151
```
@@ -149,8 +158,8 @@ Public Methods
149
158
* a channel symbol table.
150
159
*
151
160
* message - Plaintext Type 6 message.
152
-
* symbols - Array of channel symbols to transmit retunred by the method.
153
-
* Ensure that you pass a uint8_t array of size JT9_SYMBOL_COUNT to the method.
161
+
* symbols - Array of channel symbols to transmit returned by the method.
162
+
* Ensure that you pass a uint8_t array of at least size JT9_SYMBOL_COUNT to the method.
154
163
*
155
164
*/
156
165
```
@@ -164,8 +173,8 @@ Public Methods
164
173
* a channel symbol table.
165
174
*
166
175
* message - Plaintext Type 6 message.
167
-
* symbols - Array of channel symbols to transmit retunred by the method.
168
-
* Ensure that you pass a uint8_t array of size JT9_SYMBOL_COUNT to the method.
176
+
* symbols - Array of channel symbols to transmit returned by the method.
177
+
* Ensure that you pass a uint8_t array of at least size JT9_SYMBOL_COUNT to the method.
169
178
*
170
179
*/
171
180
```
@@ -178,14 +187,30 @@ Public Methods
178
187
* Takes an arbitrary message of up to 13 allowable characters and returns
179
188
*
180
189
* call - Callsign (6 characters maximum).
181
-
* loc - Maidenhead grid locator (4 charcters maximum).
190
+
* loc - Maidenhead grid locator (4 characters maximum).
182
191
* dbm - Output power in dBm.
183
-
* symbols - Array of channel symbols to transmit retunred by the method.
184
-
* Ensure that you pass a uint8_t array of size WSPR_SYMBOL_COUNT to the method.
192
+
* symbols - Array of channel symbols to transmit returned by the method.
193
+
* Ensure that you pass a uint8_t array of at least size WSPR_SYMBOL_COUNT to the method.
Many thanks to Joe Taylor K1JT for his innovative work in amateur radio. We are lucky to have him. The algorithms in this program were derived from the source code in the [WSJT](http://sourceforge.net/projects/wsjt/) suite of applications. Also, many thanks for Andy Talbot G4JNT for [his paper](http://www.g4jnt.com/JTModesBcns.htm) on the WSPR coding protocol, which helped me to understand the WSPR encoding process, which in turn helped me to understand the related JT protocols.
258
+
Many thanks to Joe Taylor K1JT for his innovative work in amateur radio. We are lucky to have him. The algorithms in this program were derived from the source code in the [WSJT-X](https://sourceforge.net/p/wsjt/) suite of applications. Also, many thanks for Andy Talbot G4JNT for [his paper](http://www.g4jnt.com/JTModesBcns.htm) on the WSPR coding protocol, which helped me to understand the WSPR encoding process, which in turn helped me to understand the related JT protocols.
234
259
235
260
Also, a big thank you to Murray Greenman, ZL1BPU for working allowing me to pick his brain regarding his neat new mode FSQ.
236
261
237
262
Changelog
238
263
---------
264
+
* v1.2.0
265
+
266
+
* Add support for FT8 protocol (79 symbol version introduced December 2018)
sentence=Generate JT65, JT9, JT4, WSPR, and FSQ symbols on your Arduino.
6
-
paragraph=This library very simply generates a set of channel symbols for JT65, JT9, JT4, or WSPR based on the user providing a properly formatted Type 6 message for JT65, JT9, or JT4 (which is 13 valid characters) or a callsign, Maidenhead grid locator, and power output for WSPR. It will also generate an arbitrary FSQ message of up to 200 characters in both directed and non-directed format. When paired with a synthesizer that can output frequencies in fine, phase-continuous tuning steps (such as the Si5351), then a beacon or telemetry transmitter can be created which can change the transmitted characters as needed from the Arduino.
5
+
sentence=Generate JT65, JT9, JT4, FT8, WSPR, and FSQ symbols on your Arduino.
6
+
paragraph=This library very simply generates a set of channel symbols for JT65, JT9, JT4, FT8, or WSPR based on the user providing a properly formatted Type 6 message for JT65, JT9, or JT4 (which is 13 valid characters), Type 0.0 or 0.5 message for FT8 (v2.0.0 protocol) or a callsign, Maidenhead grid locator, and power output for WSPR. It will also generate an arbitrary FSQ message of up to 200 characters in both directed and non-directed format. When paired with a synthesizer that can output frequencies in fine, phase-continuous tuning steps (such as the Si5351), then a beacon or telemetry transmitter can be created which can change the transmitted characters as needed from the Arduino.
0 commit comments