Мы с важной новостью: с 28 февраля 2025 года сервис Хабр Фриланс прекратит свою работу.

Купить услуги можно до 28 февраля 2025, но пополнить баланс уже нельзя. Если на вашем счете остались средства, вы можете потратить их на небольшие услуги — служба поддержки готова поделиться бонусами, на случай, если средств немного не хватает.
R50 4fd6d9d9de7b34638f63f16582928bb5
Дизайн, Python, IT , Арт

есть фрагмент кода для „теннисной пушки“ и надо его дописать

Добавлено 05 июн 2024 в 16:34
from machine import Pin, ADC, PWM
import time

# Инициализация переменных
duty_signal = 500
duty_min = 640
duty_max = 990

# Настройка АЦП
adc = ADC(Pin(1, Pin.PULL_UP))
adc.atten(ADC.ATTN_11DB)
adc.width(ADC.WIDTH_13BIT)

# Настройка ШИМ для моторчиков
pwmen = [None] # Используем None вместо 'null'
motor_pins = [33, 35, 37] # Пины для моторчиков
for pin in motor_pins:
pwm = PWM(Pin(pin))
pwm.freq(490)
pwm.duty(duty_signal)
pwmen.append(pwm)

# Настройка светодиода
led = Pin(15, Pin.OUT)
led.value(0)

# Настройка ШИМ для выстрела
shooting_pin = 14 # Пин для механизма выстрела
shooting_pwm = PWM(Pin(shooting_pin))
shooting_pwm.freq(490)

start = time.ticks_ms()
INTERVAL = 6500

# Функция для расчета скорости
def speed():
min_adc = 0
max_adc = 8191
discret = (max_adc - min_adc) / (duty_max - duty_min)
try:
result = int(adc.read() / discret)
except:
return 0
if result > (duty_max - duty_min):
return 390
else:
return result

# Функция для управления направлением
def direction_control(angle, pwm_pins):
duty = angle_to_duty(angle)
for pwm in pwm_pins:
pwm.duty(duty)

# Функция для преобразования угла в значение скважности
def angle_to_duty(angle):
return int((angle / 180.0) * (duty_max - duty_min) + duty_min)

# Функция для выстрела
def shoot(power):
duty = power_to_duty(power)
shooting_pwm.duty(duty)
time.sleep(0.1) # Время активации механизма выстрела
shooting_pwm.duty(0) # Остановка выстрела

def power_to_duty(power):
return int((power / 100.0) * (duty_max - duty_min) + duty_min)

# Основной цикл
while True:
if time.ticks_ms() - start >= INTERVAL:
led.value(not led.value())
current_speed = speed()
direction_control(angle=45, pwm_pins=pwmen[1:]) # Установка направления
shoot(power=current_speed) # Выстрел с текущей скоростью
for pwm in pwmen[1:]:
pwm.duty(duty_min + current_speed)
print(f'PWM duty: {pwm.duty()}')
time.sleep(0.3) # Задержка для стабилизации работы

4543285576