{"id":19840993,"url":"https://github.com/dmachard/ky040-rotary","last_synced_at":"2026-03-08T00:31:37.820Z","repository":{"id":53824850,"uuid":"103854818","full_name":"dmachard/KY040-rotary","owner":"dmachard","description":"KY-040 rotary encoder library for arduino and esp8266 devices","archived":false,"fork":false,"pushed_at":"2026-02-13T17:47:16.000Z","size":692,"stargazers_count":24,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-02-14T01:29:10.935Z","etag":null,"topics":["arduino","esp32","esp8266","iot"],"latest_commit_sha":null,"homepage":"","language":"C++","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/dmachard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2017-09-17T19:12:33.000Z","updated_at":"2026-02-13T17:46:17.000Z","dependencies_parsed_at":"2024-05-13T19:01:23.964Z","dependency_job_id":"7e86c7ca-e733-426e-8e33-f2d93e429257","html_url":"https://github.com/dmachard/KY040-rotary","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/dmachard/KY040-rotary","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmachard%2FKY040-rotary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmachard%2FKY040-rotary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmachard%2FKY040-rotary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmachard%2FKY040-rotary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmachard","download_url":"https://codeload.github.com/dmachard/KY040-rotary/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmachard%2FKY040-rotary/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30238857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T00:30:53.000Z","status":"ssl_error","status_checked_at":"2026-03-08T00:30:44.061Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["arduino","esp32","esp8266","iot"],"created_at":"2024-11-12T12:29:00.852Z","updated_at":"2026-03-08T00:31:37.811Z","avatar_url":"https://github.com/dmachard.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HW-040/KY-040 Rotary Encoder Library\n\nArduino library for the KY-040 rotary encoder with **software debouncing** and **interrupts** support.\n\n\u003cimg src=\"KY-040.png\" alt=\"KY-040 Rotary Encoder\" width=\"300\"\u003e\n\n## Features\n\n- Callback functions on click and rotate events\n- Software debouncing\n- Interrupts support\n- Compatible with Arduino, ESP8266, and ESP32\n\n## Tested on hardware\n\n- Arduino Uno\n- Wemos D1 R2\n- ESP32\n\n## Wiring\n\n| KY-040 Pin | Board Pin |\n|------------|-----------|\n| VCC        | 3.3V      |\n| GND        | GND       |\n| SW         | D7        |\n| DT         | D6        |\n| CLK        | D5        |\n\n## Usage\n\n### Basic mode (polling)\n\n```cpp\n#include \"KY040-rotary.h\"\n\nKY040 Rotary(5, 6, 7);  // CLK, DT, SW\n\nvoid OnButtonClicked() { Serial.println(\"Clicked\"); }\nvoid OnButtonLeft()    { Serial.println(\"Left\"); }\nvoid OnButtonRight()   { Serial.println(\"Right\"); }\n\nvoid setup() {\n  Serial.begin(9600);\n  Rotary.Begin();\n\n  Rotary.OnButtonClicked(OnButtonClicked);\n  Rotary.OnButtonLeft(OnButtonLeft);\n  Rotary.OnButtonRight(OnButtonRight);\n}\n\nvoid loop() {\n  Rotary.Process(millis());\n}\n```\n\n### Interrupt mode\n\n```cpp\n#include \"KY040-rotary.h\"\n\nKY040 Rotary(5, 6, 7);\n\nvoid OnButtonClicked() { Serial.println(\"Clicked\"); }\nvoid OnButtonLeft()    { Serial.println(\"Left\"); }\nvoid OnButtonRight()   { Serial.println(\"Right\"); }\n\nvoid SwitchInterruptHandler() { Rotary.HandleSwitchInterrupt(); }\nvoid RotateInterruptHandler() { Rotary.HandleRotateInterrupt(); }\n\nvoid setup() {\n  Serial.begin(9600);\n  Rotary.Begin(SwitchInterruptHandler, RotateInterruptHandler);\n\n  Rotary.OnButtonClicked(OnButtonClicked);\n  Rotary.OnButtonLeft(OnButtonLeft);\n  Rotary.OnButtonRight(OnButtonRight);\n}\n\nvoid loop() {\n  Rotary.Process(millis());\n}\n```\n\n## API Reference\n\n### Constructor\n\n```cpp\nKY040(uint8_t pinClk, uint8_t pinDt, uint8_t pinSw)\n```\n\n### Methods\n\n| Method | Description |\n|--------|-------------|\n| `Begin()` | Initialize in polling mode |\n| `Begin(isr sw, isr rotate)` | Initialize in interrupt mode |\n| `Process(unsigned long t)` | Call in `loop()` with `millis()` to process events |\n| `OnButtonClicked(callback)` | Register callback for button click |\n| `OnButtonLeft(callback)` | Register callback for counter-clockwise rotation |\n| `OnButtonRight(callback)` | Register callback for clockwise rotation |\n| `HandleSwitchInterrupt()` | ISR handler for button — call from your ISR wrapper |\n| `HandleRotateInterrupt()` | ISR handler for rotation — call from your ISR wrapper |\n\n## License\n\nMIT License — see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmachard%2Fky040-rotary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdmachard%2Fky040-rotary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmachard%2Fky040-rotary/lists"}