From 10139a4c50dbc75f0eae96c52bc955a99ce4906d Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 27 Jul 2023 19:58:16 +0800 Subject: [PATCH] update --- .vscode/settings.json | 4 +- sdk | 2 +- testtools/config.js | 50 ++ testtools/index.html | 1153 +++++++++++++++++++++++++++ usrc/main.cpp | 154 +++- usrc/one_dimensional_code_laser_scanner.cpp | 85 ++ usrc/one_dimensional_code_laser_scanner.hpp | 50 ++ 7 files changed, 1463 insertions(+), 35 deletions(-) create mode 100644 testtools/config.js create mode 100644 testtools/index.html create mode 100644 usrc/one_dimensional_code_laser_scanner.cpp create mode 100644 usrc/one_dimensional_code_laser_scanner.hpp diff --git a/.vscode/settings.json b/.vscode/settings.json index 3080e17..6697d83 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -60,6 +60,8 @@ "ostream": "cpp", "stdexcept": "cpp", "streambuf": "cpp", - "typeinfo": "cpp" + "typeinfo": "cpp", + "cstdarg": "cpp", + "cinttypes": "cpp" } } \ No newline at end of file diff --git a/sdk b/sdk index f28856b..914b4c7 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit f28856b68a9c6fd2b06070a2a10c6f40dfe9896d +Subproject commit 914b4c75556afc4137ed32bb341bf4377f2765b1 diff --git a/testtools/config.js b/testtools/config.js new file mode 100644 index 0000000..83ce37c --- /dev/null +++ b/testtools/config.js @@ -0,0 +1,50 @@ +const websocketAddress = "ws://192.168.1.138:19001"; +const config = { + // 256333 + 打开工程师模式: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":2,"ctrlPointVal":1}}`, + 关闭工程师模式: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":2,"ctrlPointVal":0}}`, + 读取所有光电输入: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":1000,"ctrlPointVal":0}}`, + 推杆电机_正转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":2000}}`, + 推杆电机_反转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":-2000}}`, + 推杆电机_正转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":51200}}`, + 推杆电机_反转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":-51200}}`, + 推杆电机_归零: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10103,"ctrlPointVal":1000}}`, + 推杆电机_零点: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10101,"ctrlPointVal":0}}`, + 推杆电机_推出位置: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10101,"ctrlPointVal":719133}}`, + 推杆电机_扫码完成位置: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10101,"ctrlPointVal":256333}}`, + 推杆电机_扫码速度: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10122,"ctrlPointVal":100000}}`, + 推杆电机_最快速度: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10122,"ctrlPointVal":1000000}}`, + 推杆电机_读取当前位置: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10113,"ctrlPointVal":0}}`, + 推杆电机_清空异常: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10109,"ctrlPointVal":0}}`, + 推杆电机_停止: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10108,"ctrlPointVal":0}}`, + 平移电机_正转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":2000}}`, + 平移电机_反转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":-2000}}`, + 平移电机_正转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":200000}}`, + 平移电机_反转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":-200000}}`, + 平移电机_归零: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10003,"ctrlPointVal":1000}}`, + 平移电机_位置1: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10001,"ctrlPointVal":207531}}`, + 平移电机_位置2: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10001,"ctrlPointVal":207531}}`, + 平移电机_读取当前位置: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10013,"ctrlPointVal":0}}`, + 平移电机_清空异常: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10009,"ctrlPointVal":0}}`, + 平移电机_停止: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10008,"ctrlPointVal":0}}`, + 开始读卡: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":20000,"ctrlPointVal":1}}`, + 连续读卡: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":20000,"ctrlPointVal":2}}`, + 停止读卡: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":20000,"ctrlPointVal":0}}`, + 开始扫码: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":30000,"ctrlPointVal":1}}`, + 停止扫码: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":30000,"ctrlPointVal":0}}`, + 读取扫码结果: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":30007,"ctrlPointVal":0}}`, + +}; +const commonMessage = { + protocol: "iflytopCanProtocolStackV1", + message: { + attribute: "normal", + priority: 4, + type: "write", + targetId: 133, + sourceId: 1, + seq: 0, + ctrlPointAddr: 10500, + ctrlPointVal: 1, + }, +}; diff --git a/testtools/index.html b/testtools/index.html new file mode 100644 index 0000000..72d681d --- /dev/null +++ b/testtools/index.html @@ -0,0 +1,1153 @@ + + + + + + + + 板夹仓测试工具 + + + +
+
+
+ + +
+

当前状态: 未连接

+
+
+ + + +
+
+
+
+

上报解析

+
+

ADDRESS:

+ +
+
+

VALUE:

+ +
+
+
+

回执解析

+
+

ADDRESS:

+ +
+
+

VALUE:

+ +
+
+

结果:

+ +
+
+
+
    +
  • 通用指令
  • +
  • 指令列表
  • +
+
+
+
+
+

ID

+ +
+
+

BASE

+ +
+
+

OFFSET

+ +
+
+

VALUE

+ +
+
+
+ + + + +
+
+
+
+
+
+
+
+
+
+
+

ID

+ +
+
+

BASE

+ +
+
+

OFFSET

+ +
+
+
+

状态

+
+

异常

+ + +
+
+

状态

+ + +
+
+

位置

+ + +
+
+
+

配置

+
+

反复运动启始位置

+ + + +
+
+

反复运动终止位置

+ + + +
+
+

运行时速度配置

+ + + +
+
+
+

动作

+
+

舵机移动到角度

+ + +
+
+

舵机停止

+ + +
+
+

清除异常

+ + +
+
+

反复运动

+ + +
+
+
+
+
+
+

ID

+ +
+
+

BASE

+ +
+
+

OFFSET

+ +
+
+
+

状态

+
+

设备状态

+ + +
+
+

异常状态

+ + +
+
+

当前转速

+ + +
+
+

当前位置

+ + +
+
+
+

配置

+
+

加速度

+ + + +
+
+

减速度

+ + + +
+
+

速度

+ + + +
+
+

零点偏移

+ + + +
+
+

归零速度

+ + + +
+
+

归零减速度

+ + + +
+
+

归零最大位移

+ + + +
+
+

归零第一阶段移动距离

+ + + +
+
+
+

动作

+
+

速度模式控制

+ + +
+
+

位置模式控制

+ + +
+
+

位置模式相对位置

+ + +
+
+

归零

+ + +
+
+

零位校准

+ + +
+
+

停止

+ + +
+
+

清空异常

+ + +
+
+
+
+
+
+
+
+
+ +
+ + +
+
+
+
+ + + + + + diff --git a/usrc/main.cpp b/usrc/main.cpp index 87a0855..f2a423b 100644 --- a/usrc/main.cpp +++ b/usrc/main.cpp @@ -6,6 +6,8 @@ #include "main.h" #include "project.hpp" // +#include "one_dimensional_code_laser_scanner.hpp" +#include "sdk/components/single_axis_motor_control_v2/single_axis_motor_control_v2.hpp" #include "sdk/hal/zhal.hpp" #include "sdk\components\iflytop_can_slave_v1\iflytop_can_slave.hpp" #include "sdk\components\tmc\ic\ztmc4361A.hpp" @@ -23,46 +25,74 @@ IflytopCanProtocolStackProcesser m_protocolStack; TMC5130 m_tj_motor; TMC5130 m_py_motor; -// ZGPIO arm_sensor1_gpio; -// ZGPIO arm_sensor2_gpio; -// ZGPIO arm_sensor3_gpio; -// ZGPIO arm_sensor4_gpio; -// ZGPIO arm_sensor5_gpio; -// ZGPIO arm_sensor6_gpio; -// ZGPIO arm_sensor7_gpio; -// ZGPIO arm_sensor8_gpio; - ZGPIO debuglight; -ZGPIO tmc_motor1_spi_select1_io; -ZGPIO tmc_motor1_nfreeze_io; -ZGPIO tmc_motor1_nreset_io; -ZGPIO tmc_motor1_sub_ic_enn_io; -ZGPIO tmc_motor2_spi_select1_io; -ZGPIO tmc_motor2_nfreeze_io; -ZGPIO tmc_motor2_nreset_io; -ZGPIO tmc_motor2_sub_ic_enn_io; +ZGPIO io_fybh_read1; +ZGPIO io_fybh_read2; +ZGPIO io_fybh_read3; +ZGPIO io_fybh_read4; +ZGPIO io_fybh_read5; +ZGPIO io_fybh_read6; + +// input_sensor_get_bwm_gpio() { return &FYBJL_SENSOR0; } +// input_sensor_get_py_home_gpio() { return &FYBJL_SENSOR1; } +// input_sensor_get_py_limit_gpio() { return &FYBJL_SENSOR2; } +// input_sensor_get_tj_home_gpio() { return &FYBJL_SENSOR4; } +// input_sensor_get_tj_limit_gpio() { return &FYBJL_SENSOR5; } +// input_sensor_get_card_block_detect_gpio() { return &FYBJL_SENSOR7; } + +ZGPIO io_fybjl_sensor8; +ZGPIO io_fybjl_sensor7; +ZGPIO io_fybjl_sensor6; +ZGPIO io_fybjl_sensor5; +ZGPIO io_fybjl_sensor4; +ZGPIO io_fybjl_sensor3; +ZGPIO io_fybjl_sensor2; +ZGPIO io_fybjl_sensor1; +ZGPIO io_fybjl_sensor0; + +SingleAxisMotorControlerV2 m_pyMotorControlService; // 平移电机 +SingleAxisMotorControlerV2 m_tjMotorControlService; // 推进电机 + +OneDimensionalCodeLaserScanner m_oneDimensionalCodeLaserScanner; void input_sensors_init() { - // arm_sensor1_gpio.initAsInput(ARM_SENSOR1_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true); - // arm_sensor2_gpio.initAsInput(ARM_SENSOR2_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true); - // arm_sensor3_gpio.initAsInput(ARM_SENSOR3_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false); - // arm_sensor4_gpio.initAsInput(ARM_SENSOR4_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false); - // arm_sensor5_gpio.initAsInput(ARM_SENSOR5_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false); - // arm_sensor6_gpio.initAsInput(ARM_SENSOR6_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false); - // arm_sensor7_gpio.initAsInput(ARM_SENSOR7_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true); - // arm_sensor8_gpio.initAsInput(ARM_SENSOR8_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true); + io_fybh_read1.initAsInput(FYBH_READ1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/); + io_fybh_read2.initAsInput(FYBH_READ2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/); + io_fybh_read3.initAsInput(FYBH_READ3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/); + io_fybh_read4.initAsInput(FYBH_READ4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/); + io_fybh_read5.initAsInput(FYBH_READ5, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/); + io_fybh_read6.initAsInput(FYBH_READ6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/); + + io_fybjl_sensor8.initAsInput(FYBJL_SENSOR8, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/); + io_fybjl_sensor7.initAsInput(FYBJL_SENSOR7, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/); + io_fybjl_sensor6.initAsInput(FYBJL_SENSOR6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/); + io_fybjl_sensor5.initAsInput(FYBJL_SENSOR5, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/); + io_fybjl_sensor4.initAsInput(FYBJL_SENSOR4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/); + io_fybjl_sensor3.initAsInput(FYBJL_SENSOR3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/); + io_fybjl_sensor2.initAsInput(FYBJL_SENSOR2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/); + io_fybjl_sensor1.initAsInput(FYBJL_SENSOR1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/); + io_fybjl_sensor0.initAsInput(FYBJL_SENSOR0, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/); } uint32_t intput_sensors_get_table0() { uint32_t val = 0; - // val |= arm_sensor1_gpio.getStateUint32() << 1; - // val |= arm_sensor2_gpio.getStateUint32() << 2; - // val |= arm_sensor3_gpio.getStateUint32() << 3; - // val |= arm_sensor4_gpio.getStateUint32() << 4; - // val |= arm_sensor5_gpio.getStateUint32() << 5; - // val |= arm_sensor6_gpio.getStateUint32() << 6; - // val |= arm_sensor7_gpio.getStateUint32() << 7; - // val |= arm_sensor8_gpio.getStateUint32() << 8; + + val |= io_fybjl_sensor0.getStateUint32() << 0; + val |= io_fybjl_sensor1.getStateUint32() << 1; + val |= io_fybjl_sensor2.getStateUint32() << 2; + val |= io_fybjl_sensor3.getStateUint32() << 3; + val |= io_fybjl_sensor4.getStateUint32() << 4; + val |= io_fybjl_sensor5.getStateUint32() << 5; + val |= io_fybjl_sensor6.getStateUint32() << 6; + val |= io_fybjl_sensor7.getStateUint32() << 7; + val |= io_fybjl_sensor8.getStateUint32() << 8; + + val |= io_fybh_read1.getStateUint32() << 9; + val |= io_fybh_read2.getStateUint32() << 10; + val |= io_fybh_read3.getStateUint32() << 11; + val |= io_fybh_read4.getStateUint32() << 12; + val |= io_fybh_read5.getStateUint32() << 13; + val |= io_fybh_read6.getStateUint32() << 14; return val; } @@ -98,6 +128,8 @@ void Main::run() { m_py_motor.initialize(&cfg); int32_t chipv = m_py_motor.readChipVERSION(); ZLOGI(TAG, "m_py_motor:%lx", chipv); + m_py_motor.setIHOLD_IRUN(1, 31, 0); + // m_py_motor.rotate(500000); } { @@ -106,6 +138,8 @@ void Main::run() { m_tj_motor.initialize(&cfg); int32_t chipv = m_tj_motor.readChipVERSION(); ZLOGI(TAG, "m_tj_motor:%lx", chipv); + m_tj_motor.setIHOLD_IRUN(1, 31, 0); + // m_tj_motor.rotate(500000); } /******************************************************************************* @@ -138,6 +172,60 @@ void Main::run() { m_protocolStack.activeReg(REG_GPIO_INPUT0, icps::kwr, 0); } + /******************************************************************************* + * 横移电机 * + *******************************************************************************/ + m_py_motor.setIHOLD_IRUN(2, 12, 0); + m_py_motor.setMotorShaft(false); + + m_pyMotorControlService.initialize( // + "infeedMotor", &m_protocolStack, REG_PY_MOTOR_CTRL_ADD_BASE, + &io_fybjl_sensor1, // ZERO_GPIO + NULL, // LGPIO + NULL, // RGPIO + &m_py_motor // motor + ); + + m_pyMotorControlService.cfg_acc->setVal(30000); + m_pyMotorControlService.cfg_dec->setVal(30000); + m_pyMotorControlService.cfg_velocity->setVal(1000000); + m_pyMotorControlService.cfg_zero_shift->setVal(0); + m_pyMotorControlService.cfg_runhome_velocity->setVal(50000); + m_pyMotorControlService.cfg_runtohome_dec->setVal(100000); + m_pyMotorControlService.cfg_min_pos->setVal(-1000); + m_pyMotorControlService.cfg_max_pos->setVal(1144028); + m_pyMotorControlService.cfg_runtohome_max_distance->setVal(INT32_MAX); + m_pyMotorControlService.cfg_runtohome_leave_zero_point_distance->setVal(256 * 200 * 1); + + /******************************************************************************* + * 推杆电机 * + *******************************************************************************/ + + m_tj_motor.setIHOLD_IRUN(2, 12, 0); + m_tj_motor.setMotorShaft(true); + + m_tjMotorControlService.initialize( // + "outfeedMotor", &m_protocolStack, REG_TJ_MOTOR_CTRL_ADD_BASE, + &io_fybjl_sensor4, // ZERO_GPIO + NULL, // LGPIO + NULL, // RGPIO + &m_tj_motor // motor + ); + m_tjMotorControlService.cfg_acc->setVal(30000); + m_tjMotorControlService.cfg_dec->setVal(30000); + m_tjMotorControlService.cfg_velocity->setVal(1000000); + m_tjMotorControlService.cfg_zero_shift->setVal(0); + m_tjMotorControlService.cfg_runhome_velocity->setVal(50000); + m_tjMotorControlService.cfg_runtohome_dec->setVal(100000); + m_tjMotorControlService.cfg_min_pos->setVal(-1000); + m_tjMotorControlService.cfg_max_pos->setVal(1130108); + m_tjMotorControlService.cfg_runtohome_max_distance->setVal(INT32_MAX); + m_tjMotorControlService.cfg_runtohome_leave_zero_point_distance->setVal(256 * 200 * 1); + + // bwm_gpio + + m_oneDimensionalCodeLaserScanner.initialize(&m_protocolStack, REG_LARSER_SCANNER_CTRL_ADD_BASE, FYBJL_SENSOR0, [this]() { return m_tj_motor.getXACTUAL(); }); + while (1) { ZHALCORE::getInstance()->loop(); } diff --git a/usrc/one_dimensional_code_laser_scanner.cpp b/usrc/one_dimensional_code_laser_scanner.cpp new file mode 100644 index 0000000..d2c8ece --- /dev/null +++ b/usrc/one_dimensional_code_laser_scanner.cpp @@ -0,0 +1,85 @@ +#include "one_dimensional_code_laser_scanner.hpp" + +using namespace iflytop; + +#define ONE_BIT_WIDTH ((int32_t)(51200 * 1.20003 / 8.0)) +#define MIN_POS ((int32_t)(102733)) + +#define TAG "OneDimensionalCodeLaserScanner" +int32_t m_off; +int32_t m_posChache[50]; +int32_t endpos = 0; +int32_t startpos = 0; +bool m_idleLevel = true; + +void OneDimensionalCodeLaserScanner::initialize(IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff, Pin_t triggerPin, + PosReadder_t readder) { + m_protocolProcesser = protocolProcesser; + +} + +void OneDimensionalCodeLaserScanner::startScan() { + CriticalContext cc; + m_off = 0; + m_workflag = true; + + m_idleLevel = m_triggerGpio.getState(); + startpos = m_readder(); +} +void OneDimensionalCodeLaserScanner::stopScan() { + CriticalContext cc; + m_workflag = false; + + endpos = m_readder(); +} + +bool OneDimensionalCodeLaserScanner::getPosLevel(int pos) { + bool level = m_idleLevel; + bool nowlevel = m_idleLevel; + + if (pos < m_posChache[0]) { + return m_idleLevel; + } + + for (size_t i = 0; i < m_off; i++) { + nowlevel = !nowlevel; + if (i + 1 < m_off) { + if (pos >= m_posChache[i] && pos < m_posChache[i + 1]) { + level = nowlevel; + break; + } + } else { + level = nowlevel; + } + } + + return level; +} + +void OneDimensionalCodeLaserScanner::parseResult() { // + static uint8_t code[500] = {0}; + + // + int32_t sp = m_posChache[0]; + int32_t ep = endpos; + + int32_t len = ep - sp; + // 把 len分成500份 + for (size_t i = 0; i < 500; i++) { + code[i] = getPosLevel((int32_t)(sp + len / 500.0 * i)); + } + + printf("scanresult:"); + for (size_t i = 0; i < 500; i++) { + printf("%d", code[i]); + } + printf("\r\n"); +} +void OneDimensionalCodeLaserScanner::onGpioIrq(ZGPIO* GPIO_Pin, ZGPIO::IrqTypeEvent_t irqevent) { // + if (!m_workflag) { + return; + } + if (m_off >= 50) return; + m_posChache[m_off] = m_readder(); + m_off++; +} diff --git a/usrc/one_dimensional_code_laser_scanner.hpp b/usrc/one_dimensional_code_laser_scanner.hpp new file mode 100644 index 0000000..b3cd61e --- /dev/null +++ b/usrc/one_dimensional_code_laser_scanner.hpp @@ -0,0 +1,50 @@ +#pragma once +#include +#include + +#include "sdk/hal/zhal.hpp" +#include "sdk\components\iflytop_can_slave_v1\iflytop_can_slave.hpp" + +#define REG_CODE_SCANER_ACT_CTRL (0) // 扫码器控制 +#define REG_CODE_SCANER_ACT_CLEAR_EXCEPTION (1) // 清除异常 +#define REG_CODE_SCANER_STAT_STATUS (5) // 设备状态 +#define REG_CODE_SCANER_STAT_EXCEPTION (6) // 异常状态 +#define REG_CODE_SCANER_CODE (7) // 码存放的地方 +#define REG_CODE_SCANER_SIZE (10) // + +namespace iflytop { +using namespace std; + +#define POS_CACHE_SIZE 28 + +class OneDimensionalCodeLaserScanner { + public: + typedef enum { + kidle, + kworking, + } code_scan_state_t; + + typedef function PosReadder_t; + + private: + IflytopCanProtocolStackProcesser* m_protocolProcesser; + PosReadder_t m_readder; + + ZGPIO m_triggerGpio; + bool m_workflag = false; + + public: + OneDimensionalCodeLaserScanner(){}; + ~OneDimensionalCodeLaserScanner(){}; + + void initialize(IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff, Pin_t triggerPin, PosReadder_t readder); + + void startScan(); + void stopScan(); + void parseResult(); + + private: + void onGpioIrq(ZGPIO* GPIO_Pin, ZGPIO::IrqTypeEvent_t irqevent); + bool getPosLevel(int pos); +}; +} // namespace iflytop