# 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)