from machine import Pin, ADC
from time import sleep_ms
'''
Cria um objeto para conversão A-D conectado ao pino 33
A conexão é feita através de um atenuador, a escolher:
ADC.ATTN_0DB: sem atenuação (tensão entre 0V e 1V)
ADC.ATTN_2_5DB: atenuação de 2.5dB (tensão entre 0V e 1.5V)
ADC.ATTN_6DB: atenuação de 6dB (tensão entre 0V e 2.25V)
ADC.ATTN_11DB: atenuação de 11dB (tensão entre 0V e 3.3V)
'''
sensor = ADC(Pin(33), atten=ADC.ATTN_11DB)
'''
Um botão está conectado ao pino 22 e ao GND
Quando apertado, o pino 22 está no estado baixo (0V)
Quando solto, o pino 22 está no estado alto (3v3)
'''
bot = Pin(22, Pin.IN, Pin.PULL_UP)
def tensaoADC(x):
'''
Determina a tensão no pino conectado a um ADC, a partir do valor obtido por ele
Considera um ADC de 16 bits (padrão do método read_u16())
Considera a faixa de tensão entre 0V e 3.3V
'''
return 3.3*x/65535
bAntes = bot.value() # Estado original do botão
while True:
bAgora = bot.value()
if bAgora != bAntes: # Estado do pino mudou (botão apertado ou botão solto)
if bAgora == 0: # O estado mudou pois o botão foi pressionado
'''
Ação a ser executada por causa do pressionamento do botão
'''
medida = sensor.read_u16() # Leitura do ADC em 16 bits (resultado entre 0 e 65535)
tensao = tensaoADC(medida)
print(f'A tensão medida pelo ADC é igual a {tensao:.2f}V')
'''
Ação a ser executada por causa do pressionamento do botão
'''
bAntes = bAgora # Atualiza o estado original do botão, para detectar novas mudanças
sleep_ms(100) # Pausa o tempo necessário para minimizar ruído (bouncing)