7104浏览
查看: 7104|回复: 1

[入门教程] 掌控板功能展示菜单制作

[复制链接]
初衷:通过菜单调用展示掌控板的基本硬件功能。
掌控板载传感器及相应执行器如下:
  • 三轴加速度计MSA300,测量范围:±2G
  • 光线传感器
  • 麦克风
  • 3 颗全彩ws2812灯珠
  • 1.3英寸OLED显示屏,支持16*16字符显示,分辨率128x64
  • 无源蜂鸣器
  • 支持2个物理按键(A/B)、6个触摸按键
  • 支持1路鳄鱼夹接口,可方便接入各种阻性传感器


设计功能菜单项目有12个,列表如下:
  • 显示环境声音
  • 显示环境光线
  • 显示三轴加速度计各轴值
  • 显示物理按键值
  • 显示触摸按键值
  • 无源蜂鸣器奏乐
  • oled随机显示点线圆
  • oled显示你好世界
  • 变色灯
  • 流水灯
  • 呼吸灯
  • 内部文件系统

掌控板oled液晶屏无法一次展示所有项目内容,故需分页展示。

考虑人机关系特点,设计掌控板菜单按键组合如下:
  • 按键A功能下移
  • 按键B功能上移
  • 触摸P开始
  • 触摸N结束
  • 触摸Y功能翻页下移
  • 触摸O功能翻页上移
  • 触摸T选定当前功能展示
  • 触摸H选定当前功能结束

编写烧录程序后效果如图所示:
掌控板功能展示菜单制作图1掌控板功能展示菜单制作图3
掌控板功能展示菜单制作图2
掌控板功能展示菜单制作图4

相关程序代码如下所示(各位同仁可以根据兴趣自行添加修改菜单项目):
[mw_shl_code=python,true]from machine import Pin, ADC, PWM, I2C, SPI, Timer, TouchPad
from mpython import *
import time,os,random

def clearScreen():
  display.fill(0)
  display.show()
def f01():  #"显示环境声音"
  clearScreen()
  display.DispChar(menuitems[0],0,0)
def f02():  #"显示环境光线"
  clearScreen()
  display.DispChar(menuitems[1],0,0)
def f03():  #"显示三轴加速度计各轴值"
  clearScreen()
  display.DispChar(menuitems[2],0,0)
def f04():  #"显示物理按键值"
  clearScreen()
  display.DispChar(menuitems[3],0,0)
def f05():  #"显示触摸按键值"
  clearScreen()
  display.DispChar(menuitems[4],0,0)
def f06():  #"无源蜂鸣器奏乐"
  clearScreen()
  display.DispChar(menuitems[5],0,0)
  song = [1, 2, 3, 1, 1, 2, 3, 1, 3, 4, 5, 3, 4, 5]
  delaytime = [250, 250, 250, 250, 250, 250,250, 250, 250, 250, 500, 250, 250, 500]
  m = [525, 589, 661, 700, 786, 882, 988]
  display.DispChar("触摸H结束当前功能展示",0,48)
  display.show()
  isContinue = True
  while isContinue:
    buzz = PWM(Pin(16), freq=500, duty=0)
    jp=""
    display.fill_rect(0,28,128,16,0)
    for i in range(14):
      buzz.freq(m[song]) #调用数组频率(嵌套音符数组)
      #buzz.pwm.freq(m[song]) #调用数组频率(嵌套音符数组)
      buzz.duty(512) #音量 512
      jp=jp+str(song)
      display.DispChar(jp,14,28)
      display.show()
      time.sleep_ms(delaytime) #时长 250 毫秒
      isContinue=touchPad_H.read()>100
      if not isContinue:
        buzz.duty(0)
        break
def f07():  #"oled随机显示点线圆"
  clearScreen()
  display.DispChar(menuitems[6],0,0)
def f08():  #"oled显示你好世界"
  clearScreen()
  display.DispChar(menuitems[7],0,0)
def f09():  #"变色灯"
  clearScreen()
  display.DispChar(menuitems[8],0,0)
def f10():  #"流水灯"
  clearScreen()
  display.DispChar(menuitems[9],0,0)
def f11():  #"呼吸灯"
  clearScreen()
  display.DispChar(menuitems[10],0,0)
def f12():  #"内部文件系统"
  clearScreen()
  display.DispChar(menuitems[11],0,0)

BTNA = Pin(0, mode=Pin.OPEN_DRAIN,pull=Pin.PULL_UP,value=1)
BTNB = Pin(2, mode=Pin.OPEN_DRAIN,pull=Pin.PULL_UP,value=1)
touchPad_P = TouchPad(Pin(27))
touchPad_Y = TouchPad(Pin(14))
touchPad_T = TouchPad(Pin(12))
touchPad_H = TouchPad(Pin(13))
touchPad_O = TouchPad(Pin(15))
touchPad_N = TouchPad(Pin(4))

display.fill(0)
display.show()
display.DispChar("功能选择按键A下B上",0,0)
display.DispChar("功能翻页触摸Y下O上",0,16)
display.DispChar("全局开始触摸P结束N",0,32)
display.DispChar("当前功能触摸T结束H",0,48)
display.show()
while True:
  if touchPad_P.read() < 100:
    break #触摸P开始各种功能尝试

menuitems=["显示环境声音","显示环境光线","显示三轴加速度计各轴值","显示物理按键值","显示触摸按键值","无源蜂鸣器奏乐","oled随机显示点线圆","oled显示你好世界","变色灯","流水灯","呼吸灯","内部文件系统"]
menuselectedchar="★"
menuselectednumthstart=1
menuselectednumth=menuselectednumthstart
menuselectednumth_before=0
menuselectednumthend=12
numperpage=4
pagenumth=1
isTrue=True
while isTrue:
  if touchPad_N.read() < 100:    #全局退出
    isTrue=False
  if touchPad_T.read() < 100:    #当前功能开始
    print(str(touchPad_T.read())+"///menuselectednumth:"+str(menuselectednumth))
    menuselectednumth_before=0   #当前功能结束后可以重新绘制菜单
    if menuselectednumth==1:
      f01()
    elif menuselectednumth==2:
      f02()
    elif menuselectednumth==3:
      f03()
    elif menuselectednumth==4:
      f04()
    elif menuselectednumth==5:
      f05()
    elif menuselectednumth==6:
      f06()
    elif menuselectednumth==7:
      f07()
    elif menuselectednumth==8:
      f08()
    elif menuselectednumth==9:
      f09()
    elif menuselectednumth==10:
      f10()
    elif menuselectednumth==11:
      f11()
    elif menuselectednumth==12:
      f12()
  #按键AB处理menuselectedID开始
  if BTNA.value() == 0 and  BTNB.value() == 1 :
    menuselectednumth=menuselectednumth+1
  elif BTNA.value() == 1 and  BTNB.value() == 0 :
    menuselectednumth=menuselectednumth-1
  #按键AB处理menuselectedID结束
  #触摸YO处理menuselectedID开始,触摸Y功能翻页下移,触摸O功能翻页上移
  if touchPad_Y.read() < 100:
    if menuselectednumth/numperpage==menuselectednumth//numperpage:
      menuselectednumth=menuselectednumth+1
    else:
      menuselectednumth=(menuselectednumth//numperpage+1)*numperpage+1
  elif touchPad_O.read() < 100:
    if menuselectednumth/numperpage==menuselectednumth//numperpage:
      menuselectednumth=menuselectednumth-numperpage
    else:
      menuselectednumth=(menuselectednumth//numperpage-1)*numperpage+1
  #触摸YO处理menuselectedID结束
  #处理过界开始
  if menuselectednumth<menuselectednumthstart:
    menuselectednumth=menuselectednumthstart
  elif menuselectednumth>menuselectednumthend:
    menuselectednumth=menuselectednumthend
  #处理过界结束
  #显示开始
  if menuselectednumth_before!=menuselectednumth:
    display.fill(0)
    display.show()
    pagenumth=(menuselectednumth-1)//numperpage+1
    print("menuselectednumth:"+str(menuselectednumth)+"///pagenumth:"+str(pagenumth))
    for menuid in range(menuselectednumthend):
      if (menuid+1)>=(pagenumth-1)*numperpage+1 and (menuid+1)<=pagenumth*numperpage:
        if (menuid+1)%numperpage==0:
          if (menuid+1)==menuselectednumth:
            display.DispChar(menuselectedchar,0,(numperpage-1)*16)
          display.DispChar(menuitems[menuid],10,(numperpage-1)*16)
        else:
          if (menuid+1)==menuselectednumth:
            display.DispChar(menuselectedchar,0,((menuid+1)%numperpage-1)*16)
          display.DispChar(menuitems[menuid],10,((menuid+1)%numperpage-1)*16)
    menuselectednumth_before=menuselectednumth
    display.show()
  #显示结束
  time.sleep_ms(200)
else:
  display.fill(0)
  display.DispChar("end.",56,28)
  display.show()
[/mw_shl_code]

rzyzzxw  版主

发表于 2018-11-5 22:21:27

好棒的项目帖子啊,感谢分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail