Keyboard Shortcuts
ctrl + shift + ? :
Show all keyboard shortcuts
ctrl + g :
Navigate to a group
ctrl + shift + f :
Find
ctrl + / :
Quick actions
esc to dismiss
Likes
- W8bhMorseTutor
- Messages
Search
Re: NTP-Server - location of STL case files
¿ªÔÆÌåÓýHello BillA bit more information about the W8TEE version of the MCT.? Jack (W8TEE) has a groups.io forum called SoftwareControlledHamRadio and located at: /g/SoftwareControlledHamRadio To join send a message to: [email protected] Once you have joined you can check the file section and search for MCT: /g/SoftwareControlledHamRadio/filessearch?p=updated%2C%2C%2C20%2C2%2C20%2C0&q=mct As I recall,? Jack made the MCT open source and the one Hackaday page ( ) I saw when looking for "w8tee morse code tutor" said that W8BH had seen Jack's presentation that Jack did.? I also seem to recall that Jack had the project in his Microcontroller book that ARRL sold at least for a while. Good luck. Jim Pruitt WA7DUY On 2/25/2024 8:23 AM, Bill Gunshannon
wrote:
|
Re: Looking for a PCB
¿ªÔÆÌåÓýBill the Thingiverse description for that box says it is for the W8TEE version of the morse tutor.Good luck. Jim Pruitt WA7DUY On 3/1/2024 6:45 AM, Bill Gunshannon
wrote:
|
Re: laser cut case for esp32 tutor version
Great Case! The more the merrier - here is another:?? Bruce On Fri, Mar 1, 2024 at 5:43?PM Wil <clouserw@...> wrote: I couldn't find a case that fit the esp32 version of the W8BH morse |
Looking for a PCB
I have a nice enclosed version of the w8BH MCT. I also have
2 boards for equivalent MCTs made by other people. But, I also have an enclosure which doesn't take any of these boards. Does anyone know what PCB is needed for this enclosure? It probably seems silly, but I am hoping to have at least one of each of these MCTs if possible. bill |
Re: NTP-Server - location of STL case files
On 2/25/2024 12:13 AM, Mitch W4OA via groups.io wrote:
The link on the W8BH NTP Server tutorial points to Bruce's Thingiverse page. The NTP Server is not listed as a project on the page. Anyone have a link to the STL case files?? I have ordered the pcboards from JLCPCB and would like to get a case printed before the boards arrieve.Is this what you are looking for? It worked fine for mine. If for some reason you can not find/get it I have the files and could send them to you. bill |
Re: NTP-Server - location of STL case files
¿ªÔÆÌåÓýMitch, Send me an email at my qrz page Dean KL7OR On 2/24/2024 9:13 PM, Mitch W4OA via
groups.io wrote:
The link on the W8BH NTP Server tutorial points to Bruce's Thingiverse page. The NTP Server is not listed as a project on the page. Anyone have a link to the STL case files?? I have ordered the pcboards from JLCPCB and would like to get a case printed before the boards arrieve. |
NTP-Server - location of STL case files
The link on the W8BH NTP Server tutorial points to Bruce's Thingiverse page. The NTP Server is not listed as a project on the page. Anyone have a link to the STL case files?? I have ordered the pcboards from JLCPCB and would like to get a case printed before the boards arrieve.
Tnx Mitch W4OA Opelika, AL |
Re: Show my own coding speed on Morse Code Tutor
Hi Vincero,
Nice work!? Someone told me they liked the Morserino's wpm display, so I tried their code, it seems to work reasonably well too, even for shorter words. It calculates a moving average dit length and dah length instraightKeyInput() in the dah-path ? ? ? ? ? avgDahTime = (3* avgDitTime + avgDahTime + timeDown) / 3;
in the dit-path ? ? ? ? ? avgDitTime = (4 * avgDitTime + timeDown) / 5;? ? ?
And then in the CheckSpeedLive it calculates wpm ? wpm = (wpm + (int) (7200 / (avgDahTime + 3*avgDitTime))) / 2;? ? ?//// recalculate speed in wpm
Sorry for the delayed response, but perhaps you'd find this an interesting alternative. 73, Erik - n2epe |
Re: SD Reader Difficulty (MorseTutor, ESP32 version)
I just checked my SD card. It works fine. So, the question I have first is the file name.
I Insert the card first, then turn on the Tutor. Make sure the file names are old school 8.3 filenames. I use a something like testtext.txt; in fact, all the files I have are *.txt. Ask Dann, he is a great fount of information. 73 dit dit |
SD Reader Difficulty (MorseTutor, ESP32 version)
Brand new to the group and have a question after searching previous posts.
I have successfully (I think) assembled Bruce's MorseTutor?(ESP32 version) after receiving the parts kit from Vince and Dan. Everything works great except the SD card option.? I have loaded files onto a couple of different SD cards, and they appear in the file section list (first character dropped in each, however).? I am able to move down the file list as I rotate the encoder.? Upon depressing the rotary encoder to select a file, the program just opts back to the Receive Menu.? Have examined the script and double checked that the libraries are installed in the Arduino IDE.? Everything compiles and uploads without errors. Have checked all pins and solder joints.? Anyone run into this problem? Any suggestion appreciated. Thanks. |
Re: Show my own coding speed on Morse Code Tutor
Hi Bruce,
I have got a new version that seems to work quite well. Please see below. The one line change in?char?straightKeyInput()?should be done also in?char paddleInput() I am not showing it here to avoid unnecessary message lenght. 73, Vincenzo - DL2VC - IZ0RUS void?displayWPM(uint8_t?wpm?=?255)
{
? ? const?int?x=290,y=200;
? ? tft.fillRect(x,y,24,20,BLACK);
? ? tft.setCursor(x,y);
? ? tft.print(wpm ==?255?? codeSpeed : wpm);
}
uint8_t calculateElements(uint8_t c) {
uint8_t weight = 3; // 3 elements at the end of the character is ok the other 4 elements to make 7 are managed in checkSpeedLive() for the space character ' '
while (c > 1) { // stop when value is 1 (or less)
weight += (c & 1) ? 1 + 1 : 3 + 1; // 1 is dit, 0 is dah + 1 extra element spacing
c >>= 1; // rotate bits right
}
return weight;
}
void checkSpeedLive(uint8_t c, int result) {
static long start = millis();
static uint8_t elements = 0;
const uint8_t PARIS = 50; // "PARIS " is composed of 50 elements, see comment in calculateElements()
elements += (result < 0) ? 4 : calculateElements(c); // Result < 0, is an error. 4 is 7 - 3. 7 is the space between words, 3 is already assigned at the end of each character by calculateelements()
if (elements >= PARIS) {
long stop = millis();
long elapsed = stop - start; // see how long it took
start = stop;
int wpm = 60000 / elapsed; // convert elapsed time to WPM
elements = 0;
if (wpm >= MinSpeed && wpm <= MaxSpeed) {
displayWPM(wpm);
}
}
}
char?straightKeyInput()?// decode straight key input
{
? ? int?bit=0, code=0;
? ? bool?keying =?false;
? ? unsigned?long?start,end,timeUp,timeDown,timer;
? ? timer =?millis();?// start character timer ? ? while?(!button_pressed) ? ? {
? ? ? ? if?(ditPressed())?timer =?millis();?// dont count keydown time
? ? ? ? if?(ditPressed()?&&?(!keying))?// new key_down event
? ? ? ? {
? ? ? ? ? ? start =?millis();?// mark time of key down
? ? ? ? ? ? timeUp = start-end;
? ? ? ? ? ? if?(timeUp >?10)?// was key up for 10mS?
? ? ? ? ? ? {
? ? ? ? ? ? ? ? keying =?true;?// mark key as down
? ? ? ? ? ? ? ? keyDown();?// turn on sound & led
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? else?if?(!ditPressed()?&& keying)?// new key_up event
? ? ? ? {
? ? ? ? ? ? end =?millis();?// get time of release
? ? ? ? ? ? timeDown = end-start;?// how long was key down?
? ? ? ? ? ? if?(timeDown >?10)?// was key down for 10mS?
? ? ? ? ? ? {
? ? ? ? ? ? ? ? keying =?false;?// not just noise: mark key as up
? ? ? ? ? ? ? ? keyUp();?// turn off sound & led
? ? ? ? ? ? ? ? if?(timeDown >?2*ditPeriod)?// if longer than 2 dits, call it dah
? ? ? ? ? ? ? ? ? ? bit++;?// dah: add '0' element to code
? ? ? ? ? ? ? ? else?code +=?(1<<bit++);?// dit: add '1' element to code
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? int?wait =?millis()?- timer;?// time since last element was sent
? ? ? ? if?(bit &&?(wait > ditPeriod*2))?// waited for more than 2 dits
? ? ? ? {?// so that must be end of character:
? ? ? ? ? ? code +=?(1<<bit);?// add stop bit
? ? ? ? ? ? int?result =?decode(code);?// look up code in morse array
? ? ? ? ? ? checkSpeedLive(code, result);?// Calculate live RPM ? ? ? ? ? ? if?(result<0)?return?' ';?// oops, didn't find it
? ? ? ? ? ? else?return?'!'+result;?// found it! return result
? ? ? ? }
? ? ? ? if?(wait > ditPeriod*5)?return?' ';?// long pause = word space
? ? }
? ? return?' ';?// return on button press
}
|
Re: Show my own coding speed on Morse Code Tutor
Hi Bruce,
I think I have found a good preliminary solution. Please could you have a look? I did not make a diff but just copying here the 2 functions I changed and the new one that I wrote. A further optimization is probably to remove the management of the character sent from?void?checkSpeedLive(char?c) because it is not necessary. 73, Vincenzo - DL2VC - IZ0RUS void displayWPM(uint8_t wpm = 0)
{
const int x=290,y=200;
tft.fillRect(x,y,24,20,BLACK);
tft.setCursor(x,y);
tft.print(wpm == 0 ? codeSpeed : wpm);
}
void checkSpeedLive(char c)
{
static long start = millis();
static uint8_t i = 0;
static char buffer[5];
i = i % 5;
buffer[i] = c;
if (i++ == 0) {
long elapsed = millis() - start; // see how long it took
start = millis();
int wpm = 60000.0 / elapsed; // convert time to WPM
Serial.printf("c --> %d\n", wpm);
if (wpm <= MAXSPEED && wpm >= MINSPEED) {
displayWPM(wpm);
}
}
}
char straightKeyInput() // decode straight key input
{
int bit=0, code=0;
bool keying = false;
unsigned long start,end,timeUp,timeDown,timer;
timer = millis(); // start character timer
while (!button_pressed)
{
if (ditPressed()) timer = millis(); // dont count keydown time
if (ditPressed() && (!keying)) // new key_down event
{
start = millis(); // mark time of key down
timeUp = start-end;
if (timeUp > 10) // was key up for 10mS?
{
keying = true; // mark key as down
keyDown(); // turn on sound & led
}
}
else if (!ditPressed() && keying) // new key_up event
{
end = millis(); // get time of release
timeDown = end-start; // how long was key down?
if (timeDown > 10) // was key down for 10mS?
{
keying = false; // not just noise: mark key as up
keyUp(); // turn off sound & led
if (timeDown > 2*ditPeriod) // if longer than 2 dits, call it dah
bit++; // dah: add '0' element to code
else code += (1<<bit++); // dit: add '1' element to code
}
}
int wait = millis() - timer; // time since last element was sent
if (bit && (wait > ditPeriod*2)) // waited for more than 2 dits
{ // so that must be end of character:
code += (1<<bit); // add stop bit
int result = decode(code); // look up code in morse array
if (result<0) return ' '; // oops, didn't find it
else {
checkSpeedLive('!'+result);
return '!'+result; // found it! return result
}
}
if (wait > ditPeriod*5) return ' '; // long pause = word space
}
return ' '; // return on button press
}
|
Re: Show my own coding speed on Morse Code Tutor
Hi Vincenzo. Writing code to determine the speed of your fist is... not easy.? ?? If you want to experiment, I suggest looking at the routine called 'checkSpeed'.? ?This routine sends the standard word 'PARIS', then computes the WPM speed based on the number of elements and the elapsed time.? ?Try writing something similar that counts the elements being sent and the time spent sending them.? Let us know how it goes! Bruce On Thu, Sep 21, 2023 at 11:52?AM Vincenzo Capuano <vcapuano@...> wrote: Hi Bruce, |
Show my own coding speed on Morse Code Tutor
Hi Bruce,
I am using the ESP32 Morse Code Tutor and enjoying it. I would like to show on the screen the speed at which I am actually keying with both paddle and straight key. I think I should add some code in?straightKeyInput() and in?paddleInput(). Could you please give me some hints so I can more easily add it to the code? Thanks 73 Vincenzo - DL2VC - IZ0RUS |
Re: ntp_server.ino Sketch
Great job, Ross.? ?I am glad to hear it is working. Yes, Pin 3 is the time pulse signal (1PPS).? See page 12 of? I will upload the final sketch soon and post it here. Bruce On Wed, Jul 19, 2023 at 4:05?PM Ross Kay <rossakay@...> wrote: Hi Bruce |
to navigate to use esc to dismiss