from machine import Pin, ADC, PWM
import time
# กำหนดพินสำหรับ potentiometers (ADC)
pot1 = ADC(Pin(32)) # กำหนดพิน ADC ของ potentiometer ตัวที่ 1
pot2 = ADC(Pin(33)) # กำหนดพิน ADC ของ potentiometer ตัวที่ 2
pot3 = ADC(Pin(34)) # กำหนดพิน ADC ของ potentiometer ตัวที่ 3
pot4 = ADC(Pin(35)) # กำหนดพิน ADC ของ potentiometer ตัวที่ 4
# กำหนดพินสำหรับ Servos (PWM)
servo1 = PWM(Pin(12), freq=50) # กำหนดพิน PWM ของ Servo ตัวที่ 1
servo2 = PWM(Pin(13), freq=50) # กำหนดพิน PWM ของ Servo ตัวที่ 2
servo3 = PWM(Pin(14), freq=50) # กำหนดพิน PWM ของ Servo ตัวที่ 3
servo4 = PWM(Pin(15), freq=50) # กำหนดพิน PWM ของ Servo ตัวที่ 4
# ฟังก์ชันสำหรับแปลงค่า ADC (0-4095) เป็นองศาของ Servo (0-180)
def map_adc_to_angle(value):
return int((value / 4095) * 180)
# ฟังก์ชันสำหรับแปลงค่าองศาเป็น duty cycle ของ PWM (50Hz)
def angle_to_duty(angle):
# PWM duty cycle ปกติจะอยู่ในช่วง 40-115 (สำหรับองศา 0-180)
# ค่าเหล่านี้ขึ้นอยู่กับ Servo ที่คุณใช้อยู่
return int((angle / 180) * 75 + 40)
# ลูปหลักสำหรับควบคุม Servo ตามค่า potentiometer
while True:
# อ่านค่าจาก potentiometers
pot1_value = pot1.read()
pot2_value = pot2.read()
pot3_value = pot3.read()
pot4_value = pot4.read()
# แปลงค่า ADC เป็นมุมของ Servo
angle1 = map_adc_to_angle(pot1_value)
angle2 = map_adc_to_angle(pot2_value)
angle3 = map_adc_to_angle(pot3_value)
angle4 = map_adc_to_angle(pot4_value)
# แปลงมุมเป็น duty cycle
servo1.duty(angle_to_duty(angle1))
servo2.duty(angle_to_duty(angle2))
servo3.duty(angle_to_duty(angle3))
servo4.duty(angle_to_duty(angle4))
# หน่วงเวลาเล็กน้อยเพื่อความเสถียร
time.sleep(0.1)