1.概述
电子测光表是摄影中常用的辅助工具,用于测量光线的强度和亮度。它可以帮助摄影师在拍摄时选择合适的曝光参数,从而获得更好的照片效果。电子测光表通常由一个显示屏、一个测光元件和一个电池组成。显示屏用于显示测量结果,测光元件用于测量光线强度,电池为设备提供电源。
2.功能
电子测光表的主要功能是测量光线的强度和亮度,并根据测量结果给出曝光建议。通过按键调节光圈、快门速度和ISO感光度,用户可以轻松地调整曝光参数,从而获得更好的照片效果。电子测光表还可以测量光线角度和距离,帮助用户更好地掌握拍摄场景的光线分布。此外,电子测光表还可以蓝牙货WiFi进行无线连接,实现实时测光和自动曝光数据的实时上传(未实现)。
3.软件功能设计
屏幕ui简单设计了一个UI , 页面刚进入滚动显示 "Hello EEPW & DigiKey" 然后进入测光页面
测光的原理根据教程中的描述
初始化代码
要做的功能是初始话按键,初始化屏幕,初始化传感器,初始化菜单
AV = ['1 ','1.4','2','2.8','4','5.6','8','11','16', '22','32'] TV = [ '1 ', '1/2 ', '1/4 ', '1/8 ', '1/15 ', '1/30 ', '1/60 ', '1/125 ', '1/250 ', '1/500 ', '1/1000'] SV = [ '100 ', '200 ', '400 ', '800 ', '1600'] i2c = board.STEMMA_I2C() sensor = adafruit_bh1750.BH1750(i2c)
按键扫描,键值获取程序
key0 = DigitalInOut(board.BUTTON) key1 = DigitalInOut(board.A4) key2 = DigitalInOut(board.A5) def keyInit(): key0.direction = Direction.INPUT key0.pull = Pull.UP key1.direction = Direction.INPUT key1.pull = Pull.UP key2.direction = Direction.INPUT key2.pull = Pull.UP def cameraInfo(old_key_value : int): key_value = old_key_value svIdx = 0 avIdx = 0 showCameraInfo(svIdx, avIdx) while True: key_value=isKeyPressed() if old_key_value != key_value: old_key_value = key_value if key_value == KEY_D0: break elif key_value == KEY_D1: svIdx += 1 if len(SV) <= svIdx : svIdx = 0 showCameraInfo(svIdx, avIdx) elif key_value == KEY_D2: avIdx +=1 if avIdx >= len(AV): avIdx = 0 showCameraInfo(svIdx, avIdx)
设计一个菜单通过 按钮切换测光表的测光模式
菜单中有,低,中,高三种模式。
display = board.DISPLAY splash = displayio.Group() display.root_group = splash if mode == 0: text_mode = "Mode High" elif mode == 1: text_mode = "Mode Low" elif mode == 2: text_mode = "Mode Middle" text_mode_area = label.Label(terminalio.FONT, text=text_mode, color=TEXT_COLOR) text_mode_group = displayio.Group( scale=FONTSCALE, x=0, y=display.height // 4 ) text_mode_group.append(text_mode_area) splash.append(text_mode_group) text_lux = ("%0.2f" % sensor.lux) + "Lux" text_lux_area = label.Label(terminalio.FONT, text=text_lux, color=TEXT_COLOR) text_lux_group = displayio.Group( scale=FONTSCALE, x=0, y=display.height // 2 ) text_lux_group.append(text_lux_area) splash.append(text_lux_group)
完成贴贴图:
以上是实现功能的一些关键代码,由于以前没有用过cpy写过程序,这里参考了论坛里坛友的代码,非常感谢,也感谢EEPW
组织的活动。