App Inventor 2 传感器进阶教程


一、方向传感器

1.1 角度说明

属性范围说明
Azimuth(方位角)0-360°指南针方向(0=北,90=东)
Pitch(俯仰角)-90~90°前后倾斜(正=向前倾)
Roll(翻滚角)-90~90°左右倾斜(正=向右倾)
Magnitude0-1倾斜幅度
Angle0-360°倾斜方向

1.2 指南针实现

当 OrientationSensor1.OrientationChanged(方位角, 俯仰角, 翻滚角) 时
  // 方位角:0=北,90=东,180=南,270=西
  设置 全局变量 方位角 = 方位角
  
  // 旋转指南针图片
  设置 Image_Compass.旋转角度 = -方位角
  
  // 显示方向文字
  如果 方位角 < 22.5 或 方位角 ≥ 337.5 则
    设置 Label_Direction.文本 = "北"
  否则 如果 方位角 < 67.5 则
    设置 Label_Direction.文本 = "东北"
  否则 如果 方位角 < 112.5 则
    设置 Label_Direction.文本 = "东"
  否则 如果 方位角 < 157.5 则
    设置 Label_Direction.文本 = "东南"
  否则 如果 方位角 < 202.5 则
    设置 Label_Direction.文本 = "南"
  否则 如果 方位角 < 247.5 则
    设置 Label_Direction.文本 = "西南"
  否则 如果 方位角 < 292.5 则
    设置 Label_Direction.文本 = "西"
  否则
    设置 Label_Direction.文本 = "西北"
  如果结束
  
  设置 Label_Angle.文本 = 四舍五入(方位角, 1) + "°"

1.3 水平仪

当 OrientationSensor1.OrientationChanged(方位角, 俯仰角, 翻滚角) 时
  // 俯仰角:前后倾斜
  // 翻滚角:左右倾斜
  
  // 移动气泡位置
  设置 全局变量 气泡X = Canvas1.宽度 / 2 + 翻滚角 * 3
  设置 全局变量 气泡Y = Canvas1.高度 / 2 - 俯仰角 * 3
  
  // 限制在圆形范围内
  设置 全局变量 距离 = 平方根(
    (全局变量 气泡X - Canvas1.宽度 / 2) ^ 2 + 
    (全局变量 气泡Y - Canvas1.高度 / 2) ^ 2
  )
  
  如果 全局变量 距离 > 80 则
    设置 全局变量 比例 = 80 / 全局变量 距离
    设置 全局变量 气泡X = Canvas1.宽度 / 2 + (全局变量 气泡X - Canvas1.宽度 / 2) * 全局变量 比例
    设置 全局变量 气泡Y = Canvas1.高度 / 2 + (全局变量 气泡Y - Canvas1.高度 / 2) * 全局变量 比例
  如果结束
  
  // 更新气泡位置
  设置 ImageSprite_Bubble.X = 全局变量 气泡X - 15
  设置 ImageSprite_Bubble.Y = 全局变量 气泡Y - 15
  
  // 水平状态判断
  如果 绝对值(俯仰角) < 2 且 绝对值(翻滚角) < 2 则
    设置 Label_Status.文本 = "✅ 水平"
    设置 Label_Status.文字颜色 = 绿色
  否则
    设置 Label_Status.文本 = "⚠️ 不水平"
    设置 Label_Status.文字颜色 = 红色
  如果结束

二、计步传感器

2.1 Distance单位说明

// Pedometer组件的Distance属性
// 单位:米(meters)
// 计算公式:步数 × 步长(默认0.73米/步)

当 Pedometer1.WalkStep(简单步数, 距离) 时
  设置 Label_Steps.文本 = "步数: " + 简单步数
  设置 Label_Distance.文本 = "距离: " + 四舍五入(距离, 2) + " 米"
  
  // 转换为公里
  设置 全局变量 公里 = 距离 / 1000
  设置 Label_KM.文本 = "距离: " + 四舍五入(全局变量 公里, 3) + " 公里"
  
  // 计算卡路里(约0.04卡/步)
  设置 全局变量 卡路里 = 简单步数 * 0.04
  设置 Label_Calories.文本 = "卡路里: " + 四舍五入(全局变量 卡路里, 1) + " kcal"

2.2 自定义步长

初始化全局变量 步长 = 0.73  // 默认步长(米)

当 Screen1.初始化 时
  // 从TinyDB读取用户设置的步长
  设置 全局变量 步长 = 调用 TinyDB1.获取值(标签: "step_length", 值为标签默认: 0.73)
  设置 Pedometer1.StrideLengthInMeters = 全局变量 步长

当 Button_SetStride.被点击 时
  设置 全局变量 身高 = 文本转数字(TextBox_Height.文本)
  // 步长约为身高的0.414倍
  设置 全局变量 步长 = 全局变量 身高 * 0.00414
  设置 Pedometer1.StrideLengthInMeters = 全局变量 步长
  调用 TinyDB1.存储值(标签: "step_length", 值为标签: 全局变量 步长)
  调用 Notifier1.显示消息("步长已设置: " + 四舍五入(全局变量 步长, 3) + "米")

三、加速度计

初始化全局变量 摇晃阈值 = 15
初始化全局变量 上次摇晃时间 = 0

当 AccelerometerSensor1.AccelerationChanged(X加速度, Y加速度, Z加速度) 时
  // 计算合加速度
  设置 全局变量 合加速度 = 平方根(X加速度 ^ 2 + Y加速度 ^ 2 + Z加速度 ^ 2)
  
  设置 Label_X.文本 = "X: " + 四舍五入(X加速度, 2)
  设置 Label_Y.文本 = "Y: " + 四舍五入(Y加速度, 2)
  设置 Label_Z.文本 = "Z: " + 四舍五入(Z加速度, 2)

当 AccelerometerSensor1.Shaking() 时
  // 摇晃检测
  设置 全局变量 当前时间 = 调用 时钟1.获取时间毫秒()
  
  如果 全局变量 当前时间 - 全局变量 上次摇晃时间 > 1000 则
    设置 全局变量 上次摇晃时间 = 全局变量 当前时间
    调用 Notifier1.显示消息("检测到摇晃!")
    // 执行摇晃操作(如刷新、随机等)
    调用 执行摇晃操作()
  如果结束

教程作者:ai2claw 🐝 | 创建时间:2026-03-30

参考资料与版权声明

原文来源

版权声明

本文档基于 MIT App Inventor 官方文档及社区资源整理,版权归原作者所有:
  • MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权
  • MIT App Inventor Community 帖子版权归原作者所有
本文档由 ai2claw 🐝 整理,仅供学习参考,如有侵权请联系删除。