引言
在之前做读写的时候我们具体谢啦如何调用LED服务特性的函数,今天我们就要具体细化这个函数来控制BBC开发板矩阵的行和列
代码展示
首先我们把BBC板矩阵的各行和列都定义一个函数来使其具体化,并将数据寄存都在这个数组里。
var led = [0, 0, 0, 0, 0];
var x=[0, 0, 0, 0, 0] ; //行为X
var y=[0, 0, 0, 0, 0] ;//列为y
行和列具体有10中形态:第一行都亮、第二行都亮、第三行都亮。。。。。。第五行都亮
列:第一列都亮、第二列都亮、第三列都亮。。。。。。第五列都亮
所以,我们只要具体将这10中状态的实现出来就可以了。具体如下:
第一行都亮
function h_1()//第一行都亮
{ if(x[0]==0){led[0]=31;x[0]=1;}
else{ led[0]=0;x[0]=0; }
rowcol(); }
第二行都亮
function h_2()//第二行都亮
{ if(x[1]==0){led[1]=31;x[1]=1;}
else{led[1]=0;x[1]=0; }
rowcol(); }
第三行都亮
function h_3()//第三行都亮
{ if(x[2]==0){ led[2]=31; x[2]=1; }
else{led[2]=0; x[2]=0;}
rowcol(); }
。。。。。。以此类推,重点注意列
第一列都亮
function L_1()//第一列都亮
{ var i=0; if(y[0]==0)
{ for(i=0;i<=4;i++) led[i]=led[i]|(1<<4); y[0]=1; }
else{ for(i=0;i<=4;i++) led[i]=led[i]&(~(1<<4));y[0]=0; }
rowcol(); }
第二列都亮
function L_2()//第二列都亮
{ var i=0; if(y[1]==0)
{ for(i=0;i<=4;i++)led[i]=led[i]|(1<<3); y[1]=1; }
else{for(i=0;i<=4;i++)led[i]=led[i]&(~(1<<3));y[1]=0; }
rowcol(); }
第三列都亮
function L_3()
{ var i=0; if(y[2]==0)
{ for(i=0;i<=4;i++)led[i]=led[i]|(1<<2); y[2]=1;}
else{ for(i=0;i<=4;i++)led[i]=led[i]&(~(1<<2));y[2]=0;}
rowcol();}
以此类推。
但是光写出来具体状态不调用LED服务特性也不行,之前我们具体写了LED的randomLEDs()函数,我们可以仿照其再写一个类似的函数,来实现小灯的亮灭。具体如下
function rowcol()
{
console.log(“randomLEDs”);
// state validation
if (!connected)
{
alert(“Error: Discover and connect to a device before using this function”);
return;
}
if (!services_discovered)
{
alert(“Error: Service discovery has not yet completed”);
return;
}
if (!has_led_service)
{
alert(“Error: The connected device does not contain the LED service”);
return;
}
if (!has_led_matrix_state)
{
alert(“Error: The connected device does not contain the LED matrix state characteristic”);
return;
}
var led_matrix_data = new Uint8Array(led);
led_matrix_state.writeValue(led_matrix_data.buffer)
.then(_ => {
console.log(‘LED matrix state changed’);
})
.catch(error => {
console.log(‘Error: ‘ + error);
alert(‘Error: ‘ + error); return;
});
}
最后
因为光有函数没有具体调用接口,有函数也没用,所以我们可以通过具体实现几个按钮来完成。