# Sensor **Repository Path**: mr_znn/Sensor ## Basic Information - **Project Name**: Sensor - **Description**: 本项目介绍了iPhone自带的各种传感器 包括• 环境光传感器 应用场景:从明亮的室外走向黑暗的室内,手机屏幕亮度自动降低,从而使眼睛更为舒适;mac键盘背光灯;相机闪光灯 • 距离传感器 检测是否有其他物体靠近屏幕 应用场景:打电话时,电话贴紧耳朵屏幕会变暗,这样可以省电,也可以防止误触 • 磁力传感器 感应地球磁场获得方向 应用场景:电子罗盘和导航应用 • 内部温度传感器 用于检测内部组件温度,当温度超过系统设定的温度,会提示温度过高,提高设备的安全性和稳定性 • 湿度传感器 就是一个雨水话变红的试纸 • 陀螺仪 iPhone 4之后添加的,检测设备XYZ轴上所旋转的角速度 应用场景:赛车游戏中 • 加速度计 用于检测XYZ轴上的加速度 应用场景:摇一摇,计步器 - **Primary Language**: Objective-C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2017-03-08 - **Last Updated**: 2023-02-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #Sensor #一 传感器简介 ##是一种检测装置,能感受被测量的信息,并能将感受到的信息,按一定规律变化成为电信号或者其他所需形式的信息输出 #二 iPhone中常见的传感器 ##• 环境光传感器 ###应用场景:从明亮的室外走向黑暗的室内,手机屏幕亮度自动降低,从而使眼睛更为舒适;mac键盘背光灯;相机闪光灯 ##• 距离传感器 ###检测是否有其他物体靠近屏幕 ###应用场景:打电话时,电话贴紧耳朵屏幕会变暗,这样可以省电,也可以防止误触 ##• 磁力传感器 ###感应地球磁场获得方向 ###应用场景:电子罗盘和导航应用 ##• 内部温度传感器 ###用于检测内部组件温度,当温度超过系统设定的温度,会提示温度过高,提高设备的安全性和稳定性 ##• 湿度传感器 ###就是一个雨水话变红的试纸 ##• 陀螺仪 ###iPhone 4之后添加的,检测设备XYZ轴上所旋转的角速度 ###应用场景:赛车游戏中 ##• 加速度计 ###用于检测XYZ轴上的加速度 ###应用场景:摇一摇,计步器 #三 实际应用 ##• 距离传感器    - (void)viewDidLoad {     [super viewDidLoad];          //默认情况下距离传感器是关闭的,使用时需打开距离传感器     //  [UIApplication sharedApplication].proximitySensingEnabled = YES;  ios3之前     [UIDevice currentDevice].proximityMonitoringEnabled = YES;          //监听有物品靠近或是离开     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(ProximityStateDidChange) name:UIDeviceProximityStateDidChangeNotification object:nil]; } - (void)ProximityStateDidChange {     if ([UIDevice currentDevice].proximityState) {         _stutaLabel.text = @"有物品靠近";     }else{         _stutaLabel.text = @"有物品离开";              } } ##• 加速度计 • 旧API ios4之前 -(void)viewDidLoad{     [super viewDidLoad];    //1 获取UIAccelerometer对象     UIAccelerometer * acceler = [UIAccelerometer sharedAccelerometer];     //2 设置代理     acceler.delegate = self;     //3 设置采样间隔     acceler.updateInterval = 1.0; //代理方法 旧API ios4之前 -(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{     //NSLog(@"x:%f-y:%f-z:%f",acceleration.x,acceleration.y,acceleration.z);     _x.text = [NSString stringWithFormat:@"x轴:%f",acceleration.x];     _y.text = [NSString stringWithFormat:@"y轴:%f",acceleration.y];     _z.text = [NSString stringWithFormat:@"z轴:%f",acceleration.z]; } • 新API 从iOS4开始,苹果专门封装了一个和运动相关的框架CoreMotion,可以通过该框架获取加速度计的数值  获取加速度计有两种方式  1. push方式:实时采集所有数据(采集频率高) //懒加载创建运动管理者 -(CMMotionManager *)manager{     if (_manager==nil) {         _manager = [[CMMotionManager alloc]init];     }     return _manager; } /**  *  push方式  */ -(IBAction)push{         //判断加速度计是否可用     if (!self.manager.isAccelerometerAvailable) {         _infoLabel.text = @"加速度计不可用,请更换手机";     }     //设置采样间隔     self.manager.accelerometerUpdateInterval = 0.3;     //开始采集     [self.manager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {         if (error) {                          _infoLabel.text = [NSString stringWithFormat:@"%@",error];             return ;         }         _x.text = [NSString stringWithFormat:@"x轴:%lf",accelerometerData.acceleration.x];         _y.text = [NSString stringWithFormat:@"y轴:%lf",accelerometerData.acceleration.y];         _z.text = [NSString stringWithFormat:@"z轴:%lf",accelerometerData.acceleration.z];     }]; }  2. pull方式:在有需要的时候,再主动去采集 /**  *  pull方式  */ -(IBAction)pull{     //判断加速度计是否可用     if (!self.manager.isAccelerometerAvailable) {         _infoLabel.text = @"加速度计不可用,请更换手机";     }     //开始采样     [self.manager startAccelerometerUpdates];          _x.text = [NSString stringWithFormat:@"x轴:%lf",self.manager.accelerometerData.acceleration.x];     _y.text = [NSString stringWithFormat:@"y轴:%lf",self.manager.accelerometerData.acceleration.y];     _z.text = [NSString stringWithFormat:@"z轴:%lf",self.manager.accelerometerData.acceleration.z]; } ##• 陀螺仪 只能通过CoreMotion,可以通过该框架获取加陀螺仪的数值      获取加速度计有两种方式      1. push方式:实时采集所有数据(采集频率高) //懒加载创建运动管理者 -(CMMotionManager *)manager{     if (_manager==nil) {         _manager = [[CMMotionManager alloc]init];     }     return _manager; } /**  *  push方式  */ -(IBAction)push{          //判断陀螺仪是否可用     if (!self.manager.isGyroAvailable) {         _infoLabel.text = @"陀螺仪不可用,请更换手机";     }     //设置采样间隔     self.manager.gyroUpdateInterval = 0.3;     //开始采集     [self.manager startGyroUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMGyroData * _Nullable gyroData, NSError * _Nullable error) {         if (error) {             _infoLabel.text = [NSString stringWithFormat:@"%@",error];             return ;         }         _x.text = [NSString stringWithFormat:@"x轴:%lf",gyroData.rotationRate.x];         _y.text = [NSString stringWithFormat:@"y轴:%lf",gyroData.rotationRate.y];         _z.text = [NSString stringWithFormat:@"z轴:%lf",gyroData.rotationRate.z];     }];           }      2. pull方式:在有需要的时候,再主动去采集 /**  *  pull方式  */ -(IBAction)pull{     //判断陀螺仪是否可用     if (!self.manager.isAccelerometerAvailable) {         _infoLabel.text = @"陀螺仪不可用,请更换手机";     }     //开始采样     [self.manager startGyroUpdates];          _x.text = [NSString stringWithFormat:@"x轴:%lf",self.manager.gyroData.rotationRate.x];     _y.text = [NSString stringWithFormat:@"y轴:%lf",self.manager.gyroData.rotationRate.y];     _z.text = [NSString stringWithFormat:@"z轴:%lf",self.manager.gyroData.rotationRate.z]; }