diff --git a/miniprogram/pages/auto-scan/auto-scan.js b/miniprogram/pages/auto-scan/auto-scan.js index 7c60a40..761d506 100644 --- a/miniprogram/pages/auto-scan/auto-scan.js +++ b/miniprogram/pages/auto-scan/auto-scan.js @@ -1,6 +1,7 @@ var ble = require('../../services/ble') -var SCAN_BRIGHTNESS = 128 -var SCAN_TIMEOUT = 12000 +var SCAN_TIMEOUT = 15000 +var SPECTRUM_NAMES = ['红光', '紫外光', '黄光', '红外光'] +var SPECTRUM_COUNT = 4 Page({ data: { @@ -8,8 +9,8 @@ Page({ scanning: true, scanProgress: 0, regions: 0x1F, - pdValues: [], - pdRaw: [], + spectrumIndex: 0, + spectrumData: [], vbat: 0, battery: 0, error: '' @@ -36,41 +37,65 @@ Page({ if (this._progressTimer) { clearInterval(this._progressTimer); this._progressTimer = null } if (this._timeoutTimer) { clearTimeout(this._timeoutTimer); this._timeoutTimer = null } if (this._onAdc) { ble.off('adc', this._onAdc); this._onAdc = null } + if (this._onRunState) { ble.off('run_state', this._onRunState); this._onRunState = null } }, startScan: function () { var self = this + self._scanResults = [] if (!ble.isConnected()) { self.setData({ scanning: false, error: '设备未连接,请先连接设备' }) return } - self.setData({ scanning: true, scanProgress: 0, error: '', pdValues: [] }) + self.setData({ scanning: true, scanProgress: 0, error: '', spectrumData: [], spectrumIndex: 0 }) this._progressTimer = setInterval(function () { - var p = self.data.scanProgress + 1 + var target = ((self._scanResults.length + 1) / SPECTRUM_COUNT) * 90 + var p = self.data.scanProgress + if (p < target) p += 1 if (p > 90) p = 90 self.setData({ scanProgress: p }) - }, 80) + }, 100) this._onAdc = function (data) { - console.log('[SCAN] 收到ADC数据:', JSON.stringify(data)) - self._cleanup() - self.setData({ scanning: false, scanProgress: 100 }) - self._handleAdcData(data) + if (!self.data.scanning) return + var idx = self._scanResults.length + if (idx >= SPECTRUM_COUNT) return + + console.log('[SCAN] 收到第' + (idx + 1) + '组ADC (' + SPECTRUM_NAMES[idx] + '):', data.pd) + self._scanResults.push({ + spectrum: SPECTRUM_NAMES[idx], + pd: data.pd.slice(0), + vbat: data.vbat, + battery: data.battery + }) + self.setData({ spectrumIndex: idx + 1 }) + + if (self._scanResults.length >= SPECTRUM_COUNT) { + self._scanComplete() + } } ble.on('adc', this._onAdc) - console.log('[SCAN] 下发扫描指令: 全域亮度', SCAN_BRIGHTNESS) + this._onRunState = function (data) { + if (data.run_state === 0x00 && self._scanResults.length > 0 && self.data.scanning) { + console.log('[SCAN] 设备进入IDLE,扫描结束') + self._scanComplete() + } + } + ble.on('run_state', this._onRunState) + + console.log('[SCAN] 下发扫描指令,等待固件序贯扫描 R→UV→Y→IR') ble.setParams({ - region_mask: 0x1F, + region_mask: self.data.regions, wavelength: 2, - brightness: SCAN_BRIGHTNESS, + brightness: 128, hold_time: 10, control: 0x01 }).then(function () { - console.log('[SCAN] 扫描指令发送成功,等待ADC回传...') + console.log('[SCAN] 扫描指令发送成功') }).catch(function (err) { console.error('[SCAN] 扫描指令发送失败:', err) self._cleanup() @@ -79,35 +104,45 @@ Page({ this._timeoutTimer = setTimeout(function () { if (!self.data.scanning) return - console.log('[SCAN] 等待ADC超时,使用默认值') - self._cleanup() - self.setData({ scanning: false, scanProgress: 100 }) - self._handleAdcData(null) + console.log('[SCAN] 超时,已收到' + self._scanResults.length + '组数据') + self._scanComplete() }, SCAN_TIMEOUT) }, - _handleAdcData: function (data) { - var regionNames = ['右区(IO1)', '左区(IO2)', '上区(IO3)', '中区(IO4)', '下区(IO5)'] - var pdValues = [] + _scanComplete: function () { + this._cleanup() + this.setData({ scanning: false, scanProgress: 100 }) + this._buildDisplay() + }, - if (data && data.pd && data.pd.length >= 7) { - this.setData({ pdRaw: data.pd, vbat: data.vbat || 0, battery: data.battery || 0 }) - for (var i = 0; i < 5; i++) { - var barW = Math.min(100, Math.round(data.pd[i] / 40.95)) - pdValues.push({ region: regionNames[i], pd: data.pd[i], pdText: String(data.pd[i]), barWidth: barW }) - } - pdValues.push({ region: 'PD6', pd: data.pd[5], pdText: String(data.pd[5]), barWidth: Math.min(100, Math.round(data.pd[5] / 40.95)) }) - pdValues.push({ region: 'PD7', pd: data.pd[6], pdText: String(data.pd[6]), barWidth: Math.min(100, Math.round(data.pd[6] / 40.95)) }) + _buildDisplay: function () { + var results = this._scanResults || [] + var spectrumData = [] - getApp().globalData.lastScanPd = data.pd - getApp().globalData.lastScanVbat = data.vbat - } else { - for (var j = 0; j < 5; j++) { - pdValues.push({ region: regionNames[j], pd: 0, pdText: '未采集', barWidth: 0 }) + for (var s = 0; s < results.length; s++) { + var r = results[s] + var items = [] + for (var i = 0; i < 7; i++) { + var val = r.pd[i] || 0 + items.push({ + label: 'PD' + (i + 1), + value: val, + barWidth: Math.min(100, Math.round(val / 40.95)) + }) } + spectrumData.push({ name: r.spectrum, items: items }) } - this.setData({ pdValues: pdValues }) + if (results.length > 0) { + var last = results[results.length - 1] + this.setData({ + vbat: last.vbat || 0, + battery: last.battery || 0 + }) + } + + getApp().globalData.lastScanData = results + this.setData({ spectrumData: spectrumData }) }, onUnload: function () { @@ -117,10 +152,10 @@ Page({ onNext: function () { var mask = this.data.regions || 0x1F - var pdRaw = this.data.pdRaw - var pdParam = pdRaw.length > 0 ? '&pd=' + encodeURIComponent(JSON.stringify(pdRaw)) : '' + var scanData = this._scanResults || [] + var param = scanData.length > 0 ? '&scan=' + encodeURIComponent(JSON.stringify(scanData)) : '' wx.redirectTo({ - url: '/pages/treatment-setup/treatment-setup?regions=' + mask + pdParam + url: '/pages/treatment-setup/treatment-setup?regions=' + mask + param }) } }) diff --git a/miniprogram/pages/auto-scan/auto-scan.wxml b/miniprogram/pages/auto-scan/auto-scan.wxml index 5a3937e..3965bf4 100644 --- a/miniprogram/pages/auto-scan/auto-scan.wxml +++ b/miniprogram/pages/auto-scan/auto-scan.wxml @@ -1,8 +1,8 @@ ‹ 返回 - 区域扫描 - {{scanning ? '正在采集数据...' : '扫描完成'}} + 多光谱扫描 + {{scanning ? '正在采集数据 (' + spectrumIndex + '/4)...' : '扫描完成'}} @@ -13,17 +13,19 @@ - 全域LED已开启,亮度 128,等待PD数据回传... + 固件序贯扫描中:红光 → 紫外光 → 黄光 → 红外光 - - PD 采集结果 - - - {{item.region}} - {{item.pdText}} - - + + + {{item.name}} (第{{index + 1}}组) + + + {{pd.label}} + {{pd.value}} + + + @@ -32,6 +34,10 @@ + + 未收到扫描数据 + + {{error}} diff --git a/miniprogram/pages/auto-scan/auto-scan.wxss b/miniprogram/pages/auto-scan/auto-scan.wxss index 9ec41f5..7efd9bd 100644 --- a/miniprogram/pages/auto-scan/auto-scan.wxss +++ b/miniprogram/pages/auto-scan/auto-scan.wxss @@ -121,6 +121,30 @@ text-align: center; } +.spectrum-group { + margin-bottom: 24rpx; +} + +.spectrum-group:last-child { + margin-bottom: 0; +} + +.spectrum-title { + font-size: 26rpx; + font-weight: 600; + color: #E6508C; + margin-bottom: 12rpx; + padding-bottom: 8rpx; + border-bottom: 2rpx solid #fdf2f8; +} + +.empty-hint { + text-align: center; + color: #999; + font-size: 26rpx; + padding: 40rpx 0; +} + .scan-error { text-align: center; color: #ff4d4f;