https://github.com/cryptovictor/inteli-activity-semaforo
Inteli Activity - Semaforo
https://github.com/cryptovictor/inteli-activity-semaforo
Last synced: 27 days ago
JSON representation
Inteli Activity - Semaforo
- Host: GitHub
- URL: https://github.com/cryptovictor/inteli-activity-semaforo
- Owner: CryptoVictor
- Created: 2025-10-31T15:10:41.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-10-31T15:15:19.000Z (9 months ago)
- Last Synced: 2025-10-31T17:18:01.677Z (9 months ago)
- Language: C++
- Size: 106 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Semáforo com Arduino - Atividade Ponderada
---
# AVISO IMPORTANTE
## ATENÇÃO: SUBSTITUIÇÃO DO LED AMARELO POR LED AZUL
**O LED amarelo foi substituído por um LED azul no circuito devido à indisponibilidade de LEDs amarelos no momento da montagem.**
Esta substituição não afeta o funcionamento lógico do código, apenas a cor visual exibida durante o estado AMARELO do semáforo. O código e a lógica permanecem inalterados.
---
## Descrição
Este projeto implementa um semáforo controlado por Arduino utilizando programação orientada a objetos em C++. O sistema simula o funcionamento de um semáforo com três estados (vermelho, amarelo e verde), cada um com sua duração específica, e utiliza alocação dinâmica de memória para gerenciar os componentes.
## Objetivos
- Demonstrar o uso de programação orientada a objetos em Arduino
- Implementar gerenciamento de estados de um semáforo
- Utilizar ponteiros e alocação dinâmica de memória
- Controlar LEDs através de pinos digitais do Arduino
## Componentes Necessários
- 1 Arduino Uno (ou compatível)
- 3 LEDs (vermelho, amarelo e verde)
- 3 resistores de 220Ω (ou similar)
- Fios jumper
- Protoboard
## Circuito

## Estrutura do Código
### Enumeração de Estados
O código utiliza uma enumeração para representar os três estados possíveis do semáforo:
- `VERMELHO = 0`
- `AMARELO = 1`
- `VERDE = 2`
### Classe Luz
A classe `Luz` representa uma cor individual do semáforo e encapsula:
- **Pino do Arduino**: onde o LED está conectado
- **Duração**: tempo que a luz permanece ativa (em segundos)
- **Estado ativo**: se a luz está ligada ou desligada
**Métodos principais**:
- `ativar()`: liga o LED no pino correspondente
- `desativar()`: desliga o LED
- `estaAtiva()`: retorna se a luz está ativa
- `getDuracao()`: retorna a duração configurada
- `getPino()`: retorna o pino do Arduino
### Classe Semaforo
A classe `Semaforo` gerencia o funcionamento completo do semáforo:
**Atributos principais**:
- Três ponteiros para objetos `Luz` (vermelho, amarelo, verde)
- Estado atual do semáforo
- Tempo da última transição de estado
**Métodos principais**:
- `iniciar()`: inicializa o semáforo no estado vermelho
- `atualizar()`: verifica se deve fazer a transição de estado baseado no tempo decorrido
- `proximoEstado()`: realiza a transição para o próximo estado na sequência
- `getEstadoNome()`: retorna o nome do estado atual como string
- `getTempoRestante()`: calcula o tempo restante do estado atual
**Sequência de funcionamento**:
1. Vermelho: 6 segundos
2. Verde: 4 segundos
3. Amarelo: 2 segundos
4. Retorna ao vermelho (ciclo contínuo)
## Configuração do Hardware
O código está configurado para utilizar os seguintes pinos:
- **Pino 13**: LED Vermelho
- **Pino 12**: LED Amarelo
- **Pino 11**: LED Verde
Os LEDs devem ser conectados com resistores de 220Ω em série para limitar a corrente.
## Funcionamento
### Setup
No `setup()`, o código:
1. Inicializa a comunicação serial a 9600 baud
2. Aloca dinamicamente um objeto `Semaforo` na memória
3. Inicializa o semáforo no estado vermelho
### Loop
No `loop()`, o código:
1. Atualiza o semáforo continuamente (verifica transições de estado)
2. A cada segundo, imprime no Serial Monitor:
- Estado atual do semáforo
- Tempo restante do estado atual
- Qual LED está ativo no momento
## Alocação Dinâmica de Memória
O projeto utiliza alocação dinâmica de memória para demonstrar o uso de ponteiros:
- O objeto `Semaforo` é criado com `new` no `setup()`
- Cada `Luz` também é alocada dinamicamente dentro do construtor de `Semaforo`
- O destrutor de `Semaforo` libera toda a memória alocada com `delete`
**Nota**: Em projetos Arduino reais, geralmente não é necessário usar alocação dinâmica devido ao ambiente embarcado, mas este projeto demonstra os conceitos de gerenciamento de memória.
## Monitor Serial
O código envia mensagens para o Serial Monitor incluindo:
- Mensagem de inicialização
- Transições de estado com duração de cada estado
- Informações periódicas sobre o estado atual e tempo restante
- Indicadores de quais LEDs estão ativos
Para visualizar as mensagens, abra o Serial Monitor no Arduino IDE e configure para 9600 baud.
## Vídeo Demonstrativo
## Como Usar
1. Monte o circuito conforme a imagem fornecida
2. Carregue o código `atividade.ino` no Arduino
3. Abra o Serial Monitor (Ctrl+Shift+M) e configure para 9600 baud
4. Observe o funcionamento do semáforo e as mensagens no monitor serial
## Autor
Victor Garcia Dos Santos, desenvolvido como parte da atividade ponderada do Inteli.
## Observações
- As durações dos estados podem ser ajustadas modificando os valores no construtor de `Semaforo`
- O delay de 10ms no final do `loop()` evita sobrecarga do processador
- Os pinos podem ser alterados modificando as constantes `PINO_VERMELHO`, `PINO_AMARELO` e `PINO_VERDE`