{"id":21906558,"url":"https://github.com/osresearch/rotary","last_synced_at":"2025-04-16T00:16:40.921Z","repository":{"id":151576634,"uuid":"83933464","full_name":"osresearch/rotary","owner":"osresearch","description":"Rotary phone interface for the Adafruit FONA boards","archived":false,"fork":false,"pushed_at":"2017-03-18T21:31:02.000Z","size":90,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-16T00:16:37.627Z","etag":null,"topics":["adafruit","arduino","electronics","fona","gsm","phone","retrocomputing","teensy"],"latest_commit_sha":null,"homepage":null,"language":"Eagle","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/osresearch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2017-03-05T00:12:43.000Z","updated_at":"2024-01-17T00:31:07.000Z","dependencies_parsed_at":"2023-07-17T17:51:29.532Z","dependency_job_id":null,"html_url":"https://github.com/osresearch/rotary","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osresearch%2Frotary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osresearch%2Frotary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osresearch%2Frotary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osresearch%2Frotary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osresearch","download_url":"https://codeload.github.com/osresearch/rotary/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249173094,"owners_count":21224484,"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":["adafruit","arduino","electronics","fona","gsm","phone","retrocomputing","teensy"],"created_at":"2024-11-28T16:52:40.706Z","updated_at":"2025-04-16T00:16:40.915Z","avatar_url":"https://github.com/osresearch.png","language":"Eagle","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Outbound call state machine](https://farm4.staticflickr.com/3694/32869954060_f3c01daa31_z_d.jpg)\n\nThis is an extension on Adafruit's [`FONAtest.ino`](https://github.com/adafruit/Adafruit_FONA/blob/master/examples/FONAtest/FONAtest.ino)\nexample code to allow it to be used with a rotary phone.  The Teensy\n2.0 decodes the pulses and implements the state machine to allow you to\nplace outbound phone calls.  In-bound calls are working and can activate\nthe ringer when on USB power, but the boost converter circuit is a work\nin progress.\n\nThe dialtone is generated by the FONA and under control of the teensy,\nbut ringing and dialing is done by the cell network.  There is not a\nproper \"off hook\" tone in the FONA, so the closest version was used.\n\nSince the entire phone number must be passed to the `ATDT` command\nstring, the system must try to detect when the user is done dialing.\nThere is currently a multi-second delay after the last number.\n\nDuring a call pulses will be translated to DTMF, but the user will\nnot hear them on the handset.  There is also no comfort tone, which\nmakes using the phone feel \"dead\".\n\n\nWiring\n===\n![Inside the phone](https://farm3.staticflickr.com/2808/32833764510_fcd14da721_z_d.jpg)\n\n* Teensy Gnd -\u003e FONA Ground, FONA Key, Phone F (blue?)\n* Teensy Vcc -\u003e FONA Vio\n* Teensy Pin 0 -\u003e FONA Reset\n* Teensy Pin 1 -\u003e Phone RR (green on the dial), rotary dial\n* Teensy Pin 2 -\u003e Phone L1 (RJ45 green), hook relay\n* Teensy Pin 6 -\u003e FONA Ring indicator\n* Teensy Pin 7 -\u003e FONA RX\n* Teensy Pin 8 -\u003e FONA TX\n* Teensy Pin 9 -\u003e boost converter pwm\n* Teensy Pin A0 -\u003e boost converter voltge divider\n\nThe boost converter circuit needs to be drawn.\n\nNote the [FONA 32u4 pinout](https://learn.adafruit.com/adafruit-feather-32u4-fona/pinouts) is a bit different:\n\n* GPIO 8 -\u003e FONA TXD (Soft Serial)\n* GPIO 9 -\u003e FONA RXD (Soft Serial)\n* GPIO 7 -\u003e FONA Ring Indicator\n* GPIO 4 -\u003e FONA Reset\n\nTodo\n===\n![Dialup internet](https://farm4.staticflickr.com/3845/32372052844_b7e6990ddc_z_d.jpg)\n\n* Redial support.\n* ~~Incoming call state machine~~ - Done. Incoming calls works (although they play a tone in the speaker)\n* ~~Disable headset ring tone.~~ - WONTFIX, since the bell overpowers it quite easily.\n* Ringer driver circuit. Looks like 15V will engage the bell solenoid, so a simple charge pump and low frequency PWM should do it. -- Almost done, need to find parameters to work with 3.7V LiPo.\n* ~~PCB design to mount FONA, Teensy and wire headers for the phone connections. -- Started in `pcb/rotaryfona.sch`, but no where near ready.~~ On hold since the FONA 32u4 has a MCU built in.\n* Package everything to fit into the phone.\n* Buy a red phone, cut a hole for USB charging cable.\n* Teensy powered from the battery?  Battery switch?\n* Figure out why 300 baud isn't working with the FONA as well as it did with my cellphone.\n* Text to speech for SMS received - only supported in the 800H, not the 800L.\n\nState Machine\n==\n![Rotary Phone State Machine](https://rawgithub.com/osresearch/rotary/master/states.svg)\n\nThe rotary phone code is implemented as a state machine to try to\nkeep it clean and easy to extend. Unfortunately there isn't an easy way\nto round trip from the code to this diagram, so it doesn't exactly match\nthe executable code in [`Rotary.cpp`](./RotaryFona/Rotary.cpp).\nAlso, nearly every state other than `RINGING` has an implicit edge\nback to `ON_HOOK` if the user hangs up the phone while in that state.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosresearch%2Frotary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosresearch%2Frotary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosresearch%2Frotary/lists"}