from machine import Pin
from time import sleep
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
print("Hello, ESP32!")
verde = Pin(19, Pin.OUT)
verde2 = Pin(5, Pin.OUT)
vermelho = Pin(15, Pin.OUT)
vermelho2 = pin(2, Pin.OUT)
fila = ctrl.Antecedent(np.arange(0, 101, 1), 'fila')
transito = ctrl.Antecedent(np.arange(0, 101, 1), 'transito')
extensao = ctrl.Consequent(np.arange(0, 4, 1), 'extensao')
# Definição das funções de pertinência para fila
fila['muito_curta'] = fuzz.trimf(fila.universe, [0, 0, 20])
fila['curta'] = fuzz.trimf(fila.universe, [10, 25, 40])
fila['media'] = fuzz.trimf(fila.universe, [30, 50, 70])
fila['grande'] = fuzz.trimf(fila.universe, [60, 75, 90])
fila['muito_grande'] = fuzz.trimf(fila.universe, [80, 100, 100])
# Definição das funções de pertinência para transito
transito['muito_curto'] = fuzz.trimf(transito.universe, [0, 0, 20])
transito['curto'] = fuzz.trimf(transito.universe, [10, 25, 40])
transito['medio'] = fuzz.trimf(transito.universe, [30, 50, 70])
transito['grande'] = fuzz.trimf(transito.universe, [60, 75, 90])
transito['muito_grande'] = fuzz.trimf(transito.universe, [80, 100, 100])
# Definição das funções de pertinência para extensao
extensao['zero'] = fuzz.trimf(extensao.universe, [0, 0, 1])
extensao['curto'] = fuzz.trimf(extensao.universe, [1, 1.5, 2])
extensao['medio'] = fuzz.trimf(extensao.universe, [2, 2.5, 3])
extensao['longo'] = fuzz.trimf(extensao.universe, [3, 3.5, 4])
# Definição das regras fuzzy
rule1 = ctrl.Rule(fila['muito_curta'] & transito['muito_curto'], extensao['zero'])
rule2 = ctrl.Rule(fila['curta'] & transito['muito_curto'], extensao['zero'])
rule3 = ctrl.Rule(fila['media'] & transito['muito_curto'], extensao['zero'])
rule4 = ctrl.Rule(fila['grande'] & transito['muito_curto'], extensao['zero'])
rule5 = ctrl.Rule(fila['muito_grande'] & transito['muito_curto'], extensao['zero'])
rule6 = ctrl.Rule(fila['muito_curta'] & transito['curto'], extensao['curto'])
rule7 = ctrl.Rule(fila['curta'] & transito['curto'], extensao['curto'])
rule8 = ctrl.Rule(fila['media'] & transito['curto'], extensao['curto'])
rule9 = ctrl.Rule(fila['grande'] & transito['curto'], extensao['curto'])
rule10 = ctrl.Rule(fila['muito_grande'] & transito['curto'], extensao['curto'])
rule11 = ctrl.Rule(fila['muito_curta'] & transito['medio'], extensao['medio'])
rule12 = ctrl.Rule(fila['curta'] & transito['medio'], extensao['medio'])
rule13 = ctrl.Rule(fila['media'] & transito['medio'], extensao['medio'])
rule14 = ctrl.Rule(fila['grande'] & transito['medio'], extensao['medio'])
rule15 = ctrl.Rule(fila['muito_grande'] & transito['medio'], extensao['medio'])
rule16 = ctrl.Rule(fila['muito_curta'] & transito['grande'], extensao['longo'])
rule17 = ctrl.Rule(fila['curta'] & transito['grande'], extensao['longo'])
rule18 = ctrl.Rule(fila['media'] & transito['grande'], extensao['longo'])
rule19 = ctrl.Rule(fila['grande'] & transito['grande'], extensao['longo'])
rule20 = ctrl.Rule(fila['muito_grande'] & transito['grande'], extensao['longo'])
rule21 = ctrl.Rule(fila['muito_curta'] & transito['muito_grande'], extensao['longo'])
rule22 = ctrl.Rule(fila['curta'] & transito['muito_grande'], extensao['medio'])
rule23 = ctrl.Rule(fila['media'] & transito['muito_grande'], extensao['medio'])
rule24 = ctrl.Rule(fila['grande'] & transito['muito_grande'], extensao['curto'])
rule25 = ctrl.Rule(fila['muito_grande'] & transito['muito_grande'], extensao['curto'])
# Criação do sistema de controle fuzzy
extension_ctrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5,
rule6, rule7, rule8, rule9, rule10,
rule11, rule12, rule13, rule14, rule15,
rule16, rule17, rule18, rule19, rule20,
rule21, rule22, rule23, rule24, rule25])
extension = ctrl.ControlSystemSimulation(extension_ctrl)
# Obter o valor de saída
print(f"Tempo de Extensão: {extension.output['extensao']}")
while True:
extension.input['fila'] = randrange(100) # Exemplo de valor para fila
extension.input['transito'] = randrange(100) # Exemplo de valor para transito
# Computar o sistema fuzzy
extension.compute()
print(f"Tempo de Extensão: {extension.output['extensao']}")
print("TRÂNSITO - PROSSIGA")
verde.on()
sleep(4)
verde.off()
sleep(0.1)
print("TRÂNSITO - FECHADO")
vermelho.on()
verde2.on
sleep(4)
vermelho.off()
verde2.off()
sleep(0.1)