{"id":15012017,"url":"https://github.com/boomerwing/morsecode-raspberrypi-pico","last_synced_at":"2026-03-05T01:31:10.346Z","repository":{"id":218445257,"uuid":"528589680","full_name":"boomerwing/MorseCode-Raspberrypi-PICO","owner":"boomerwing","description":"Raspberry Pi PICO and FreeRTOS. Most projects send Morse Code (CW) training text (both plain text and random characters) using FreeRTOS.","archived":false,"fork":false,"pushed_at":"2025-01-25T00:28:54.000Z","size":1461,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-25T01:17:41.139Z","etag":null,"topics":["amateur-radio","c","cw","freertos","morse","pi","pio","ps2-keyboard","raspberry-pi-pico","rp2040","shuffle"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/boomerwing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-24T20:48:54.000Z","updated_at":"2025-01-25T00:28:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"22ac6ac6-57f3-4a0c-853a-a944d134dc7f","html_url":"https://github.com/boomerwing/MorseCode-Raspberrypi-PICO","commit_stats":{"total_commits":54,"total_committers":1,"mean_commits":54.0,"dds":0.0,"last_synced_commit":"e906c7f992f91dbd725acb3912c9d69995265034"},"previous_names":["boomerwing/morsecode-raspberrypi-pico"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boomerwing%2FMorseCode-Raspberrypi-PICO","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boomerwing%2FMorseCode-Raspberrypi-PICO/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boomerwing%2FMorseCode-Raspberrypi-PICO/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boomerwing%2FMorseCode-Raspberrypi-PICO/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/boomerwing","download_url":"https://codeload.github.com/boomerwing/MorseCode-Raspberrypi-PICO/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235775545,"owners_count":19043180,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amateur-radio","c","cw","freertos","morse","pi","pio","ps2-keyboard","raspberry-pi-pico","rp2040","shuffle"],"created_at":"2024-09-24T19:42:00.671Z","updated_at":"2025-10-06T14:13:18.952Z","avatar_url":"https://github.com/boomerwing.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RP2040-FreeRTOS try 1.0.0\n\nThis repo contains my base project for [FreeRTOS](https://freertos.org/) on the Raspberry Pi RP2040 microcontroller\n\n## Project Structure\n\n```\n/FreeRTOS-PICO\n|___/App-CWKeyer            // Source code for App-CWKeyer\n\n|___/App-CWTeach            // Source code for App-CWKeyer\n\n|___/App-Keyer              // Source code for App-Keyer\n\n|___/App-Shuffle            // Source code for App-Shuffle\n\n|___/App-SW-i2c             // Source code for App-SW-i2c\n\n|___/App-TxtCtl             // Source code for App-TxtCtl\n\n|___/App-CWShuffle          // Source code for App-CWShuffle\n\n|___/Common                 // Source code common to applications - pico\n||\n|___CMakeLists.txt          // Top-level project CMake config file\n|___pico_sdk_import.cmake   // Raspberry Pi Pico SDK CMake import script\n|\n|___README.md\n|___LICENSE.md\n```\n\n## Prerequisites\n\nTo use the code in this repo, your system must be set up for RP2040 C/C++ and FreeRTOS development. See [this blog post of \"smittytone\"](https://blog.smittytone.net/2021/02/02/program-raspberry-pi-pico-c-mac/) for setup details.\n\n## Usage\n\n1. Clone the repo: `git clone https://github.com/smittytone/RP2040-FreeRTOS`.\n1. Enter the repo: `cd FreeRTOS-PICO`.\n1. Install the submodules: `git submodule update --init --recursive`.\n1. Edit `CMakeLists.txt` and `/\u003cApplication\u003e/CMakeLists.txt` to rename the project.\n1. Optionally, manually configure the build process: `cmake -S . -B build/`.\n1. Optionally, manually build the app: `cmake --build build`.\n1. Connect your device so it’s ready for file transfer.\n1. Install the app (I use the Drag and Drop process described in the pico-sdk documentation)\n\n## The Apps\n\nThis repo includes a number of deployable apps.\n\n### App-Keyer\n\nThis C app is a Morse Code CW Keyer used by Radio Amateurs to automatically transmit a repeated message in Morse Code. A number of messages can be stored and selected by switches.  The code shows three switches to select up to eight messages. A Seven Segment LED module shows the message number and two LED dots blink in response to the morse code being sent.\n\n### App-Shuffle\n\nThis C app is a programming exercise to create a shuffle function. It can be set to shuffle any length character string (as shown it shuffles a complete Alphabet). It is controlled by one switch which is debounced in a separate RTOS task (This task debounces eight switches attached to a PCF8575 GPIO extender and distributes the output through Queues. The Shuffle output is displayed in the Minicom terminal App which is controlled by VT100 codes. The display shows how to use the switches to command the function. As well there is a Blink task to blink the Pico LED and two other LEDs as an exercise with tasks.  The Blink task outputs the blink state into a Queue which does not empty so any task can look in the Queue to get a Blink command for its own use.\n\n### App-TxtCtl\n\nThis FreeRTOS C app is a programming exercise to create a Control function responding to text input from a PS2 Keyboard. An RTOS task reads the Keyboard with the RP2040 pio function in Common/PS2.c It commands LEDs in a seven segment display to blink.  The Keyboard code is Based on [PS2Keyboard](https://github.com/PaulStoffregen/PS2Keyboard)\n\n\n### App-CWKeyer\n\nThis FreeRTOS C app is a Morse Code CW Keyer used by Radio Amateurs to automatically transmit a repeated message in Morse Code. A number of messages can be stored and selected by switches.  The code shows three switches to select up to eight messages. A Seven Segment LED module shows the message number. An LED blinks in response to the morse code being sent. This version of App-Keyer adds PS2 Keyboard input of a Message String in phrase No. 7. Enter the string while strings 0-6 are being output. The PS2 Keyboard is being managed by a PIO input.\n\n### App-CWTeach\n\nThis FreeRTOS C app is a Morse Code CW Keyer used by Radio Amateurs to automatically transmit a repeated message in Morse Code. There are 30 strings making up one long message.  This program sends the long message as a Morse Code message for teaching purposes.  The audio tone in created by a PIO output which is fed into an external gate which switches the tone off and on as the code output GPIO drives it.  There is a graphic to describe the two transistor gate.\n\n### App-CWShuffle\n\nThis FreeRTOS C app is a Morse Code CW Keyer used by Radio Amateurs to automatically transmit a repeated message in Morse Code. A number of messages can be stored and selected by switches.  The code shows a select phrase task to select up to seven messages. A Seven Segment LED module shows the active message number. An LED blinks and an audio tone sounds in response to the morse code being sent. This version of App-Keyer adds a task to Shuffle the Message String selected before sending it to the CW generating task.  To initialize the randomize process, two presses of a switch sets the initial random number. A new randomized string is selected by the phrase select task. The PS2 Keyboard is not implemented for this app. The strings are Hard coded in the Shuffle task. A PIO function is used to generate a 600 Hz square wave as a tone oscillator. A discrete component NAND gate is given inputs from the Tone output GPIO and the CW code GPIO output.  The Code signal gates the square wave tone to output the audio Morse signal.  The blink.pio code is taken directly from SDK pico-examples/pio/pio-blink.  \n\n### App-SWi2c\nThis code makes a number of exercises with the i2c GPIO extender with switches attached. It debounces the switch and makes toggle and On/Off functions.\n\n### Common: Seven_seg.c\nThis code configures the Seven Segment LED module and displays the number (HEX or Decimal) sent to it by a Raspberry Pi PICO .  My LED Module has two dots.  If your module has no dots or just one, you can use separate LEDs. Uses the pcf8575 i2c GPIO Extender\n\n### Common: ps2.c\nThis code initializes, then manages the PS2 Keyboard input, decoding the keyboard scan codes and providing an ASCII character output.  This code can be called by an RTOS task. This code is Based on [PS2Keyboard](https://github.com/PaulStoffregen/PS2Keyboard)\n\n\n### Common: pcf8575.c\nThis code initializes, then manages the pcf8575 port extender, driving the seven segment LED and providing input ports.\n\n\n## Credits\n\nThis work has as its foundation the code provided by [smittytone/RP2040-FreeRTOS project](https://github.com/smittytone/RP2040-FreeRTOS).\n\n\n## Copyright and Licences\n\nApplication source © 2022, Calvin McCarthy and licensed under the terms of the [MIT Licence](./LICENSE.md).\n\nApplication source © 2022, Tony Smith and licensed under the terms of the [MIT Licence](./LICENSE.md).\n\n[FreeRTOS](https://freertos.org/) © 2021, Amazon Web Services, Inc. It is also licensed under the terms of the [MIT Licence](./LICENSE.md).\n\nThe [Raspberry Pi Pico SDK](https://github.com/raspberrypi/pico-sdk) is © 2020, Raspberry Pi (Trading) Ltd. It is licensed under the terms of the [BSD 3-Clause \"New\" or \"Revised\" Licence](https://github.com/raspberrypi/pico-sdk/blob/master/LICENSE.TXT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboomerwing%2Fmorsecode-raspberrypi-pico","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fboomerwing%2Fmorsecode-raspberrypi-pico","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboomerwing%2Fmorsecode-raspberrypi-pico/lists"}