美文网首页
蓝牙电子秤

蓝牙电子秤

作者: CMD独白 | 来源:发表于2016-05-17 07:34 被阅读148次
    #import "ViewController.h"
    #import <CoreBluetooth/CoreBluetooth.h>
    #import "NSObject+GetWeidth.h"
    
    #define NAME @"YUNMAI-SIGNAL-CW"
    
    @interface ViewController ()<CBCentralManagerDelegate,CBPeripheralDelegate,UITableViewDelegate,UITableViewDataSource>
    
    //主设管理中心,需要且必须是单例
    @property (nonatomic, strong) CBCentralManager *centralManager;//中心管理者
    @property (nonatomic, retain) NSMutableArray *peripheralList;//外设列表
    @property (nonatomic, strong) CBPeripheral *peripheral;
    
    @property (strong, nonatomic) IBOutlet UITableView *showFindDevicesView;
    
    @property (strong, nonatomic) IBOutlet UITextView *showReadDataView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.showFindDevicesView.delegate = self;
        self.showFindDevicesView.dataSource = self;
    }
    
    //MARK:------视图--------
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        return self.peripheralList.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        static NSString *cellID = @"id";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
        if (!cell) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
        }
        
        CBPeripheral *peripheral = self.peripheralList[indexPath.row];
        cell.textLabel.text = peripheral.name==nil?@"匿名设备":peripheral.name;
        return cell;
    }
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        CBPeripheral *peripheral = self.peripheralList[indexPath.row];
        self.peripheral = peripheral;
        [self.centralManager cancelPeripheralConnection:self.peripheral];
        [self.centralManager connectPeripheral:self.peripheral options:nil];
    }
    
    - (void)alertViewWithMessage:(NSString *)message{
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"连接状态" message:message preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *act = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            
            [self dismissViewControllerAnimated:YES completion:nil];
        }];
        [alert addAction:act];
        [self presentViewController:alert animated:YES completion:nil];
    }
    
    //MARK:------功能--------
    - (IBAction)searDevices:(id)sender {
    
        [self.centralManager scanForPeripheralsWithServices:nil options:@{CBCentralManagerScanOptionAllowDuplicatesKey:@(NO)}];
        
    }
    
    //MARK:-------中心管理者的方法--------
    - (void)centralManagerDidUpdateState:(CBCentralManager *)central{
        
        NSString *message = nil;
        switch (central.state) {
            case CBCentralManagerStateUnknown: {
                message = @"中心设备 未知状态";
                break;
            }
            case CBCentralManagerStateResetting: {
                message = @"中心设备 重启中";
                break;
            }
            case CBCentralManagerStateUnsupported: {
                message = @"中心设备 不支持";
                break;
            }
            case CBCentralManagerStateUnauthorized: {
                message = @"中心设备 未授权";
                break;
            }
            case CBCentralManagerStatePoweredOff: {
                message = @"中心设备 关闭";
                break;
            }
            case CBCentralManagerStatePoweredOn: {
                message = @"中心设备 开启";
                break;
            }
        }
    
    }
    
    - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *, id> *)advertisementData RSSI:(NSNumber *)RSSI{
    
        [self.peripheralList addObject:peripheral];
        
        if ([peripheral.name isEqualToString:NAME]) {
            [central stopScan];
    
            dispatch_async(dispatch_get_main_queue(), ^{
                [self.showFindDevicesView reloadData];
            });
        }
    }
    
    - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{
        
        self.peripheral.delegate = self;
        [self.peripheral discoverServices:nil];
        
        [self alertViewWithMessage:@"设备已连接成功"];
        
    }
    
    
    - (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(nullable NSError *)error{
        [self alertViewWithMessage:error.description];
    }
    
    - (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(nullable NSError *)error{
        
        [self alertViewWithMessage:@"设备已断开"];
    }
    
    
    //MARK:-------外设的代理方法---------
    //连接上外设 可以获得所有的服务
    - (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(nullable NSError *)error{
        
        for (CBService *service in peripheral.services) {
    //        会去调用 获得特征的代理
            [peripheral discoverCharacteristics:nil forService:service];
    
        }
        
    }
    //获得特征的回调
    - (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{
        
        for (CBCharacteristic *cha in service.characteristics) {
    //        回去调用 获得特征值的代理
            [peripheral readValueForCharacteristic:cha];
            [peripheral setNotifyValue:YES forCharacteristic:cha];
        }
    
    }
    
    //获得特征值
    - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(nullable NSError *)error{
    
        
        NSString *content = [NSString stringWithFormat:@"%@",characteristic];
        
        NSLog(@"获得到的数据:%@",characteristic);
    
        if (content==nil) {
            return;
        }
        content = [content substringWithRange:NSMakeRange(content.length - 7, 4)];
        double curNum = [content getWeidthByHEX:content];;
        
        if (self.memoryNum == [content getWeidthByHEX:content] && self.memoryNum >0) {
           
                __weak ViewController *weakVC = self;
                dispatch_async(dispatch_get_main_queue(), ^{
                    
                    self.showReadDataView.text = [NSString stringWithFormat:@"您现在体重:\n%0.2f斤",weakVC.memoryNum*2];
                });
            
        }
        self.memoryNum = curNum;
    }
    
    
    //MARK:-----创建对象-------
    - (CBCentralManager *)centralManager{
        if (!_centralManager) {
            dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
            _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:queue];
        }
        return _centralManager;
    }
    
    - (NSMutableArray *)peripheralList{
        if (!_peripheralList) {
            _peripheralList = [NSMutableArray array];
        }
        return _peripheralList;
    }
    
    
    

    在.h文件中

    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController
    
    @property (nonatomic, assign) double memoryNum;
    @end
    
    
    
    #import "NSObject+GetWeidth.h"
    
    @implementation NSObject (GetWeidth)
    
    - (double)getWeidthByHEX:(NSString *)dataString{
        
        double weidth = 0;
        dataString = [dataString lowercaseString];
        
        NSDictionary *returnNumDic = @{@"1":@1,@"2":@2,@"3":@3,@"4":@4,@"5":@5,@"6":@6,@"7":@7,@"8":@8,@"9":@9,@"a":@10,@"b":@11,@"c":@12,@"d":@13,@"e":@14,@"f":@15};
        
        for (int i = 0; i < dataString.length ; i++) {
            NSString *num = [dataString substringWithRange:NSMakeRange(i, 1)];
            
            int index = [returnNumDic[num] intValue];
           
            switch (i) {
                case 0:
                    weidth = weidth + index * 16*16*16;
                    break;
                case 1:
                    weidth = weidth + index * 16*16;
                    break;
                case 2:
                    weidth = weidth + index * 16;
                    break;
                case 3:
                    weidth = weidth + index;
                    break;
                default:
                    break;
            }
       
        }
        
        return weidth/100.0f;
    }
    
    @end
    
    

    import <Foundation/Foundation.h>

    @interface NSObject (GetWeidth)

    • (double)getWeidthByHEX:(NSString *)dataString;

    @end

    
    

    相关文章

      网友评论

          本文标题:蓝牙电子秤

          本文链接:https://www.haomeiwen.com/subject/wlfirttx.html