# Professor Cristiano Teixeira
# Sob Licença Apache 2.0
print("INICIO")
from machine import Pin, PWM, ADC, SPI
import time
#Função que faz a conversão de um valor
def map(valor, de_min, de_max, para_min, para_max):
# Verifica se o valor está fora da faixa de entrada
if valor < de_min:
valor = de_min
elif valor > de_max:
valor = de_max
# Calcula o valor mapeado
de_variacao = de_max - de_min
para_variacao = para_max - para_min
valor_mapeado = int((valor - de_min) * para_variacao / de_variacao + para_min)
return valor_mapeado
# Declaramos os pinos
j1_ve = ADC(Pin(12))
j1_ho = ADC(Pin(13))
j1_bt = Pin(14, Pin.IN)
CLK_PIN = Pin(18, Pin.OUT)
DATA_PIN = Pin(19, Pin.OUT)
CS_PIN = Pin(5, Pin.OUT)
# Criamos as variáveis que irão receber os valores. Sei que não precisa, mas é para fins didáticos.
vj1_ve=0
vj1_ho=0
import max7219
spi = SPI(1, baudrate=10000000, polarity=1, phase=0, sck=Pin(4), mosi=Pin(2))
ss = Pin(5, Pin.OUT)
display = max7219.Matrix8x8(spi, ss, 1)
# número de linhas
nl = 8
# número de colunas
nc = 8
#posições iniciais
linha = 0
coluna = 0
while True:
#fiz a conversão dos valores lidos de 0 à 4095 para 0 à 1024 apenas por conveniência de já ensinar os valores de leituras analógicos assim no arduino
vj1_ve=map(j1_ve.read(), 0, 4095, 0, 1024)
vj1_ho=map(j1_ho.read(), 0, 4095, 0, 1024)
if (j1_bt.value() == 0):
display.fill(0)
print("Pépe já tirei a vela!")
if (vj1_ve > 512):
'''if maroto, para não deixar os valores de linha e colunas reduzirem para menos de 0
ou aumentar mais que o limite (neste caso 7). Repetindo a estratégia nas linhas 65, 70 e 75'''
if (linha < nl-1):
linha = linha +1
else:
linha = 7
if (vj1_ve < 512):
if (linha > 0):
linha = linha -1
else:
linha = 0
if (vj1_ho < 512):
if (coluna < nc-1):
coluna = coluna +1
else:
coluna = 7
if (vj1_ho > 512):
if (coluna > 0):
coluna = coluna -1
else:
coluna = 0
# Linhas comentadas abaixo só para exibir os valores na tela a fim de teste
#print("Coluna",coluna)
#print("Linha",linha)
#print("===============")
display.pixel(coluna,linha,1)
display.show()
#Se Comentar a linha abaixo ele mostra todo o 'caminho' percorrido, se descomentar ele mostra só a posição atual
display.fill(0)
time.sleep(0.1)