我试图将“ Redbear BLE”屏蔽罩与“ Arduino Uno”一起使用,并将模拟输入数据记录到iOS应用程序中,以便数据输入更改背景色。

我正在使用iOS BLE简单控件示例“ Here”。
我是目标C的新手,正在为调用正确的NSLogself.view.backgroundcolor变量而努力使用正确的代码

我认为这是我要添加我的backgroundcolor更改的区域:

       // When data is comming, this will be called
    -(void) bleDidReceiveData:(unsigned char *)data length:(int)length

{
    NSLog(@"Length: %d", length);

    // parse data, all commands are in 3-byte
    for (int i = 0; i < length; i+=3)
    {
        NSLog(@"0x%02X, 0x%02X, 0x%02X", data[i], data[i+1], data[i+2]);

        if (data[i] == 0x0A)
        {
            if (data[i+1] == 0x01)
                swDigitalIn.on = true;
            else
                swDigitalIn.on = false;
        }
        else if (data[i] == 0x0B)
        {
            UInt16 Value;

            Value = data[i+2] | data[i+1] << 8;
            lblAnalogIn.text = [NSString stringWithFormat:@"%d", Value];

        }
    }
}


这是我一直在尝试的方法,但我认为我的做法不正确:

  NSData *data = [[NSData alloc] initWithBytes:buf length:3];
    if (swAnalogIn > 0.0) {
        NSLog(@"0");
        self.view.backgroundColor = [UIColor *data];
        previousValue = currentValue;
        currentValue = 0;
    }
[ble write:data];


或这个。

NSData *data = [[NSData alloc] UIColor colorWithRed:buf.floatValue / 1024.0f
                           green:buf.floatValue / 1024.0f
                            blue:buf.floatValue / 1024.0f
                           alpha:1.0f];
     }
(UIColor *data) {
    self.view.backgroundColor = data;

};
[ble write:data];
}


感谢您的任何帮助或指出正确的方向。

最佳答案

我认为您有两个问题。一个很简单-如何创建颜色并将其设置为背景,但这取决于解决第一个棘手的问题,即如何将模拟值映射到颜色。

此代码-

else if (data[i] == 0x0B) {
            UInt16 Value;

            Value = data[i+2] | data[i+1] << 8;
}


将模拟值作为Value中的16位无符号整数获取。通常使用8位三元组(RGB或HSB)加上alpha值或透明度值(但可以忽略该值)来创建颜色-因此您必须决定如何将16位值映射到24位值。最佳方法取决于您要实现的目标以及输入范围是多少(即取决于模拟输入源,您可能无法获得0-65535的完整范围)。

一种简单的方法是以固定的亮度将高8位映射到Hue(颜色),将低8位映射到饱和度(强度)。为了增加一点复杂度,UIColor初始化方法采用的浮点数为0-1,因此我们需要除以255以缩放结果

CGFloat hue=(Value >>8)/255.0;

CGFloat sat=(Value & 0xff)/255.0;

CGFloat bright=0.5;

UIColor *backGroundColor=[UIColor colorWithHue:hue saturation:sat brightness:bright alpha:1.0];

//  Finally - set the background colour

self.view.backgroundColor=backgroundColor;


请注意,您在data[i+1]data[i+2]中已经分别拥有两个字节,因此您可以保存位掩码和移位,而只需使用-

    else if (data[i] == 0x0B)
    {
       CGFloat hue=data[i+1]/255.0;
       CGFloat saturation=data[i+2]/255.0;

       self.view.backgroundColor=[UIColor colorWithHue:hue saturation:saturation brightness:0.5 alpha:1.0];

     }

关于ios - Redbear BLE数据记录到iOS的模拟输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23593229/

10-14 22:29
查看更多