from machine import ADC, Pin
import math
import time
pot_x = ADC(26)
pot_y = ADC(27)
led = Pin(15, Pin.OUT)
MAX_ADC_VALUE = 65535
A1 = -12
A2 = -19
A3 = 5
A4 = 11
A5 = 6
A6 = -2
A7 = 23
A8 = -28
A9 = 30
A10 = -24.5
B1 = 4
B2 = 22
B3 = 1e-7
B4 = 9
B5 = 20
B6 = 7
B7 = 11
B8 = 35.5
B9 = 13
B10 = 1e-5
C1 = -1.4
C2 = -9.58
C3 = -3.5e-8
C4 = -8.8
C5 = -13.1
C6 = -2.33
C7 = -19.87
C8 = 10.5
C9 = -3.9
C10 = -1.3e-6
def sigmoid(x):
if x < -100:
return 0.0
elif x > 100:
return 1.0
else:
return 1 / (1 + math.exp(-x))
def perceptron(x, y):
sum1 = x * A1 + y * B1 + C1
sum2 = x * A2 + y * B2 + C2
sum3 = x * A3 + y * B3 + C3
sum4 = x * A4 + y * B4 + C4
sum5 = x * A5 + y * B5 + C5
sum6 = x * A6 + y * B6 + C6
sum7 = x * A7 + y * B7 + C7
sum8 = x * A8 + y * B8 + C8
sum9 = x * A9 + y * B9 + C9
sum10 = x * A10 + y * B10 + C10
output1 = sigmoid(sum1)
output2 = sigmoid(sum2)
output3 = sigmoid(sum3)
output4 = sigmoid(sum4)
output5 = sigmoid(sum5)
output6 = sigmoid(sum6)
output7 = sigmoid(sum7)
output8 = sigmoid(sum8)
output9 = sigmoid(sum9)
output10 = sigmoid(sum10)
final_sum = (-100 * output1 - 100 * output2 + 100 * output3 -
100 * output4 - 100 * output5 + 100 * output6 -
100 * output7 + 100 * output8 + 100 * output9 +
100 * output10 - 237)
result = sigmoid(final_sum)
return result
try:
while True:
raw_x = pot_x.read_u16()
raw_y = pot_y.read_u16()
x = raw_x / MAX_ADC_VALUE
y = raw_y / MAX_ADC_VALUE
result = perceptron(x, y)
if result > 0.5:
led.value(1)
status = "ВКЛ"
else:
led.value(0)
status = "ВЫКЛ"
print(f"X: {x:.3f} Y: {y:.3f} | Персептрон: {result:.3f} | СВЕТОДИОД: {status}")
time.sleep(0.5)
except KeyboardInterrupt:
led.value(0)
print("\nПрограмма завершена.")