;(function($){
var ble_device;
//micro:bit BLE UUID
var uuid={};
uuid["UART_SERVICE"] ='6e400001-b5a3-f393-e0a9-e50e24dcca9e';
uuid["UART_SERVICE_CHARACTERISTICS"] ='6e400002-b5a3-f393-e0a9-e50e24dcca9e';
function connect(){
navigator.bluetooth.requestDevice({
filters: [{
namePrefix: 'BBC micro:bit',
}],
optionalServices: [uuid["UART_SERVICE"]]
})
.then(device => {
uart_device=device;
return device.gatt.connect();
})
.then(server => {
return server.getPrimaryService(uuid["UART_SERVICE"]);
})
.then(service => {
return service.getCharacteristic(uuid["UART_SERVICE_CHARACTERISTICS"]);
})
.then(chara => {
alert("BLE connected");
characteristic=chara;
characteristic.startNotifications();
characteristic.addEventListener('characteristicvaluechanged',onCharacteristicValueChanged);
})
.catch(error => {
alert("BLE error");
});
}
var boxGeometry;
function onCharacteristicValueChanged(e){
var str_arr=[];
for(var i=0;i<this.value.byteLength;i++){
str_arr[i]=this.value.getUint8(i);
}
var str=String.fromCharCode.apply(null,str_arr);
var pr=str.split(",",2);
$("#pitch").val(pr[0]);
$("#roll").val(pr[1]);
boxGeometry.rotation.z=Number(pr[1])*Math.PI/180;
boxGeometry.rotation.x=Number(pr[0])*Math.PI/180;
}
function disconnect(){
if((!accelerometer_device)||(!accelerometer_device.gatt.connected)){
return;
}else{
accelerometer_device.gatt.disconnect();
alert("BLE disconnected");
}
}
//panoramaView
jQuery.fn.bleTest=function(prmUser){
///////////////////////////////////////////////////////////////////////////////////////////
// Var
///////////////////////////////////////////////////////////////////////////////////////////
//parameter
const prmDef={
camera : {
fov : 45,
near : 1,
far : 2000
}
};
const prm=$.extend(prmDef,prmUser);
//canvas
const myCanvas=$(this);
var cv=new Canvas();
function Canvas(){
this._id =myCanvas.attr("id");
this._box =myCanvas.closest(".canvas_box");
this._w =this._box.width();
this._h =this._box.height();
}
myCanvas.attr({
'width' : cv._w,
'height' : cv._h
});
//three.js
var renderer;
var scene;
var group;
var camera;
///////////////////////////////////////////////////////////////////////////////////////////
// Canvas
///////////////////////////////////////////////////////////////////////////////////////////
setCanvas();
function setCanvas(){
if(!Detector.webgl){Detector.addGetWebGLMessage();}
renderer=new THREE.WebGLRenderer({
canvas : document.querySelector('#'+cv._id),
antialias : true,
alpha : true
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(cv._w,cv._h);
scene=new THREE.Scene();
group=new THREE.Group();
camera=new THREE.PerspectiveCamera(prm.camera.fov,cv._w/cv._h,prm.camera.near,prm.camera.far);
camera.position.set(0,200,200);
camera.lookAt(new THREE.Vector3(0,0,0));
//Helper
group.add(new THREE.GridHelper(500,10));
group.add(new THREE.AxisHelper(1000));
//Geometry
boxGeometry=makeGeometry();
group.add(boxGeometry);
scene.add(group);
runAnimate();
function runAnimate(){
renderer.render(scene,camera);
requestAnimationFrame(runAnimate);
}
//btn_connect
$("#btn_connect").on("click",function(){
connect();
});
//btn_disconnect
$("#btn_disconnect").on("click",function(){
disconnect();
});
}
///////////////////////////////////////////////////////////////////////////////////////////
// Window Resize
///////////////////////////////////////////////////////////////////////////////////////////
var timerResize=false;
$(window).on("resize",function(){
if(timerResize!==false){
clearTimeout(timerResize);
}
timerResize=setTimeout(function(){
resizeCanvas();
},500);
});
function resizeCanvas(){
cv._w=cv._box.width();
cv._h=cv._box.height();
myCanvas.attr({
'width' : cv._w,
'height' : cv._h
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(cv._w,cv._h);
camera.aspect=cv._w/cv._h;
camera.updateProjectionMatrix();
}
};
function makeGeometry(){
var group=new THREE.Group();
var texture1=new THREE.TextureLoader().load("src/white.jpg");
texture1.minFilter=texture1.magFilter=THREE.LinearFilter;
texture1.mapping=THREE.UVMapping;
var texture2=new THREE.TextureLoader().load("src/white.jpg");
texture2.minFilter=texture2.magFilter=THREE.LinearFilter;
texture2.mapping=THREE.UVMapping;
var texture3=new THREE.TextureLoader().load("src/front.jpg");
texture3.minFilter=texture3.magFilter=THREE.LinearFilter;
texture3.mapping=THREE.UVMapping;
var texture4=new THREE.TextureLoader().load("src/back.jpg");
texture4.minFilter=texture4.magFilter=THREE.LinearFilter;
texture4.mapping=THREE.UVMapping;
var texture5=new THREE.TextureLoader().load("src/side.jpg");
texture5.minFilter=texture5.magFilter=THREE.LinearFilter;
texture5.mapping=THREE.UVMapping;
var texture6=new THREE.TextureLoader().load("src/side.jpg");
texture6.minFilter=texture6.magFilter=THREE.LinearFilter;
texture6.mapping=THREE.UVMapping;
var material1=new THREE.MeshBasicMaterial({map: texture1});
var material2=new THREE.MeshBasicMaterial({map: texture2});
var material3=new THREE.MeshBasicMaterial({map: texture3});
var material4=new THREE.MeshBasicMaterial({map: texture4});
var material5=new THREE.MeshBasicMaterial({map: texture5});
var material6=new THREE.MeshBasicMaterial({map: texture6});
var materials=new THREE.MultiMaterial([material1,material2,material3,material4,material5,material6]);
var testGeometry=new THREE.BoxGeometry(100,31,227);
var testMesh=new THREE.Mesh(testGeometry,materials);
testMesh.position.set(0,0,0);
group.add(testMesh);
return group;
}
})(jQuery);