from machine import Pin, I2C
from i2c_lcd import I2cLcd
from time import sleep
# =========================
# DADOS DOS VEÍCULOS
# =========================
veiculos = [
{
"id": "EV1",
"bateria": 40,
"potencia": 2000,
"estado": "ATIVO"
},
{
"id": "EV2",
"bateria": 65,
"potencia": 2500,
"estado": "REDUZIDO"
},
{
"id": "EV3",
"bateria": 30,
"potencia": 3000,
"estado": "AGUARDANDO"
}
]
# =========================
# LEDs
# =========================
leds = {
1: (
Pin(2, Pin.OUT),
Pin(3, Pin.OUT),
Pin(4, Pin.OUT)
),
2: (
Pin(5, Pin.OUT),
Pin(6, Pin.OUT),
Pin(7, Pin.OUT)
),
3: (
Pin(8, Pin.OUT),
Pin(9, Pin.OUT),
Pin(10, Pin.OUT)
)
}
# =========================
# BOTÕES
# =========================
botao1 = Pin(11, Pin.IN, Pin.PULL_UP)
botao2 = Pin(12, Pin.IN, Pin.PULL_UP)
botao3 = Pin(13, Pin.IN, Pin.PULL_UP)
# =========================
# LCD
# =========================
i2c = I2C(
1,
scl=Pin(15),
sda=Pin(14),
freq=400000
)
lcd = I2cLcd(i2c, 0x27, 2, 16)
# =========================
# FUNÇÃO DOS LEDs
# =========================
def definir_estado(ev, estado):
verde, amarelo, vermelho = leds[ev]
verde.value(0)
amarelo.value(0)
vermelho.value(0)
if estado == "ATIVO":
verde.value(1)
elif estado == "REDUZIDO":
amarelo.value(1)
elif estado == "AGUARDANDO":
vermelho.value(1)
# =========================
# APLICAR ESTADOS
# =========================
def atualizar_leds():
for numero, veiculo in enumerate(veiculos, start=1):
definir_estado(numero, veiculo["estado"])
# =========================
# EXIBIR VEÍCULO NO LCD
# =========================
def mostrar_veiculo(veiculo):
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr(
veiculo["id"] +
" " +
str(veiculo["bateria"]) +
"% " +
str(veiculo["potencia"]) +
"W"
)
lcd.move_to(0, 1)
lcd.putstr("Estado:" + veiculo["estado"])
# =========================
# SITUAÇÕES DE ENERGIA
# =========================
def selecionar_situacao(numero):
if numero == 1:
print("\n=== ALTA DISPONIBILIDADE ===")
print("Energia disponivel: 8000 W")
return "ALTA"
elif numero == 2:
print("\n=== DISPONIBILIDADE LIMITADA ===")
print("Energia disponivel: 5000 W")
return "LIMITADA"
elif numero == 3:
print("\n=== BAIXA DISPONIBILIDADE ===")
print("Energia disponivel: 2000 W")
return "BAIXA"
# =========================
# INICIALIZAÇÃO
# =========================
atualizar_leds()
print("================================")
print(" GOODWE SMART CHARGING STATION ")
print("================================")
for veiculo in veiculos:
print(
veiculo["id"],
"| Bateria:", str(veiculo["bateria"]) + "%",
"| Potencia:", str(veiculo["potencia"]) + "W",
"| Estado:", veiculo["estado"]
)
# =========================
# LOOP PRINCIPAL
# =========================
situacao = "ALTA"
indice = 0
contador = 0
while True:
# Verifica os botões
if botao1.value() == 0:
situacao = selecionar_situacao(1)
sleep(0.3)
elif botao2.value() == 0:
situacao = selecionar_situacao(2)
sleep(0.3)
elif botao3.value() == 0:
situacao = selecionar_situacao(3)
sleep(0.3)
# Mostra o veículo atual
mostrar_veiculo(veiculos[indice])
sleep(2)
indice += 1
if indice >= len(veiculos):
indice = 0
contador += 1
if contador >= 3:
print("\nSituacao atual:", situacao)
contador = 0