{"id":50430502,"url":"https://github.com/i-jss/x-ray-controller","last_synced_at":"2026-05-31T14:01:30.450Z","repository":{"id":359821261,"uuid":"1035527619","full_name":"i-JSS/X-Ray-Controller","owner":"i-JSS","description":"X-Ray machine controller built in C++ on Raspberry Pi, featuring modular drivers for I2C, UART, Modbus, GPIO, motor control with encoder polling, and a PID controller, all wired together with RAII-based resource management.","archived":false,"fork":false,"pushed_at":"2026-05-23T15:40:08.000Z","size":22697,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-23T17:21:11.420Z","etag":null,"topics":["gpio","i2c","modbus","pid-controller","raspberry-pi","uart-protocol"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/i-JSS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-10T15:36:02.000Z","updated_at":"2026-05-23T15:40:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/i-JSS/X-Ray-Controller","commit_stats":null,"previous_names":["i-jss/x-ray-controller"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/i-JSS/X-Ray-Controller","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i-JSS%2FX-Ray-Controller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i-JSS%2FX-Ray-Controller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i-JSS%2FX-Ray-Controller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i-JSS%2FX-Ray-Controller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/i-JSS","download_url":"https://codeload.github.com/i-JSS/X-Ray-Controller/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i-JSS%2FX-Ray-Controller/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33733754,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["gpio","i2c","modbus","pid-controller","raspberry-pi","uart-protocol"],"created_at":"2026-05-31T14:01:27.954Z","updated_at":"2026-05-31T14:01:30.440Z","avatar_url":"https://github.com/i-JSS.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# X Ray Controller - Trabalho 2 - 2025-1\n\n![C++](https://img.shields.io/badge/C++-00599C?style=for-the-badge\u0026logo=cplusplus\u0026logoColor=white)\n![CMake](https://img.shields.io/badge/CMake-064F8C?style=for-the-badge\u0026logo=cmake\u0026logoColor=white)\n![Raspberry Pi](https://img.shields.io/badge/Raspberry_Pi-A22846?style=for-the-badge\u0026logo=raspberrypi\u0026logoColor=white)\n![I2C](https://img.shields.io/badge/I2C-Protocol-informational?style=for-the-badge)\n![UART](https://img.shields.io/badge/UART-Protocol-informational?style=for-the-badge)\n![Modbus](https://img.shields.io/badge/Modbus-Protocol-informational?style=for-the-badge)\n\n## Apresentação\n\n![Sensores](images/output5.gif)\n![Motores](images/output4.gif)\n\nLink para apresentação:\n\nhttps://youtu.be/WeBwpsw6QZs ou clique [aqui](https://youtu.be/WeBwpsw6QZs).\n\n## Módulos\n\nGerenciamento de erros é feito através de exceções, onde possível foi colocada funcionalidade de fechamento em funções destrutoras,\nassegurando que recursos sejam liberados corretamente de forma automática ao módulo sair de escopo de alguma forma (RAII).\n\n- i2cController: Classe controladora de I2C, métodos para leitura, escrita e gerenciamento de\n  handle\n  - bmp280Controller: Classe controladora/driver do sensor BMP280, métodos para inicialização e fechamento, leitura de temperatura e pressão\n- gpioControllar: Classe controladora de GPIO, Singleton, métodos para configuração e controle de pinos, funcionalidade inutilizada de callbacks\n  - motorController: Classe controladora de motor, métodos para controle de posição, modo de operação, calibração. Cada motor utiliza uma worker thread para polling de encoders sem bloqueio\n- uartController: Classe controladora de UART, métodos para leitura e escrita de dados, com overloads para maior conveniência dos tipos de dados\n  - modbusController: Classe controladora de Modbus, define métodos públicos para inicialização, leitura, escrita e verificação de mensagens.\n    interface pública consiste em incialização, leitura de todos os registradores (informação armazenada em um struct para fácil manipulação), e escrita singular de registrador\n    com sobrecarga de operadores para diferentes tipos de dados.\n- pidController: Classe que encapsula estado e funcionalidade de um controle PID, permitindo instanciação de múltiplos controladores com diferentes parâmetros e contextos de execução.\n- easyLoggingpp: Biblioteca externa para logging, utilizada para registrar eventos e estados do sistema com intuito de aumentar a rastreabilidade e facilitar o debug.\n\n## Compilação\n\n### Dependências\n\nO projeto depende apenas de uma biblioteca externa, que deve ser instalada antes de compilar o projeto:\n\n- wiringPi: Biblioteca para controle de GPIO, UART e I2C na Raspberry Pi.\n\nMas além disso é necessário ter uma API para threads, para que o CMAKE possa\nencontrar a biblioteca de threads correta para o sistema operacional utilizado.\n\n### Instruções\n\nO projeto utiliza CMake para compilação, o que permite fácil portabilidade e configuração de ambiente.\nCada módulo é compilado separadamente como biblioteca estática a fim de evitar recompilações desnecessárias\nem caso de múltiplos executáveis, algo que pode, e foi, utilizado para testes intermediários de cada módulo.\n\nPara compilar o projeto, execute os seguintes comandos no terminal da raspberry pi:\n\n```bash\nmkdir build\ncd build\ncmake ..\nmake\n./main\n```\n\nPode se utilizar a flag `-DCMAKE_BUILD_TYPE=Release` ao compilar com cmake para compilar em modo release, o que irá otimizar o código e deverá remover logs de debug,\nou `-DCMAKE_BUILD_TYPE=Debug` para compilar em modo debug, o que irá incluir logs de debug e informações adicionais de rastreio.\n\n\nIntegrantes:\n\n| Nome          | GitHub    | Matrícula |\n| ------------- | --------- | --------- |\n| André Silva   | Hunter104 | 221007813 |\n| João Carvalho | i-JSS     | 221008150 |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi-jss%2Fx-ray-controller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fi-jss%2Fx-ray-controller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi-jss%2Fx-ray-controller/lists"}