Do you have code for arduino? Thanks
- Vote on answer
- posted
3 years ago
Do you have code for arduino? Thanks
Interesting info , I've downloaded for later . Just got back to this tide-gauge project, the optics part of it anyway. The bored hole through the lens has to be offset from centre by the half-inch of the separation of the laser output port and the centre of the large lens. Also covering over the small inset lens, so as not to confuse the range setting procedure. Some stainless steel "reusable drinks straws" I found for guiding the laser thru the lens without side-scatter being returned to the receiving lens. Just trying out a pan of water , shrouded against false returns, to check out over 20 metres initially. For real over tidal water comes later.
-- Global sea level rise to 2100 from curve-fitted existing altimetry data
I'm way off trying to use this SPI coding , and I'm no codesmith , but for anyone else landing here, there may be an error in the
7segment/decimal conversion blockelse 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';
The hex 6D and 5B may need swapping around for the '2' and '5'
-- Global sea level rise to 2100 from curve-fitted existing altimetry data
responding to
} 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); }
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.