对应视频链接点击直达
什么数据库,受试者系统,数据接受现实等等,就不说了···这里简单说说范式页面的设计和代码
主体功能(范式)
10S:提示----执行----休息
波形实时显示
进行试验时,需要监察系统的运行情况。
如:现强电流干扰、信号丢失、波形明显错误或软件BUG等情况
```python
# 前端
<div class="col-md-12 col-sm-12 col-xs-12" style="position: relative;z-index: 1;width: 102%;margin-left: -18px;">
<div class="x_panel">
<div class="x_content">
<div style="width: 118%; height: 150px;">
<canvas id="chart4"></canvas>
</div>
</div>
</div>
</div>
# 对应JS
var ctx4 = document.getElementById('chart4').getContext('2d');
var chart4 = new Chart(ctx4, {
type: 'line',
data: {
labels: [
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","",
],
datasets: [
{
data: [
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
],
borderColor: '#4CAF50',
fill: false,
label: '眼电',
pointRadius: 0, //设置圆点半径
showPoint: false, // 设置不显示数据点
borderWidth: 0.5, // 设置线条宽度以呈现为曲线
},
]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
min: -65, // Y 轴的最小值为 0
max: 65, // Y 轴的最大值为 150
},
},
}
});
# 波形数据更新
var isRunning = false;
var intervalId;
// 更新数据函数
function updateData() {
isRunning = true;
intervalId = setInterval(function() {
if (isRunning) {
$.ajax({
url: '/xunlian/quchu_shujuk',
type: 'get',
data: {},
dataType: 'json',
success: function(data) {
{#眼电#}
chart4.data.datasets[0].data.splice(0, 128);
var data_yandian = data.data.data_yandian;
for(var i=0;i<128;i++){
var delta = data_yandian[i];
chart4.data.datasets[0].data.push(delta);
}
chart4.update();
{#脑电#}
chart5.data.datasets[3].label = '通道四 当前数据时间:' + data.data.shiyan_time;
chart5.data.datasets[0].data.splice(0, 128);
chart5.data.datasets[1].data.splice(0, 128);
chart5.data.datasets[2].data.splice(0, 128);
chart5.data.datasets[3].data.splice(0, 128);
var data_naodiana = data.data.data_naodiana;
var data_naodianb = data.data.data_naodianb;
var data_naodianc = data.data.data_naodianc;
var data_naodiand = data.data.data_naodiand;
{#alert(data_naodianc);#}
for(var i=0;i<128;i++){
var delta0 = data_naodiana[i]+300;
chart5.data.datasets[0].data.push(delta0);
var delta1 = data_naodianb[i]+100;
chart5.data.datasets[1].data.push(delta1);
var delta2 = data_naodianc[i]-100;
chart5.data.datasets[2].data.push(delta2);
var delta3 = data_naodiand[i]-300;
chart5.data.datasets[3].data.push(delta3);
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.error('Error: ' + textStatus, errorThrown);
}
});
}
chart5.update();
}, 500);
}
// 监听按钮点击事件,调用更新数据函数
document.getElementById('updateButton').addEventListener('click', updateData);
document.getElementById('stopButton').addEventListener('click', function() {
isRunning = false;
clearInterval(intervalId);
});
试验行为提示器
软件控制下的行为提示,对时间的把控更为精准,也排除了人为因素的干扰
# 前端
<div class="count" style="font-size: 144px" id="displayWindow">准备</div>
# 对应JS
<script>
{#let intervalId;#}
var intervalId;
let duration;
let countdown;
// 等待文档加载完成
window.onload = function() {
// 通过id获取按钮元素
var button = document.getElementById('button999');
// 为按钮添加点击事件监听器
button.addEventListener('click', function() {
// 弹出提示框
{#alert('你点击了3分钟的按钮!');#}
// 清除之前的定时器
clearInterval(intervalId);
// 获取持续时间
duration = parseInt(this.getAttribute('data-duration'), 10);
countdown = duration;
// 显示任务开始
document.getElementById('displayWindow').textContent = '准备';
// 设置倒计时定时器
intervalId = setInterval(function() {
if (countdown > 0) {
// 每5秒随机显示一个字母并发送
const randomLetter = getRandomLetter();
displayLetterAndSend(randomLetter);
setTimeout(displayRestAndSend, 4500);
countdown -= 10;
} else {
// 时间结束,显示“结束”并触发GET请求
clearInterval(intervalId);
document.getElementById('displayWindow').textContent = '结束';
triggerGetRequest();
}
}, 10000);
});
};
// 获取随机字母
function getRandomLetter() {
const letters = ['眨眼', '向左', '向右', '平静'];
{#const letters = ['a', 'c', 'b', 'n', 'm'];#}
return letters[Math.floor(Math.random() * letters.length)];
}
// 显示字母并发送
function displayLetterAndSend(letter) {
document.getElementById('displayWindow').textContent = letter;
// 这里只是模拟发送数据,实际项目中你需要使用AJAX或Fetch API发送请求
{#console.log('Sending letter:', letter);#}
// 发送逻辑可以放在这里
$.ajax({
url: '/xunlian/huancunbiaoqian',
type: 'get',
data: {direction: letter},
dataType: 'json',
success: function(data) {
document.getElementById('jisuanjieguo').textContent = data.data;
},
});
}
// 显示 休息 并 发送
function displayRestAndSend() {
document.getElementById('displayWindow').textContent = '休息';
document.getElementById('jisuanjieguo').textContent = '休息';
setTimeout(daojishi4, 1000);
const letters = '休息';
// 发送逻辑可以放在这里
$.ajax({
url: '/xunlian/huancunbiaoqian',
type: 'get',
data: {direction: letters},
dataType: 'json',
});
}
function daojishi4() {
document.getElementById('displayWindow').textContent = '4';
setTimeout(daojishi3, 1000);
}
function daojishi3() {
document.getElementById('displayWindow').textContent = '3';
setTimeout(daojishi2, 1000);
}
function daojishi2() {
document.getElementById('displayWindow').textContent = '2';
setTimeout(daojishi1, 1000);
}
function daojishi1() {
document.getElementById('displayWindow').textContent = '1';
}
// 触发GET请求
function triggerGetRequest() {
// 这里只是模拟触发GET请求,实际项目中你需要使用AJAX或Fetch API发送GET请求
$.ajax({
url: '/xunlian/xljieshu',
type: 'get',
data: {},
dataType: 'json',
});
{#console.log('Triggering GET request...');#}
}
</script>
实验时间控制器
范式试验的时间控制更精准
这边的代码在上面~
范式页面其他
其他就是前后台的数据传输显示以及各种逻辑处理,这里不展开
结语
其他
本来想说说硬件的,但是真没啥说的,某宝就行···直接买
V:justwaityou1314
懂的都懂
以下是废话
别的也没啥说的 , 如果觉得可以 , 希望一键三连支持一下 !
ok,那就这样吧~
欢迎各位大佬留言吐槽,也可以深入科学探讨