Lab 2 - ISR - Prática 70% da nota do lab
Neste laboratório, aplicaremos os conceitos de Interrupção de Hardware/GPIO (IRQ). Como desafio, vamos desenvolver um telégrafo digital!
Material
Para isso, você vai precisar de:
Lista de Materiais | Valor |
---|---|
2x Botões de pressão | R$ 0,20 |
1x Buzzer | R$ 2,70 |
O buzzer é um dispositivo piezoelétrico capaz de vibrar quando acionado corretamente (leia mais em Consulta/Buzzer). Com ele, seremos capazes de gerar o tom necessário para simular o telégrafo e reproduzir um código Morse:
Note que existem dois tipos de sinal: curto e longo. O desafio deste laboratório será gerar automaticamente esses dois tons.
Requisitos
Seu projeto deve possuir dois botões (btn1
e btn2
) e um buzzer. Cada botão deve reproduzir um tom diferente (indicamos freq1
e freq2
). O código deve fazer uso de IRQ para a leitura dos botões. O btn1
deve reproduzir freq1
por um determinado tempo, e o btn2
deve reproduzir freq2
por um tempo três vezes maior que o do outro botão. A ideia é que não precisemos contar o tempo na nossa cabeça (curto/longo); o sistema faz isso por nós!
Parâmetro | valor |
---|---|
freq1 | 1000 hz |
time1 | 100 ms |
freq2 | 6000 hz |
time2 | 300 ms |
Resultado esperado:
Dicas
A seguir, algumas dicas de como fazer. Você pode ou não seguir:
- Comece pelos botões e suas IRQs
- Reproduza um som no
buzzer
- Crie uma função que recebe uma
frequência
,tempo
e umpino
e reproduz um tom. - Implemente a lógica
TIP
Não se esqueça de verificar o code quality! Agora ele vai começar a apitar na cabeça de vocês!
Desafios extras
Gostou e quer fazer mais? Que tal:
- Olhando para o futuro... Dê uma olhada no
RP2040/Timer
e tente usar o periférico do timer para contar tempo! - Entre cada tom deve haver um silêncio. Se o usuário pressionar muito rápido cada botão, insira o silêncio automaticamente.
- Adicione dois buzzers e gere um tom composto (cada som é composto por duas notas)
- Receba um texto via
UART
, converta para código morse e transmita!- Pode usar comandos básicos de
c
e leitura de terminal!
- Pode usar comandos básicos de