#從machine導入Pin, ADC, PWM, I2C螢幕硬體參數設定類別
from machine import Pin, ADC, PWM,I2C
#導入時間函式
from time import sleep
#引入network模組用於處理網路相關功能
import network
# 印出連接 Wi-Fi 的訊息,並使用 end="" 讓下一行的輸出接在後面
print("Connecting to WiFi", end="")
# 建立一個網路接口物件,指定為 station 模式 (STA_IF),也就是作為 Wi-Fi 客戶端
wlan = network.WLAN(network.STA_IF)
# 啟用網路接口
wlan.active(True)
# 連接至指定的 Wi-Fi 網路,這裡是 "Wokwi-GUEST",密碼為空字串
wlan.connect("Wokwi-GUEST", "")
# 連線成功後,印出 " Connected!"
print(" Connected!")
# 印出網路接口的配置資訊,包含 IP 位址、子網路掩碼、網關等
print(wlan.ifconfig())
#導入I2C螢幕函式
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
sda=Pin(0)
scl=Pin(1)
i2c=I2C(0,sda=sda,scl=scl,freq=40000)
print(i2c.scan())
I2C_ADDR=39
I2C_ROWS=2
I2C_COLS=16
lcd=I2cLcd(i2c,I2C_ADDR,I2C_ROWS,I2C_COLS)
# 定義伺服馬達的控制腳位
servoPin = 17 # 伺服馬達接到GPIO 17腳位
servo = PWM(Pin(servoPin)) # 創建一個PWM對象,控制伺服馬達
servo.freq(50) # 設定PWM頻率為50Hz,這是伺服馬達常見的控制頻率
#設定連接到ADC(GP27)
potPin = 27
pot = ADC(Pin(potPin)) # 創建一個ADC對象,用來讀取電位器的模擬輸入
#電壓轉換因子
factor = 3.3/ (65535)
#電壓值
volt=0
#無限循環
while True:
#lcd從位置0,0開始顯示
lcd.move_to(0,0)
#讀取類比輸入值16bit無號整數
reading = pot.read_u16()
potVal = pot.read_u16() # 讀取電位器的數值,這個數值範圍是0到65535
# print(potVal) # 可以解除註解來查看電位器的數值
sleep(0.05) # 等待0.05秒
# 根據電位器的數值計算伺服馬達的角度
angle = 180 / 65535 * potVal # 將電位器的數值轉換為角度(0到180度範圍)
# 將角度轉換為伺服馬達所需的PWM數值,範圍是0到65535
writeVal = 6553 / 180 * angle + 1638 # 計算對應的PWM值,這樣可以讓伺服馬達達到對應角度
# 設定伺服馬達的PWM占空比,控制伺服馬達轉動到指定角度
servo.duty_u16(int(writeVal)) # 設定伺服馬達的PWM佔空比為計算出的數值
sleep(0.02) # 等待0.02秒,讓伺服馬達完成移動
#將輸入值轉至PWM工作周期值
servo.duty_u16(reading)
#將輸入值轉成電壓值
vlot = reading * factor
#將輸入電壓值以LCD螢幕顯示
lcd.putstr("volt="+str(vlot))
#lcd從位置0,1開始顯示
lcd.move_to(0, 1)
#將馬達旋轉角度以LCD螢幕顯示
lcd.putstr("angle="+str(angle))