做百度移动网站点击,手机网站页面范例,图片演示dw做网站,wordpress前台投稿本次更新增加了前后倾斜#xff08;每次动作交换前部和后部高度#xff09;、蹲起与抬脚动作#xff0c;均位于用于连续执行动作的function函数中#xff0c;但实测抬脚动作需要先启动function函数的另一项功能才能正常开启#xff0c;代码检查无误#xff0c;应该是Micr…本次更新增加了前后倾斜每次动作交换前部和后部高度、蹲起与抬脚动作均位于用于连续执行动作的function函数中但实测抬脚动作需要先启动function函数的另一项功能才能正常开启代码检查无误应该是MicroPython固件的bug。另外对于判断功能增加了elif语句的使用避免重复使用if语句以提高运行效率。
程序如下
import time
from machine import SoftI2C,Pin
from servo import Servos
import _thread
i2cSoftI2C(sdaPin(9),sclPin(8),freq10000)
servosServos(i2c,address0x40) servos.position(0,90)
servos.position(1,90)
servos.position(2,90)
servos.position(3,90)
servos.position(4,90)
servos.position(5,90)
servos.position(6,90)
servos.position(7,90)
servos.position(8,120)
servos.position(9,120)
servos.position(10,120)
servos.position(11,120)
time.sleep(1) Height10 #前部高度0为最高
Height20 #后部高度0为最高
mode0
delay300 def straight(angle): #直行给所有转向舵机写入相应角度以调整方向 servos.position(0,angle) servos.position(1,angle) servos.position(2,angle) servos.position(3,angle) def turn(angle): #倾斜 servos.position(0,angle) servos.position(1,angle) servos.position(2,180-angle) servos.position(3,180-angle) def tilt(height1,height2): #前后倾斜,局部变量与全局变量通过大小写区分 servos.position(4,90-height1) servos.position(5,90-height1) servos.position(6,90-height2) servos.position(7,90-height2) servos.position(8,120-height1-height1) #底部舵机使用两倍偏置以确保平衡 servos.position(9,120-height1-height1) servos.position(10,120-height2-height2) servos.position(11,120-height2-height2) def crawl(step,angle): #爬行第一个参数为步骤数,第二个参数为相比直立状态降低的角度步长随第二个参数的增大而增大 if step1: servos.position(4,90-angle-angle) servos.position(7,90-angle) if step2: servos.position(5,90-angle-angle) if step3: servos.position(6,90-angle-angle) if step4: servos.position(4,90-angle) servos.position(5,90-angle) servos.position(6,90-angle) servos.position(7,90-angle-angle)
def walk(step,angle): #步行第一个参数为步骤数,第二个参数为相比直立状态降低的角度步长随第二个参数的增大而增大 if step1: servos.position(4,90-angle-angle) servos.position(5,90-angle) servos.position(6,90-angle) servos.position(7,90-angle-angle) if step2: servos.position(4,90-angle) servos.position(5,90-angle-angle) servos.position(6,90-angle-angle) servos.position(7,90-angle) i10
i20
def function(i1, i2): #功能函数执行连续进行的动作 global mode global delay global Height1 global Height2 while True: if Height145: #参数超出范围时设为最大值 Height145 if Height245: #参数超出范围时设为最大值 Height245 if mode0 or mode6: #不执行功能 Step0 #步数复位 elif mode1: #爬行功能 if Step0: tilt(Height1,Height1) #先降低高度 Step1 #改变变量的值以进入下一步骤 elif Step1: crawl(1,Height1) Step2 elif Step2: crawl(2,Height1) Step3 elif Step3: crawl(3,Height1) Step4 elif Step4: crawl(4,Height1) Step1 elif mode2: #爬行功能反向 if Step0: tilt(Height1,Height1) #先降低高度 Step4 #改变变量的值以进入下一步骤 elif Step4: crawl(4,Height1) Step3 elif Step3: crawl(3,Height1) Step2 elif Step2: crawl(2,Height1) Step1 elif Step1: crawl(1,Height1) Step4 elif mode3: #步行功能由于只有两个步骤无正反向调节可能不能正常使用后续视实际测试情况进行调整 if Step2: Step0 if Step0: tilt(Height1,Height1) #先降低高度 Step1 #改变变量的值以进入下一步骤 elif Step1: walk(1,Height1) Step2 elif Step2: walk(2,Height1) Step1 elif mode4: #前后倾斜 if Step2: Step0 if Step0: tilt(0,0) #回到直立状态 Step1 #改变变量的值以进入下一步骤 elif Step1: tilt(Height1,Height2) Step2 elif Step2: tilt(Height1,Height2) #向反方向倾斜 Step0 elif mode5: #蹲起动作 if Step1: Step0 if Step0: tilt(0,0) #回到直立状态 Step1 #改变变量的值以进入下一步骤 elif Step1: tilt(Height1,Height2) Step0 elif mode6: #抬脚动作 tilt(0,0) #回到直立状态 if Step1: servos.position(4,20) Step2 #改变变量的值以进入下一步骤 elif Step2: servos.position(4,90) Step3 elif Step3: servos.position(5,20) Step4 elif Step4: servos.position(5,90) Step1 time.sleep_ms(delay) #开启线程
_thread.start_new_thread(function, (i1, i2)) while True: try: dataint(input(input)) #输入9位数字 modedata//100000000 #第一位为模式 Height1data%100000000 #第二、三位为前部高度或步长 Height1Height1//1000000 Height2data%1000000 #第四、五、六位为后部高度或旋转角度 Height2Height2//1000 delaydata%1000 #最后三位为延时 #非连续执行的功能在此处执行 if mode7: #直行功能 if Height2180: #参数超出范围则不执行下同 straight(Height2) elif mode8: #转向功能 if Height2180: turn(Height2) elif mode9: #倾斜功能 if Height160 and Height260: tilt(Height1,Height2) except: pass