Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/synthead/timex_datalink_crt
Write data to Timex Datalink devices with an optical sensor using a CRT monitor
https://github.com/synthead/timex_datalink_crt
150 150s beepwear crt data data-link datalink dsi e-brain fl90 fl95 graphics link pro royal sdl2 sync timex
Last synced: 3 days ago
JSON representation
Write data to Timex Datalink devices with an optical sensor using a CRT monitor
- Host: GitHub
- URL: https://github.com/synthead/timex_datalink_crt
- Owner: synthead
- Created: 2022-12-08T04:28:36.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2023-07-27T16:42:38.000Z (over 1 year ago)
- Last Synced: 2023-07-27T17:55:39.696Z (over 1 year ago)
- Topics: 150, 150s, beepwear, crt, data, data-link, datalink, dsi, e-brain, fl90, fl95, graphics, link, pro, royal, sdl2, sync, timex
- Language: Ruby
- Homepage:
- Size: 85.9 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Timex Datalink CRT data transfer library for Ruby
Here's a Ruby library for syncing optical Timex Datalink devices using a CRT monitor! This library produces graphics that are functionally-compatible to the original Timex Datalink software as demonstrated in [the Timex Datalink watch commercial](https://www.youtube.com/watch?v=p3Pzxmq-JLM). Simply hold your watch up to your monitor and sync your data over light!
The graphics are drawn using a modern SDL2 implementation in fullscreen. Here's a still from a real transfer!
# Usage
This library consumes packets compiled with [timex\_datalink\_client](https://github.com/synthead/timex_datalink_client). Here is an example that will emit graphics for the current time in both the local time zone and UTC:
```ruby
require "timex_datalink_client"
require "timex_datalink_crt"time_local = Time.now
time_utc = time_local.dup.utcmodels = [
TimexDatalinkClient::Protocol3::Sync.new,
TimexDatalinkClient::Protocol3::Start.new,TimexDatalinkClient::Protocol3::Time.new(
zone: 1,
time: time_local,
is_24h: false,
date_format: "%y-%m-%d"
),
TimexDatalinkClient::Protocol3::Time.new(
zone: 2,
time: time_utc,
is_24h: true,
date_format: "%y-%m-%d"
),TimexDatalinkClient::Protocol3::End.new
]client = TimexDatalinkClient.new(models: models)
crt = TimexDatalinkCrt.new(packets: client.packets)crt.draw_packets
```# CRT display requirement
**A CRT monitor is required** for the light to be emitted from this library correctly. CRTs use electron guns that draw scan lines one-by-one from top to bottom, then they return to the top in preparation for the next frame. This means that the electron guns turn on when they're drawing a white line, and and turn off when they're drawing the black background. This produces flashing light as the graphics are drawn, which is ultimately received by the optical sensor and decoded by the Timex Datalink device.
LCD and OLED monitors will not work because each frame is drawn almost instantaneously without an electron beam, so the picture does not "flash" as it is drawn like a CRT. Don't have a CRT monitor? You can still write data to your Timex Datalink devices with [a USB Notebook Adapter emulator made from a Teensy LC](https://github.com/synthead/timex-datalink-arduino)!