Browse Source

update

master
zhaohe 1 year ago
parent
commit
b520bb23b9
  1. 2
      sdk
  2. 54
      usrc/subboards/subboard20_plate_clamp_case/plate_code_scaner_module.cpp

2
sdk

@ -1 +1 @@
Subproject commit 453c09f80bc5f51b5285d9f8b12df86c973a3515
Subproject commit 7ab0d4ae00c6053d0a6aa35b1fa8fd26d027cfd1

54
usrc/subboards/subboard20_plate_clamp_case/plate_code_scaner_module.cpp

@ -10,7 +10,7 @@ using namespace std;
#define ONE_BIT_WIDTH 12 // 12*.0.1mm
#define BIT_NUM 15
#define MAX_POINT (12 * 15 + 2) // 最多12*15+2个点,多扫描的两个点用于对齐使用
#define MAX_POINT (12 * 15 + 2 * 12 + 1) // 最多12*15+2个点,多扫描的两个点用于对齐使用
#define TAG "PlateCodeScaner"
#define LOGI(fmt, ...) ZLOGI(TAG, fmt, ##__VA_ARGS__)
@ -94,16 +94,32 @@ void PlateCodeScanerModule::initialize(int32_t moduleid, hardware_config_t* hard
adc_capture_buf = (int16_t*)calloc(2, MAX_POINT);
ZASSERT(adc_capture_buf);
m_reg.laster_intensity = 1;
m_reg.scan_gain = 10;
m_reg.laster_intensity = 10;
m_reg.scan_gain = 1;
m_reg.scan_velocity = 500;
m_reg.scan_start_pos = 0;
m_reg.final_stop_pos = 0;
m_reg.code_judgment_threshold = 0;
m_reg.item = 0;
m_reg.lot = 0;
m_reg.rawcode = 0;
m_reg.code_legal = -1;
m_thread.init("PlateCodeScanerModule", 1024, osPriorityNormal);
}
#define PROCESS_REG_CFG(cfg) PROCESS_REG(kreg_plate_code_scaner_##cfg, /* */ REG_GET(m_reg.cfg), REG_SET(m_reg.cfg))
int32_t PlateCodeScanerModule::module_xxx_reg(int32_t param_id, bool read, int32_t& val) {
switch (param_id) {
PROCESS_REG(kreg_plate_code_scaner_laster_intensity, REG_GET(m_reg.laster_intensity), REG_SET(m_reg.laster_intensity));
PROCESS_REG(kreg_plate_code_scaner_scan_gain, REG_GET(m_reg.scan_gain), REG_SET(m_reg.scan_gain));
// PROCESS_REG(kreg_plate_code_scaner_scan_step_interval, REG_GET(m_reg.scan_step_interval), REG_SET(m_reg.scan_step_interval));
// PROCESS_REG(kreg_plate_code_scaner_scan_point_num, REG_GET(m_reg.scan_point_num), REG_SET(m_reg.scan_point_num));
PROCESS_REG_CFG(laster_intensity);
PROCESS_REG_CFG(scan_gain);
PROCESS_REG_CFG(scan_velocity);
PROCESS_REG_CFG(scan_start_pos);
PROCESS_REG_CFG(final_stop_pos);
PROCESS_REG_CFG(code_judgment_threshold);
PROCESS_REG_CFG(item);
PROCESS_REG_CFG(lot);
PROCESS_REG_CFG(rawcode);
PROCESS_REG_CFG(code_legal);
default:
return err::kmodule_not_find_reg;
break;
@ -162,7 +178,7 @@ int32_t PlateCodeScanerModule::plate_code_scaner_push_card_and_scan(int32_t fina
_motor->moveTo(targetpos, m_reg.scan_velocity);
reset_capture_buf();
chip_critical_enter();
// chip_critical_enter();
while (true) {
if (m_thread.getExitFlag()) break;
if (_motor->isReachTarget()) break;
@ -172,8 +188,9 @@ int32_t PlateCodeScanerModule::plate_code_scaner_push_card_and_scan(int32_t fina
int16_t adcv = read_adc_val();
int32_t dpos = abs(pos - m_reg.scan_start_pos);
push_one_point(dpos, adcv);
// osDelay(1);
}
chip_critical_exit();
// chip_critical_exit();
/***********************************************************************************************************************
* *
@ -283,20 +300,19 @@ bool PlateCodeScanerModule::check_when_run() { return true; }
int32_t PlateCodeScanerModule::plate_code_scaner_read_result(int32_t packetIndex, uint8_t* data, int32_t* len) {
// 每次传10个点
int32_t start = packetIndex * RAW_SECTION_SIZE;
int32_t end = start + RAW_SECTION_SIZE;
if (end > adc_capture_point_num) {
end = adc_capture_point_num;
int32_t start = packetIndex * RAW_SECTION_SIZE;
int32_t numpoint = RAW_SECTION_SIZE;
if (start + numpoint > adc_capture_point_num) {
numpoint = adc_capture_point_num - start;
}
int32_t size = end - start;
if (size <= 0) {
if (numpoint <= 0) {
*len = 0;
return 0;
}
memcpy(data, adc_capture_buf + start, size * 2);
*len = size * 2;
memcpy(data, adc_capture_buf + start, numpoint * 2);
*len = numpoint * 2;
return 0;
}
@ -338,6 +354,7 @@ void PlateCodeScanerModule::laser_set_intensity(float intensity) {
int32_t potentiometer_val = 0;
potentiometer_val = intensity / 100.0 * 255.0;
ZLOGI(TAG, "laser_set_intensity: %.2f(potentiometer_val: %d)", intensity, potentiometer_val);
m_t_optical_amp_mcp41_ohm.setPotentiometerValue_0(potentiometer_val);
}
int32_t PlateCodeScanerModule::plate_code_scaner_close_laser() {
@ -348,12 +365,11 @@ int32_t PlateCodeScanerModule::plate_code_scaner_close_laser() {
int32_t PlateCodeScanerModule::read_adc_val() {
int32_t val = 0;
t_result_adc.get_adc_value(val);
#define CAPTURE_NUM 3
int32_t cache[CAPTURE_NUM];
for (int i = 0; i < CAPTURE_NUM; i++) {
f_result_adc.get_adc_value(cache[i]);
t_result_adc.get_adc_value(cache[i]);
}
// 先排序,取中间10个数的中值

Loading…
Cancel
Save