Skip to content
This repository has been archived by the owner on Feb 8, 2019. It is now read-only.

Commit

Permalink
Merge pull request #129 from gmfc/v0-6-0
Browse files Browse the repository at this point in the history
Versão 1.0
  • Loading branch information
gmfc committed Dec 9, 2016
2 parents db2401c + 6a36818 commit d182946
Show file tree
Hide file tree
Showing 11 changed files with 257 additions and 242 deletions.
75 changes: 0 additions & 75 deletions log.txt

This file was deleted.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
"mocha": "^3.1.2",
"nw": "^0.19.0-rc1",
"nw-builder": "^3.1.2",
"seedrandom": "^2.4.2",
"should": "^11.1.1",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^1.1.0"
Expand Down
101 changes: 83 additions & 18 deletions src/Data.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,23 +76,79 @@ function PlatData(pa, pb) {
*/
this.tempDeltaTime = 0;

/**
* Dados temporários usados pelo filtro
* @type {object}
*/
this.filterData = {
gr: 10,
lim: 3
};

}

/**
* Função coringa - Strategy para filtros
*/
PlatData.prototype.filter = function(num, id) {
var result;
num = Math.abs(num);
if (this.filterData[id]) {
var i = this.filterData[id].i;
this.filterData[id].vals[i] = num;
result = sm.median(this.filterData[id].vals);
this.filterData[id].i = (this.filterData[id].i + 1) % this.filterData.gr;
} else {
this.filterData[id] = {
i: 0,
vals: [num]
};
result = num;
}
return (result > this.filterData.lim) ? result : this.filterData.lim;
}

/**
* Função helper. Recebe uma string formatada e splita a mesma em parametros.
* @param {string} data - String formatada: 'TI;TR;TL;BR;BL'
* @returns {object} - objeto com atributos TI;TR;TL;BR;BL.
*/
PlatData.prototype.splitData = function(data, realtime) {
var arr = data.split(';').map(function(val) {
return Number(val);
});
var result = {};

if (realtime) {
result.TI = arr[0];
result.TR = this.filter(arr[1], "rTR");
result.TL = this.filter(arr[2], "rTL");
result.BR = this.filter(arr[3], "rBR");
result.BL = this.filter(arr[4], "rBL");
} else {
result.TI = arr[0];
result.TR = this.filter(arr[1], "TR");
result.TL = this.filter(arr[2], "TL");
result.BR = this.filter(arr[3], "BR");
result.BL = this.filter(arr[4], "BL");
}

return result;
};

/**
* Recebe dados da plataforma como String
* extrai e trata os dados
* @arg {string} data - String formatada: 'TI;TR;TL;BR;BL'
* @returns {void}
*/
PlatData.prototype.pushData = function(data) {
var arr = data.split(';').map(function(val) {
return Number(val);
});
this.TI.push(arr[0]);
this.TR.push(Math.abs(arr[1]));
this.TL.push(Math.abs(arr[2]));
this.BR.push(Math.abs(arr[3]));
this.BL.push(Math.abs(arr[4]));
var result = this.splitData(data);
this.TI.push(result.TI);
this.TR.push(result.TR);
this.TL.push(result.TL);
this.BR.push(result.BR);
this.BL.push(result.BL);
};

/**
Expand Down Expand Up @@ -145,18 +201,17 @@ PlatData.prototype.calcCOP = function() {
* e t para timestamp
*/
PlatData.prototype.RTCOP = function(data) {
var arr = data.split(';').map(function(val) {
return Number(val);
});

var TR = Math.abs(arr[1]),
TL = Math.abs(arr[2]),
BR = Math.abs(arr[3]),
BL = Math.abs(arr[4]);
var phrased = this.splitData(data, true);
var
TI = phrased.TI,
TR = phrased.TR,
TL = phrased.TL,
BR = phrased.BR,
BL = phrased.BL;

var result = {};
result.t = arr[0] - this.tempDeltaTime;
this.tempDeltaTime = arr[0];
result.t = TI - this.tempDeltaTime;
this.tempDeltaTime = TI;
result.x = this.Efax(this.a, TR, TL, BL, BR);
result.y = this.Efay(this.b, TR, TL, BL, BR);
return result;
Expand Down Expand Up @@ -334,5 +389,15 @@ PlatData.prototype.fay = function(b, fz1, fz2, fz3, fz4, az0, fy14, fy23) {
return (t1 + t2) / t3;
}

/**
* Arrendodador
* Recebe um número e uma precisão. Arredonda de acordo com a precisão especificada.
* @param {number} value - Valor a ser aredondado
* @param {number} precision - Precisão a ser levada em conta.
*/
PlatData.prototype.roundTo = function(value, precision) {
var multiplier = Math.pow(10, precision || 0);
return Math.round(value * multiplier) / multiplier;
}

module.exports = PlatData;
5 changes: 0 additions & 5 deletions src/RealTimeController.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,20 +165,15 @@ function connect(name) {
* @returns {void}
*/
function findPlat() {
console.log('batata1 findPlat()');
port = null;
btConnecting();
var found = false;
browserserialport.list(function(err, ports) {
var counter = 0;
console.log('batata list');
ports.forEach(function(port) {
counter++;
console.log('batata c++ forEach');
if (port.manufacturer.indexOf('Arduino') !== -1 && !found) {
console.log('batata achou e con' + port.comName);
connect(port.comName);
console.log(port.comName);
found = true;
}
if (counter === ports.length && !found) {
Expand Down
77 changes: 52 additions & 25 deletions src/ReportController.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,16 +125,30 @@ function addPoint(tgx, tgy) {
ctx.fill();
}

/**
* Fabrica dados para download
*/
function prepImgDownload() {
var canvas = document.getElementById('canvas');
var graphBTN = document.getElementById('grapdownload');
graphBTN.href = canvas.toDataURL();
$('#grapdownload').show();
}
/**
* Plota um gráfico a partir de vetores x e y
* @arg {Number[]} vetX - Vetor de Coordenadas X do COP
* @arg {Number[]} vetY - Vetor de Coordenadas Y do COP
* @returns {void}
*/
function drawGraph(vetX, vetY) {
ctx.globalAlpha = 1;
ctx.fillStyle = '#f4f4f4';
ctx.fillRect(0, 0, 738, 668);
for (var i = 0; i < vetX.length; i++) {
addPoint(vetX[i], vetY[i]);
}
console.log('prepara download links');
prepImgDownload();
}

/**
Expand Down Expand Up @@ -224,43 +238,56 @@ function ACTUpdateTime() {
}
}

/**
* Converte e arredonda números de mm para cm
* @arg {Number} num - numero a ser tratado
* @arg {Number} [digit] - Precisão a ser considerada
* @returns {Number} numero tratado
*/
function convertNum(num, digit) {
if (!digit) {
digit = 10;
}
//return Math.round(num * 10) / (10 * digit);
return num;


function prepCSV(result) {
var csvContent =
'data:text/csv;charset=utf-8,' +
'DOT;' + result.DOT.toString().replace('.', ',') + '\n' +
'Desvio Padrao;\n' +
'AP;' + result.DevAP.toString().replace('.', ',') + '\n' +
'ML;' + result.DevML.toString().replace('.', ',') + '\n' +
'RMS;\n' +
'AP;' + result.rmsAP.toString().replace('.', ',') + '\n' +
'ML;' + result.rmsML.toString().replace('.', ',') + '\n' +
'Frequencia;' + result.avgFrq.toString().replace('.', ',') + '\n' +
'Velocidade media;\n' +
'AP;' + result.VMap.toString().replace('.', ',') + '\n' +
'ML;' + result.VMml.toString().replace('.', ',') + '\n' +
'Velocidade media total;' + result.VMT.toString().replace('.', ',') + '\n' +
'Amplitude de deslocamento;\n' +
'AP;' + result.ampAP.toString().replace('.', ',') + '\n' +
'ML;' + result.ampML.toString().replace('.', ',') + '\n' +
'Area;' + result.area.toString().replace('.', ',') + '\n';
var encodedUri = encodeURI(csvContent);
var csvBTN = document.getElementById('csvdownload');
csvBTN.href = encodedUri;
$('#csvdownload').show();
}

/**
* Gera relatório
* @returns {void}
*/
function genReport(result) {
console.log(result);
prepCSV(result);
$('#stepexec').switchClass('active', 'completed');
$('#steprelatorio').switchClass('disabled', 'active');
$('#tempoSelect').hide();
$('#execute').hide();
$('#relatorio').show();
$('#dot').text(convertNum(result.DOT, 100) + ' cm');
$('#desAP').text('Ântero-posterior: ' + convertNum(result.DevAP) + ' cm');
$('#desML').text('Médio-lateral: ' + convertNum(result.DevML) + ' cm');
$('#rmsAP').text('Ântero-posterior: ' + convertNum(result.rmsAP) + ' cm');
$('#rmsML').text('Médio-lateral: ' + convertNum(result.rmsML) + ' cm');
$('#freq').text(convertNum(result.avgFrq, 1) + 'Hz');
$('#velAP').text('Ântero-posterior: ' + convertNum(result.VMap) + ' cm/s');
$('#velML').text('Médio-lateral: ' + convertNum(result.VMml) + ' cm/s');
$('#veltot').text(convertNum(result.VMT) + ' cm/s');
$('#ampAP').text('Ântero-posterior: ' + convertNum(result.ampAP) + ' cm');
$('#ampML').text('Médio-lateral: ' + convertNum(result.ampML) + ' cm');
$('#area').text(convertNum(result.area, 100) + ' cm²');
$('#dot').text(calc.roundTo(result.DOT, 2) + ' cm');
$('#desAP').text('Ântero-posterior: ' + calc.roundTo(result.DevAP, 2) + ' cm');
$('#desML').text('Médio-lateral: ' + calc.roundTo(result.DevML, 2) + ' cm');
$('#rmsAP').text('Ântero-posterior: ' + calc.roundTo(result.rmsAP, 2) + ' cm');
$('#rmsML').text('Médio-lateral: ' + calc.roundTo(result.rmsML, 2) + ' cm');
$('#freq').text(calc.roundTo(result.avgFrq, 2) + 'Hz');
$('#velAP').text('Ântero-posterior: ' + calc.roundTo(result.VMap, 2) + ' cm/s');
$('#velML').text('Médio-lateral: ' + calc.roundTo(result.VMml, 2) + ' cm/s');
$('#veltot').text(calc.roundTo(result.VMT, 2) + ' cm/s');
$('#ampAP').text('Ântero-posterior: ' + calc.roundTo(result.ampAP, 2) + ' cm');
$('#ampML').text('Médio-lateral: ' + calc.roundTo(result.ampML, 2) + ' cm');
$('#area').text(calc.roundTo(result.area, 2) + ' cm²');
}

/**
Expand Down

0 comments on commit d182946

Please sign in to comment.