再次态度表态:坛子里大佬很多,对小白的我很友好,只要花些时间还是很好学习。
从坛子里断断续续 ,不间断的代码堆积和逻辑整合终于完成了粗糙的模型功能,嗨~谁叫我菜呢,不过还好我喜欢折腾下
过程贴中完成了光强读取,剩下就是配置计算公式的数组,包括两个配置变量,一个传感器读取值参数:第一个是光圈变量,另外一个是ISO变量,最后就是传感器LUX值。通过网上学习和总结最终的快门结算公式类似如下:
result = (math.pow(N, 2) * 250) / LUX * ISO
print(result)
代码
km1 = (math.pow(my_f_guangquan_daxiao[f_guangquan_daxiao_lest_state_num],2)*250) / ((guangxian.lux + 0.000001) * my_iso[iso_lest_state_num]) #print("快门值为=",km1)
按键配置通过不断轮询进行选择参数,红按钮选择光圈大小,蓝色按钮选择iso配置
while True: current_time = time.localtime() # 定义时间方法 formatted_time = "{:02d}:{:02d}:{:02d}".format(current_time.tm_hour, current_time.tm_min, current_time.tm_sec) #print("%.2f Lux" % guangxian.lux) # 向控制台打印lux数据 # 蓝色按键控制iso值 anjian_lan_state = anjian_lan.value # 获取蓝色按键当前按键状态 if anjian_lan_state != last_anjian_lan_state: # 检测到按键状态改变 #time.sleep(debounce_delay) # 进行延时消抖 anjian_lan_state != anjian_lan.value # 再次获取按键状态确认 if anjian_lan_state != last_anjian_lan_state: # 如果状态确实改变了 if anjian_lan_state == False: # 按键按下(变为低电平) led.value = True # 为led赋值高电平,让led亮起 print("蓝键按下了") iso_lest_state_num += 1 # iso列表索引加1,选择下一个元素 if iso_lest_state_num == len(my_iso): # 判断是否未达到列表末尾 if iso_lest_state_num >= 7: iso_lest_state_num = 0 print("清空iso_lest_one_num列表的位置计数,重新开始") print("当前iso数字为:",my_iso[iso_lest_state_num],"在列表的第",iso_lest_state_num,"位") else: # 按键松开(变回高电平) print("蓝键被松开了") # 可添加按键松开相关操作代码 led.value = False # 取消led亮起状态 last_anjian_lan_state = anjian_lan_state # 更新上一次按键状态记录 anjian_hong_state = anjian_hong.value # 获取红色按键当前按键状态 if anjian_hong_state != last_anjian_hong_state: # 检测到按键状态改变 #time.sleep(debounce_delay) # 进行延时消抖 anjian_hong_state != anjian_hong.value # 再次获取按键状态确认 if anjian_hong_state != last_anjian_hong_state: # 如果状态确实改变了 if anjian_hong_state == False: # 按键按下(变为低电平) led.value = True # 为led赋值高电平,让led亮起 print("红色键按下了") f_guangquan_daxiao_lest_state_num += 1 # f 光圈列表索引加1,选择下一个元素 if f_guangquan_daxiao_lest_state_num == len(my_f_guangquan_daxiao): # 判断是否未达到列表末尾 if f_guangquan_daxiao_lest_state_num >= 7: f_guangquan_daxiao_lest_state_num = 0 print("清空f_guangquan_daxiao_lest_state_num列表的位置计数,重新开始") print("当前光圈大小为:",my_f_guangquan_daxiao[f_guangquan_daxiao_lest_state_num],"在列表的第",f_guangquan_daxiao_lest_state_num,"位") else: # 按键松开(变回高电平) print("红色键被松开了") # 可添加按键松开相关操作代码 led.value = False # 取消led亮起状态 last_anjian_hong_state = anjian_hong_state # 更新上一次按键状态记录 button_state = button.value # 获取当前按键状态 if button_state != last_button_state: # 检测到按键状态改变 #time.sleep(debounce_delay) # 进行延时消抖 button_state = button.value # 再次获取按键状态确认 if button_state!= last_button_state: # 如果状态确实改变了 if button_state == False: # 按键按下(变为低电平) led.value = True # 为led赋值高电平 print("\nboot按键被按下了") # 输出信息 # 这里可以添加按键按下后要执行的具体操作代码,比如切换显示组等 button_kz += 1 # button_kz boot按键控制计数加1 print("这是按下的第",button_kz,"次") #motor_servo.throttle = -1 kacha() if button_kz != 0: # 如果boot按键的计数控制不等于0 display.root_group = group_2 # 切换到显示组2 else: # 按键松开(变回高电平) print("boot按键被松开了") # 可添加按键松开相关操作代码 #button_kz = 0 # 清空boot按键计数控制 motor_servo.throttle = 0 led.value = False # 取消led亮起状态
舵机部分因为很少接触,参考大佬和一些资料,简单的控制代码
pwm = pwmio.PWMOut(board.D10, frequency=50) # 给D10口设置pwmio输出50m赫兹 motor_servo = servo.ContinuousServo(pwm) motor_servo.throttle = 0 # 取值范围 -1 ~ 1,负1正转,正1逆时针旋转 def kacha(): # 定义一个舵机按快门的动作 motor_servo.throttle = -1 time.sleep(0.54) motor_servo.throttle = 1 time.sleep(0.48) motor_servo.throttle = 0
最后的效果图片 快门KM, F 光圈 DJ 电机控制次数,对应快门按钮执行
视频地址如下:
通过百度网盘分享的文件:67-Thirsty Lizzy.mp4
链接:https://pan.baidu.com/s/1SNyH38f4cATQXFfAGQWZAA
提取码:oi3o
年底了突然工作比较忙,先争取完成基础功能,等过完年底不忙了继续研究下蓝牙无线控制部分的代码。
感谢电子产品世界EEPW和digikey 平台,让我有机会接触软件部分的控制,开启新的世界。常来论坛,常来常新~