我试图将“ Redbear BLE”屏蔽罩与“ Arduino Uno”一起使用,并将模拟输入数据记录到iOS应用程序中,以便数据输入更改背景色。
我正在使用iOS BLE简单控件示例“ Here”。
我是目标C的新手,正在为调用正确的NSLog
和self.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/