Para este exemplo é necessário ter instalado a Thonny IDE e também são necessário o seguintes componentes de hardware:
- uma placa microcontroladora Raspberry Pi Pico;
- 1 protoboard;
- 1 display de 7 segmentos de anodo comum ou catodo comum;
- 1 LED;
- 8 jumpers e;
- 1 cabo micro USB para ligar/conectar o Raspberry Pi Pico ao seu computador.
Primeiramente vamos criar o arquivo seven_segment.py
para definir o módulo seven_segment
.
Este módulo vai conter uma classe chamada Display
, que representará um Display de 7 segmentos:
Arquivo seven_segment.py
:
import machine
# Classe que representa um display de 7 segmentos
# pode ser configurado como anodo comum ou catodo comum
# por padrão é inicializado como catodo comum
class Display:
# o construtor do diplay recebe os pinos correspondentes à cada segmento
def __init__(self, a, b, c, d, e, f, g):
self.common_cathode()
self.a = machine.Pin(a, machine.Pin.OUT)
self.b = machine.Pin(b, machine.Pin.OUT)
self.c = machine.Pin(c, machine.Pin.OUT)
self.d = machine.Pin(d, machine.Pin.OUT)
self.e = machine.Pin(e, machine.Pin.OUT)
self.f = machine.Pin(f, machine.Pin.OUT)
self.g = machine.Pin(g, machine.Pin.OUT)
# indica que o display é de catodo comum
# no display de catodo cumum
# o nivel lógico alto acende o segmento
# o nivel lógico baixo apaga o segmento
def common_cathode(self):
self.on = 1
self.off = 0
# indica que o display é de anodo comum
# no display de anoodo cumum
# o nivel lógico baixo acende o segmento
# o nivel lógico alto apaga o segmento
def common_anode(self):
self.on = 0
self.off = 1
# apresenta o número informado
def show(self, digito):
if digito == 0:
self._state(self.on, self.on, self.on, self.on, self.on, self.on, self.off)
return
if digito == 1:
self._state(self.off, self.on, self.on, self.off, self.off, self.off, self.off)
return
if digito == 2:
self._state(self.on, self.on, self.off, self.on, self.on, self.off, self.on)
return
if digito == 3:
self._state(self.on, self.on, self.on, self.on, self.off, self.off, self.on)
return
if digito == 4:
self._state(self.off, self.on, self.on, self.off, self.off, self.on, self.on)
return
if digito == 5:
self._state(self.on, self.off, self.on, self.on, self.off, self.on, self.on)
return
if digito == 6:
self._state(self.on, self.off, self.on, self.on, self.on, self.on, self.on)
return
if digito == 7:
self._state(self.on, self.on, self.on, self.off, self.off, self.off, self.off)
return
if digito == 8:
self._state(self.on, self.on, self.on, self.on, self.on, self.on, self.on)
return
if digito == 9:
self._state(self.on, self.on, self.on, self.on, self.off, self.on, self.on)
return
# altera o estado de ligado/desligado de cada um dos 7 segmentos
def _state(self, a, b, c, d, e, f, g):
self.a.value(a)
self.b.value(b)
self.c.value(c)
self.d.value(d)
self.e.value(e)
self.f.value(f)
self.g.value(g)
Na imagem a seguir encontra-se o esquema do circuito:
esquema-circuito.png
Com o circuito montado, vamos agora criar o arquivo main.py
, que é o arquivo executado automaticamente quando o Raspberry Pi Pico é ligado.
Primeiro vamos importar a classe Display
do módulo seven_segment
e também os módulos machine
e utime
, dessa forma:
from seven_segment import Display
import machine
import utime
Agora vamos declarar uma variável display
do tipo Display
conectado aos pinos GPIO de 0 à 6 do Raspberry Pi Pico.
# display de 7 segmentos com anodo comum
# os segmentos estão conectados nos GPIOs de 0 à 6
display = Display(0, 1, 2, 3, 4, 5, 6)
# o display utilizado neste exemplo é de anodo comum
display.common_anode()
Em seguida vamos declarar uma variável led_azul
, que corresponde ao LED que conectamos na GPIO 16 do Raspberry Pi Pico.
# LED azul conectado na GPIO 16
led_azul = machine.Pin(16, machine.Pin.OUT)
Também vamos declarar uma variável led_verde
, que corresponde ao LED onboard do Raspberry Pi Pico, esse LED é acessível através do GPIO 25.
# LED onboard do Raspberry Pi Pico
led_verde = machine.Pin(25, machine.Pin.OUT)
Até o momento já temos o código necessário para acessar o Display de 7 segmentos, um LED externo e o LED onboard.
Antes de escrever o loop infinito que vai incrementar/decrementar o digito e acender/apagar os LEDs, vamos primeiramente criar duas variáveis, numero
e incremento
e uma função proximoNumero()
.
Essa função será responsável por controlar se o próximo numero é crescente ou decrescente.
O contador vai iniciar em 0
, vai incrementando até 9
.
Quando chegar em 9
, ele vai decrementando até 0
.
# variável que vai determinar se incrementa 1 ou decrementa 1
incremento = 1
# número a ser apresentado no display
numero = 0
# função para obter o próximo número
def proximoNumero():
global numero
global incremento
numero += incremento
if (numero == 9): # quando chegar em 9, conta de 9 à 0
incremento = -1
if (numero == 0): # quando chegar em 0, conta de 0 à 9
incremento = 1
Agora podemos escrever o loop infinito do nosso contador, conforme abaixo:
# loop infinito do programa
while True:
led_verde.value(1) # acende o LED onboard
led_azul.value(0) # apaga o LED azul
display.show(numero) # apresenta o número atual
utime.sleep(1) # aguarda 1 segundo
proximoNumero() # incrementa ou decrementa o número atual
led_verde.value(0) # apaga o LED onboard
led_azul.value(1) # acende o LED azul
display.show(numero) # apresenta o número atual
utime.sleep(1) # aguarda 1 segundo
proximoNumero() # incrementa ou decrementa o número atual
O conteúdo completo do main.py
ficará dessa forma:
Arquivo main.py
:
from seven_segment import Display
import machine
import utime
# display de 7 segmentos com anodo comum
# os segmentos estão conectados nos GPIOs de 0 à 6
display = Display(0, 1, 2, 3, 4, 5, 6)
display.common_anode()
# LED azul conectado na GPIO 16
led_azul = machine.Pin(16, machine.Pin.OUT)
# LED onboard do Raspberry Pi Pico
led_verde = machine.Pin(25, machine.Pin.OUT)
# variável que vai determinar se incrementa +1 ou -1
incremento = 1
# número a ser apresentado no display
numero = 0
# função para obter o próximo número
def proximoNumero():
global numero
global incremento
numero += incremento
if (numero == 9): # quando chegar em 9, conta de 9 à 0
incremento = -1
if (numero == 0): # quando chegar em 0, conta de 0 à 9
incremento = 1
# loop infinito do programa
while True:
led_verde.value(1) # acende o LED onboard
led_azul.value(0) # apaga o LED azul
display.show(numero) # apresenta o número atual
utime.sleep(1) # aguarda 1 segundo
proximoNumero() # incrementa ou decrementa o número atual
led_verde.value(0) # apaga o LED onboard
led_azul.value(1) # acende o LED azul
display.show(numero) # apresenta o número atual
utime.sleep(1) # aguarda 1 segundo
proximoNumero() # incrementa ou decrementa o número atual
Utilizando o Thonny IDE, salve os arquivos seven_segment.py
e main.py
no Raspberry Pi Pico.
Em seguida pressione o botão Play
para iniciar a execução.
Abaixo uma imagem da execução do circuito montado em um protoboard:
montagem-circuito.png
O fonte completo deste exemplo está disponível em meu GitHub.