responding to
formatting link
, bronek wrote: int get_segment(int SegmentNo) // return 1if LCD segment SegmentNo is ON { int group,byte,bit; group = SegmentNo
/ 80; byte = (SegmentNo / 8) % 10; bit = SegmentNo % 8; uint8_t Bit = (1 << bit); uint8_t c = raw_segment_data[group * 10 + byte]; if(c & Bit) return 1; return 0;
} uint8_t raw_segment_data[40]; void analyze_data(void) // analyze 71bytes laser_buffer[71] { uint8_t data[6]; uint8_t decimal[8]; uint8_t buffer[32]; float distance = 0; long int distance_mm = 0; static long int last_distance_mm = 0; uint8_t c; int i; // remove LCD_commands, only use LCD data for(i = 0; i < 10;i++) raw_segment_data[i + 0] = laser_buffer[22+i]; for(i = 0; i < 10;i++) raw_segment_data[i + 10] = laser_buffer[35+i]; for(i = 0; i < 10;i++) raw_segment_data[i + 20] = laser_buffer[48+i]; for(i = 0; i < 10;i++) raw_segment_data[i + 30] = laser_buffer[61+i]; memset(data,0,6); // sign minus have SegmenNo 59, I do not use it if(get_segment(300)) data[0] |= 0x02 | 0x04; if(get_segment(61)) data[1] |= 0x01; if(get_segment(141)) data[1] |= 0x02; if(get_segment(221)) data[1] |= 0x04; if(get_segment(301)) data[1] |= 0x08; if(get_segment(220)) data[1] |= 0x10; if(get_segment(60)) data[1] |= 0x20; if(get_segment(140)) data[1] |= 0x40;
if(get_segment(63)) data[2] |= 0x01; if(get_segment(143)) data[2] |= 0x02; if(get_segment(223)) data[2] |= 0x04; if(get_segment(303)) data[2] |= 0x08; if(get_segment(222)) data[2] |= 0x10; if(get_segment(62)) data[2] |= 0x20; if(get_segment(142)) data[2] |= 0x40;
if(get_segment(49)) data[3] |= 0x01; if(get_segment(129)) data[3] |= 0x02; if(get_segment(209)) data[3] |= 0x04; if(get_segment(289)) data[3] |= 0x08; if(get_segment(288)) data[3] |= 0x10; if(get_segment(128)) data[3] |= 0x20; if(get_segment(208)) data[3] |= 0x40;
if(get_segment(51)) data[4] |= 0x01; if(get_segment(131)) data[4] |= 0x02; if(get_segment(211)) data[4] |= 0x04; if(get_segment(291)) data[4] |= 0x08; if(get_segment(290)) data[4] |= 0x10; if(get_segment(130)) data[4] |= 0x20; if(get_segment(210)) data[4] |= 0x40;
if(get_segment(53)) data[5] |= 0x01; if(get_segment(133)) data[5] |= 0x02; if(get_segment(213)) data[5] |= 0x04; if(get_segment(293)) data[5] |= 0x08; if(get_segment(292)) data[5] |= 0x10; if(get_segment(132)) data[5] |= 0x20; if(get_segment(212)) data[5] |= 0x40;
for(i = 0; i < 6; i++) { c = data[i]; if(c == 0x00) decimal[i] = '0'; // Prazdne uvodne miesta else if(c == 0x3F) decimal[i] = '0'; else if (c == 0x06) decimal[i] = '1'; else if (c == 0x6D) decimal[i] = '2'; else if (c == 0x4F) decimal[i] = '3'; else if (c == 0x56) decimal[i] = '4'; else if (c == 0x5B) decimal[i] = '5'; else if (c == 0x7B) decimal[i] = '6'; else if (c == 0x0E) decimal[i] = '7'; else if (c == 0x7F) decimal[i] = '8'; else if (c == 0x5F) decimal[i] = '9'; else decimal[i] = 'X'; } decimal[6] = 0; distance_mm = atol((char*)decimal); if(distance_mm == last_distance_mm) return; last_distance_mm = distance_mm; if(!distance_mm) return; distance = (float)(distance_mm) / 1000; if(get_segment(54) && get_segment(134))// metre i = sprintf((char*)buffer, "%.3f[m]\n\r",distance); if(get_segment(294)) // ft i = sprintf((char*)buffer, "%.3f[m]\n\r",distance * 0.3048); // if(get_segment(214) && get_segment(134)) // inch //i = sprintf((char*)buffer, "Zmen inch na m\n\r"); usart_print(buffer,i); }