├── BLE_DISTANCE_SENSOR.ino ├── BLE_DISTANCE_SENSOR_V2 ├── BLE_DISTANCE_SENSOR_V2.ino ├── ble.h ├── ble.ino ├── config.ino ├── displays.h ├── font.h ├── gps.h ├── gps.ino ├── sd.ino ├── sensor.h ├── sensor.ino ├── vector.h ├── writer.h └── writer.ino ├── Case ├── Battery.SLDPRT ├── TO-001.SLDPRT ├── TO-001_v5.STL ├── TO-002_v5.STL ├── TO-003.SLDPRT ├── TO-003_v5.STL ├── TO-003_v6.step ├── TO-003_v6.stl ├── TO-004.SLDPRT ├── TO-004_v5.STL ├── TO-999.SLDASM ├── TP5000_placeholder.SLDPRT └── To-002.SLDPRT ├── LICENSE ├── Pictures └── radmesserS-Fritzing_ProtectionBoard.png ├── README.md ├── images ├── device │ ├── TP5000-Charger-and-LiFePo-Protection-Board.jpg │ ├── TP5000-Charger-and-LiFePo-Protection-Board_800x800.jpg │ ├── device_case_1.jpg │ ├── device_case_1_800x800.jpg │ ├── device_case_2.jpg │ ├── device_case_2_800x800.jpg │ ├── device_case_3.jpg │ ├── device_case_3_800x800.jpg │ ├── device_case_4.jpg │ ├── device_case_4_800x800.jpg │ ├── device_internals.jpg │ ├── device_internals_800x800.jpg │ └── radmessers-fritzing.png ├── mounting_0.jpg ├── mounting_0_800x800.jpg ├── mounting_1.jpg ├── mounting_1_800x800.jpg └── screenshots │ ├── blescanner │ ├── ble_scanner_1.jpg │ ├── ble_scanner_1_800x800.jpg │ ├── ble_scanner_2.jpg │ ├── ble_scanner_2_800x800.jpg │ ├── ble_scanner_3.jpg │ ├── ble_scanner_3_800x800.jpg │ ├── ble_scanner_4.jpg │ ├── ble_scanner_4_800x800.jpg │ ├── ble_scanner_5.jpg │ └── ble_scanner_5_800x800.jpg │ └── runnerup │ ├── export │ ├── runnerup_export_to_directory_1.jpg │ ├── runnerup_export_to_directory_1_800x800.jpg │ ├── runnerup_export_to_directory_2.jpg │ ├── runnerup_export_to_directory_2_800x800.jpg │ ├── runnerup_export_to_directory_3.jpg │ ├── runnerup_export_to_directory_3_800x800.jpg │ ├── runnerup_export_to_directory_4.jpg │ └── runnerup_export_to_directory_4_800x800.jpg │ ├── runnerup_1.jpg │ ├── runnerup_10.jpg │ ├── runnerup_10_800x800.jpg │ ├── runnerup_1_800x800.jpg │ ├── runnerup_2.jpg │ ├── runnerup_2_800x800.jpg │ ├── runnerup_3.jpg │ ├── runnerup_3_800x800.jpg │ ├── runnerup_4.jpg │ ├── runnerup_4_800x800.jpg │ ├── runnerup_5.jpg │ ├── runnerup_5_800x800.jpg │ ├── runnerup_6.jpg │ ├── runnerup_6_800x800.jpg │ ├── runnerup_7.jpg │ ├── runnerup_7_800x800.jpg │ ├── runnerup_8.jpg │ ├── runnerup_8_800x800.jpg │ ├── runnerup_9.jpg │ └── runnerup_9_800x800.jpg ├── png_overlays_byVIRB ├── distance_--.png ├── distance_001.png ├── distance_002.png ├── distance_003.png ├── distance_004.png ├── distance_005.png ├── distance_006.png ├── distance_007.png ├── distance_008.png ├── distance_009.png ├── distance_010.png ├── distance_011.png ├── distance_012.png ├── distance_013.png ├── distance_014.png ├── distance_015.png ├── distance_016.png ├── distance_017.png ├── distance_018.png ├── distance_019.png ├── distance_020.png ├── distance_021.png ├── distance_022.png ├── distance_023.png ├── distance_024.png ├── distance_025.png ├── distance_026.png ├── distance_027.png ├── distance_028.png ├── distance_029.png ├── distance_030.png ├── distance_031.png ├── distance_032.png ├── distance_033.png ├── distance_034.png ├── distance_035.png ├── distance_036.png ├── distance_037.png ├── distance_038.png ├── distance_039.png ├── distance_040.png ├── distance_041.png ├── distance_042.png ├── distance_043.png ├── distance_044.png ├── distance_045.png ├── distance_046.png ├── distance_047.png ├── distance_048.png ├── distance_049.png ├── distance_050.png ├── distance_051.png ├── distance_052.png ├── distance_053.png ├── distance_054.png ├── distance_055.png ├── distance_056.png ├── distance_057.png ├── distance_058.png ├── distance_059.png ├── distance_060.png ├── distance_061.png ├── distance_062.png ├── distance_063.png ├── distance_064.png ├── distance_065.png ├── distance_066.png ├── distance_067.png ├── distance_068.png ├── distance_069.png ├── distance_070.png ├── distance_071.png ├── distance_072.png ├── distance_073.png ├── distance_074.png ├── distance_075.png ├── distance_076.png ├── distance_077.png ├── distance_078.png ├── distance_079.png ├── distance_080.png ├── distance_081.png ├── distance_082.png ├── distance_083.png ├── distance_084.png ├── distance_085.png ├── distance_086.png ├── distance_087.png ├── distance_088.png ├── distance_089.png ├── distance_090.png ├── distance_091.png ├── distance_092.png ├── distance_093.png ├── distance_094.png ├── distance_095.png ├── distance_096.png ├── distance_097.png ├── distance_098.png ├── distance_099.png ├── distance_100.png ├── distance_101.png ├── distance_102.png ├── distance_103.png ├── distance_104.png ├── distance_105.png ├── distance_106.png ├── distance_107.png ├── distance_108.png ├── distance_109.png ├── distance_110.png ├── distance_111.png ├── distance_112.png ├── distance_113.png ├── distance_114.png ├── distance_115.png ├── distance_116.png ├── distance_117.png ├── distance_118.png ├── distance_119.png ├── distance_120.png ├── distance_121.png ├── distance_122.png ├── distance_123.png ├── distance_124.png ├── distance_125.png ├── distance_126.png ├── distance_127.png ├── distance_128.png ├── distance_129.png ├── distance_130.png ├── distance_131.png ├── distance_132.png ├── distance_133.png ├── distance_134.png ├── distance_135.png ├── distance_136.png ├── distance_137.png ├── distance_138.png ├── distance_139.png ├── distance_140.png ├── distance_141.png ├── distance_142.png ├── distance_143.png ├── distance_144.png ├── distance_145.png ├── distance_146.png ├── distance_147.png ├── distance_148.png ├── distance_149.png ├── distance_150.png ├── distance_151.png ├── distance_152.png ├── distance_153.png ├── distance_154.png ├── distance_155.png ├── distance_156.png ├── distance_157.png ├── distance_158.png ├── distance_159.png ├── distance_160.png ├── distance_161.png ├── distance_162.png ├── distance_163.png ├── distance_164.png ├── distance_165.png ├── distance_166.png ├── distance_167.png ├── distance_168.png ├── distance_169.png ├── distance_170.png ├── distance_171.png ├── distance_172.png ├── distance_173.png ├── distance_174.png ├── distance_175.png ├── distance_176.png ├── distance_177.png ├── distance_178.png ├── distance_179.png ├── distance_180.png ├── distance_181.png ├── distance_182.png ├── distance_183.png ├── distance_184.png ├── distance_185.png ├── distance_186.png ├── distance_187.png ├── distance_188.png ├── distance_189.png ├── distance_190.png ├── distance_191.png ├── distance_192.png ├── distance_193.png ├── distance_194.png ├── distance_195.png ├── distance_196.png ├── distance_197.png ├── distance_198.png ├── distance_199.png ├── distance_200.png ├── distance_201.png ├── distance_202.png ├── distance_203.png ├── distance_204.png ├── distance_205.png ├── distance_206.png ├── distance_207.png ├── distance_208.png ├── distance_209.png ├── distance_210.png ├── distance_211.png ├── distance_212.png ├── distance_213.png ├── distance_214.png ├── distance_215.png ├── distance_216.png ├── distance_217.png ├── distance_218.png ├── distance_219.png ├── distance_220.png ├── distance_221.png ├── distance_222.png ├── distance_223.png ├── distance_224.png ├── distance_225.png ├── distance_226.png ├── distance_227.png ├── distance_228.png ├── distance_229.png ├── distance_230.png ├── distance_231.png ├── distance_232.png ├── distance_233.png ├── distance_234.png ├── distance_235.png ├── distance_236.png ├── distance_237.png ├── distance_238.png ├── distance_239.png ├── distance_240.png ├── distance_241.png ├── distance_242.png ├── distance_243.png ├── distance_244.png ├── distance_245.png ├── distance_246.png ├── distance_247.png ├── distance_248.png ├── distance_249.png ├── distance_250.png ├── distance_251.png ├── distance_252.png ├── distance_253.png ├── distance_254.png └── distance_255.png └── sampleData.gpx /BLE_DISTANCE_SENSOR.ino: -------------------------------------------------------------------------------- 1 | /* 2 | BLE Device pretending to be a Heart Rate Measurement Device but sending distance instead 3 | 4 | Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLETests/SampleNotify.cpp 5 | Ported to Arduino ESP32 by Evandro Copercini 6 | Distance Measurement by Marc Rene Friess: https://www.smarthomeng.de/entfernungsmessung-auf-basis-eines-esp32-und-smarthomeng 7 | 8 | Used BLE Scanner https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner&hl=de to find out what original Heart Rate Sensor is doing and copied services and characteristics UUIDs 9 | 10 | */ 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | // define the number of bytes to store 20 | #define EEPROM_SIZE 1 21 | 22 | // PINs 23 | const int triggerPin = 15; 24 | const int echoPin = 4; 25 | 26 | // VARs 27 | const int runs = 20; 28 | unsigned long measureInterval = 1000; 29 | unsigned long StartTime = millis(); 30 | unsigned long CurrentTime = millis(); 31 | uint8_t handleBarWidth = 0; 32 | int timeout = 15000; 33 | 34 | BLECharacteristic *pCharacteristic; 35 | BLECharacteristic *pSystemIDCharcateristic; 36 | BLECharacteristic *pModelNumberStringCharacteristic; 37 | BLECharacteristic *pSerialNumberStringCharacteristic; 38 | BLECharacteristic *pFirmwareRevisionCharacteristic; 39 | BLECharacteristic *pHardwareRevisionCharacteristic; 40 | BLECharacteristic *pSoftwareRevisionCharacteristic; 41 | BLECharacteristic *pManufacturerNameCharacteristic; 42 | BLECharacteristic *pSensorLocationCharacteristic; 43 | BLECharacteristic *pHeartRateControlPointCharacteristic; 44 | BLECharacteristic *pBatteryCharacteristics; 45 | BLECharacteristic *pHandleBarWidthCharacteristic; 46 | 47 | bool deviceConnected = false; 48 | 49 | // See the following for generating UUIDs: 50 | // https://www.uuidgenerator.net/ 51 | 52 | 53 | #define DEVICE_INFORMATION_UUID "0000180A-0000-1000-8000-00805F9B34FB" 54 | #define SYSTEM_ID_UUID "00002a23-0000-1000-8000-00805f9b34fb" 55 | #define SYSTEM_ID_VALUE_HEX 0x0BBA2DFEFF1A9EA0 56 | #define MODEL_NUMBER_STRING_UUID "00002a24-0000-1000-8000-00805f9b34fb" 57 | #define MODEL_NUMBER_STRING_VALUE "H7" 58 | #define SERIAL_NUMBER_STRING_UUID "00002a25-0000-1000-8000-00805f9b34fb" 59 | #define SERIAL_NUMBER_STRING_VALUE 20182DBA0B 60 | #define SERIAL_NUMBER_STRING_VALUE_HEX 0x3230313832444241304200 61 | #define FIRMWARE_REVISON_UUID "00002a26-0000-1000-8000-00805f9b34fb" 62 | #define FIRMWARE_REVISON_VALUE "1.4.0" 63 | #define HARDWARE_REVISION_UUID "00002a27-0000-1000-8000-00805f9b34fb" 64 | #define HARDWARE_REVISION_VALUE_HEX 0x33393034343032342E313000 65 | #define SOFTWARE_REVISION_UUID "00002a28-0000-1000-8000-00805f9b34fb" 66 | #define SOFTWARE_REVISION_VALUE_HEX 0x483720332E312E3000 67 | #define MANUFACTURER_NAME_STRING_UUID "00002a29-0000-1000-8000-00805f9b34fb" 68 | #define MANUFACTURER_NAME_STRING_VALUE_HEX 0x506F6C617220456C656374726F204F7900 69 | 70 | #define HEART_RATE_SERVICE_UUID "0000180D-0000-1000-8000-00805F9B34FB" 71 | #define HEART_RATE_CHARACTERISTIC_UUID "00002a37-0000-1000-8000-00805f9b34fb" 72 | #define CLIENT_CHARCTERISTIC_CONFIG_DESCRIPTOR_UUID "00002902-0000-1000-8000-00805f9b34fb" 73 | 74 | #define BODY_SENDOR_LOCATION_UUID "00002a38-0000-1000-8000-00805f9b34fb" 75 | #define BODY_SENDOR_LOCATION_VALUE "1" 76 | 77 | #define BATTERY_SERVICE_UUID "0000180f-0000-1000-8000-00805f9b34fb" 78 | #define BATTERY_CHARACTERISTIC_UUID "00002A19-0000-1000-8000-00805F9B34FB" 79 | 80 | #define HEART_RATE_CONTROL_POINT_UUID "00002a39-0000-1000-8000-00805f9b34fb" 81 | #define HEART_RATE_CONTROL_POINT_VALUE "1" 82 | 83 | #define GENERIC_ACCESS_UUID "00001800-0000-1000-8000-00805F9B34FB" 84 | #define GENERIC_ACCESS_DEVICE_NAME_CHARACTERISTIC_UUID "00002a00-0000-1000-8000-00805f9b34fb" 85 | 86 | #define HANDLEBAR_WIDTH_SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" 87 | #define HANDLEBAR_WIDTH_CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" 88 | 89 | 90 | class MyServerCallbacks: public BLEServerCallbacks { 91 | void onConnect(BLEServer* pServer) { 92 | deviceConnected = true; 93 | }; 94 | 95 | void onDisconnect(BLEServer* pServer) { 96 | deviceConnected = false; 97 | } 98 | 99 | }; 100 | 101 | class MyWriterCallbacks: public BLECharacteristicCallbacks { 102 | 103 | void onWrite(BLECharacteristic *pCharacteristic) { 104 | std::string value = pCharacteristic->getValue(); 105 | handleBarWidth = atoi(value.c_str()); 106 | timeout = 15000 + (int)(handleBarWidth * 29.1 * 2); 107 | EEPROM.write(0, handleBarWidth); 108 | EEPROM.commit(); 109 | } 110 | }; 111 | 112 | 113 | 114 | void setup() { 115 | Serial.begin(115200); 116 | 117 | // initialize EEPROM with predefined size 118 | EEPROM.begin(EEPROM_SIZE); 119 | 120 | handleBarWidth = EEPROM.read(0); 121 | timeout = 15000 + (int)(handleBarWidth * 29.1 * 2); 122 | 123 | // PIN-Modes 124 | pinMode(triggerPin, OUTPUT); 125 | pinMode(echoPin, INPUT); 126 | digitalWrite(triggerPin, HIGH); 127 | 128 | 129 | // Create the BLE Device 130 | BLEDevice::init("Polar H7 2DBA0B2F"); 131 | 132 | // Create the BLE Server 133 | BLEServer *pServer = BLEDevice::createServer(); 134 | pServer->setCallbacks(new MyServerCallbacks()); 135 | 136 | // Create the BLE Services 137 | BLEService *pDeviceInfoService = pServer->createService(DEVICE_INFORMATION_UUID); 138 | BLEService *pHeartRateService = pServer->createService(HEART_RATE_SERVICE_UUID); 139 | BLEService *pBatteryLevelService = pServer->createService(BATTERY_SERVICE_UUID); 140 | BLEService *pHandleBarWidthService = pServer->createService(HANDLEBAR_WIDTH_SERVICE_UUID); 141 | 142 | 143 | // Create a BLE Characteristic 144 | pCharacteristic = pHeartRateService->createCharacteristic( 145 | HEART_RATE_CHARACTERISTIC_UUID, 146 | BLECharacteristic::PROPERTY_READ | 147 | //BLECharacteristic::PROPERTY_WRITE | 148 | BLECharacteristic::PROPERTY_NOTIFY //| 149 | //BLECharacteristic::PROPERTY_INDICATE 150 | ); 151 | pHeartRateControlPointCharacteristic = pHeartRateService->createCharacteristic( HEART_RATE_CONTROL_POINT_UUID, 152 | BLECharacteristic::PROPERTY_READ | 153 | BLECharacteristic::PROPERTY_WRITE 154 | //BLECharacteristic::PROPERTY_NOTIFY //| 155 | //BLECharacteristic::PROPERTY_INDICATE 156 | ); 157 | 158 | pHandleBarWidthCharacteristic = pHandleBarWidthService->createCharacteristic(HANDLEBAR_WIDTH_CHARACTERISTIC_UUID, 159 | BLECharacteristic::PROPERTY_READ | 160 | BLECharacteristic::PROPERTY_WRITE 161 | //BLECharacteristic::PROPERTY_NOTIFY //| 162 | //BLECharacteristic::PROPERTY_INDICATE 163 | ); 164 | 165 | pSensorLocationCharacteristic = pHeartRateService->createCharacteristic(BODY_SENDOR_LOCATION_UUID, BLECharacteristic::PROPERTY_READ); 166 | uint8_t locationValue = 1; 167 | pSensorLocationCharacteristic->setValue(&locationValue,1); 168 | 169 | 170 | pSystemIDCharcateristic = pDeviceInfoService->createCharacteristic(SYSTEM_ID_UUID, BLECharacteristic::PROPERTY_READ); 171 | uint8_t systemIDValueHex[8] = {0x0B, 0xBA, 0x2D, 0xFE, 0xFF, 0x1A, 0x9E, 0xA0}; 172 | pSystemIDCharcateristic->setValue(systemIDValueHex, 8); 173 | 174 | pModelNumberStringCharacteristic = pDeviceInfoService->createCharacteristic(MODEL_NUMBER_STRING_UUID, BLECharacteristic::PROPERTY_READ); 175 | pModelNumberStringCharacteristic->setValue(MODEL_NUMBER_STRING_VALUE); 176 | 177 | pSerialNumberStringCharacteristic = pDeviceInfoService->createCharacteristic(SERIAL_NUMBER_STRING_UUID, BLECharacteristic::PROPERTY_READ); 178 | uint8_t serialNumberStringValueHex[11] = {0x32, 0x30, 0x31, 0x38, 0x32, 0x44, 0x42, 0x41, 0x30, 0x42, 0x00}; 179 | pSerialNumberStringCharacteristic->setValue(serialNumberStringValueHex, 11); 180 | 181 | pFirmwareRevisionCharacteristic = pDeviceInfoService->createCharacteristic(FIRMWARE_REVISON_UUID, BLECharacteristic::PROPERTY_READ); 182 | pFirmwareRevisionCharacteristic->setValue(FIRMWARE_REVISON_VALUE); 183 | 184 | pHardwareRevisionCharacteristic = pDeviceInfoService->createCharacteristic(HARDWARE_REVISION_UUID, BLECharacteristic::PROPERTY_READ); 185 | uint8_t hardwareRevisionValueHex[12] = {0x33, 0x39, 0x30, 0x34, 0x34, 0x30, 0x32, 0x34, 0x2E, 0x31, 0x30, 0x00}; 186 | pHardwareRevisionCharacteristic->setValue(hardwareRevisionValueHex, 12); 187 | 188 | pSoftwareRevisionCharacteristic = pDeviceInfoService->createCharacteristic(SOFTWARE_REVISION_UUID, BLECharacteristic::PROPERTY_READ); 189 | uint8_t softwareRevisionValueHex[9] = {0x48, 0x37, 0x20, 0x33, 0x2E, 0x31, 0x2E, 0x30, 0x00}; 190 | pSoftwareRevisionCharacteristic->setValue(softwareRevisionValueHex, 9); 191 | 192 | pManufacturerNameCharacteristic = pDeviceInfoService->createCharacteristic(MANUFACTURER_NAME_STRING_UUID, BLECharacteristic::PROPERTY_READ); 193 | uint8_t manufacturerNameValueHex[17] = {0x50, 0x6F, 0x6C, 0x61, 0x72, 0x20, 0x45, 0x6C, 0x65, 0x63, 0x74, 0x72, 0x6F, 0x20, 0x4F, 0x79, 0x00}; 194 | pManufacturerNameCharacteristic->setValue(manufacturerNameValueHex, 17); 195 | 196 | #define MANUFACTURER_NAME_STRING_UUID "00002a29-0000-1000-8000-00805f9b34fb" 197 | #define MANUFACTURER_NAME_STRING_VALUE_HEX 0x506F6C617220456C656374726F204F7900 198 | //Battery Service 199 | pBatteryCharacteristics = pBatteryLevelService->createCharacteristic(BATTERY_CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ); 200 | pBatteryCharacteristics->setValue("90"); 201 | 202 | // https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.descriptor.gatt.client_characteristic_configuration.xml 203 | // Create a BLE Descriptor 204 | BLEDescriptor* pDescriptor = new BLEDescriptor(CLIENT_CHARCTERISTIC_CONFIG_DESCRIPTOR_UUID); 205 | 206 | 207 | pCharacteristic->addDescriptor(pDescriptor); 208 | uint8_t descriptorbuffer; 209 | descriptorbuffer = 1; 210 | pDescriptor->setValue(&descriptorbuffer,1); 211 | 212 | pHandleBarWidthCharacteristic->setCallbacks(new MyWriterCallbacks()); 213 | char handleBarString[8]; 214 | itoa(handleBarWidth, handleBarString, 10); 215 | pHandleBarWidthCharacteristic->setValue(handleBarString); 216 | 217 | // Start the service 218 | pHeartRateService->start(); 219 | pDeviceInfoService->start(); 220 | pBatteryLevelService->start(); 221 | pHandleBarWidthService->start(); 222 | 223 | // Start advertising 224 | BLEAdvertisementData* data; 225 | pServer->getAdvertising()->addServiceUUID(pHeartRateService->getUUID()); 226 | pServer->getAdvertising()->start(); 227 | Serial.println("Waiting a client connection to notify..."); 228 | } 229 | 230 | void loop() { 231 | CurrentTime = millis(); 232 | uint8_t minDistance = 255; 233 | int measurements=0; 234 | while ((CurrentTime - StartTime) < measureInterval) 235 | { 236 | CurrentTime = millis(); 237 | get_distance_min(minDistance); 238 | measurements++; 239 | } 240 | //float distance = get_distance(); 241 | //float avg_distance = get_distance_avg(); 242 | //int min_distance = get_distance_min(); 243 | 244 | //Serial.write("distance: "); 245 | //Serial.print(distance) ; 246 | //Serial.write(" , avg. distance: "); 247 | //Serial.print(avg_distance) ; 248 | Serial.write("min. distance: "); 249 | Serial.print(minDistance) ; 250 | Serial.write(" cm,"); 251 | Serial.print(measurements); 252 | Serial.write(" measurents \n"); 253 | 254 | if (deviceConnected) { 255 | Serial.printf("*** NOTIFY: %d ***\n", minDistance); 256 | uint8_t buffer[2]; 257 | uint8_t isit8or16bit = 0; 258 | 259 | buffer[0] = isit8or16bit; 260 | buffer[1] = minDistance; 261 | //buffer[2] = value; 262 | 263 | pCharacteristic->setValue(buffer, 2); 264 | pCharacteristic->notify(); 265 | } 266 | 267 | unsigned long ElapsedTime = CurrentTime - StartTime; 268 | StartTime = CurrentTime; 269 | Serial.write(" Time elapsed: "); 270 | Serial.print(ElapsedTime); 271 | Serial.write(" milliseconds\n"); 272 | //delay(2000); 273 | } 274 | 275 | float get_distance() { 276 | float duration=0; 277 | float distance=0; 278 | 279 | digitalWrite(triggerPin, LOW); 280 | delayMicroseconds(2); 281 | noInterrupts(); 282 | digitalWrite(triggerPin, HIGH); 283 | delayMicroseconds(10); 284 | digitalWrite(triggerPin, LOW); 285 | duration = pulseIn(echoPin, HIGH, timeout); // Erfassung - Dauer in Mikrosekunden 286 | interrupts(); 287 | 288 | distance = (duration / 2) / 29.1; // Distanz in CM 289 | return(distance); 290 | } 291 | 292 | float get_distance_avg() { 293 | float alt = 0; 294 | float avg; 295 | float dist; 296 | int i; 297 | 298 | delay(10); 299 | alt = get_distance(); 300 | delay(10); 301 | for (i=0; i 0.0) && (dist < min)) 320 | { 321 | min=dist; 322 | } 323 | delay(20); 324 | } 325 | return (uint8_t(min)); 326 | } 327 | 328 | void get_distance_min(uint8_t& min_distance) { 329 | float dist; 330 | dist = get_distance()-float(handleBarWidth); 331 | if ((dist > 0.0) && (dist < float(min_distance))) 332 | { 333 | min_distance=uint8_t(dist); 334 | } 335 | delay(20); 336 | } 337 | 338 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/BLE_DISTANCE_SENSOR_V2.ino: -------------------------------------------------------------------------------- 1 | /* 2 | BLE Device pretending to be a Heart Rate Measurement Device but sending distance instead 3 | 4 | Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLETests/SampleNotify.cpp 5 | Ported to Arduino ESP32 by Evandro Copercini 6 | Distance Measurement by Marc Rene Friess: https://www.smarthomeng.de/entfernungsmessung-auf-basis-eines-esp32-und-smarthomeng 7 | 8 | Used BLE Scanner https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner&hl=de to find out what original Heart Rate Sensor is doing and copied services and characteristics UUIDs 9 | 10 | */ 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #define CIRCULAR_BUFFER_INT_SAFE 19 | #include 20 | #include "displays.h" 21 | #include "FS.h" 22 | #include "SD.h" 23 | #include "SPI.h" 24 | 25 | //#include 26 | 27 | //GPX myGPX; 28 | 29 | #include "gps.h" 30 | #include "ble.h" 31 | #include "vector.h" 32 | #include "writer.h" 33 | #include "sensor.h" 34 | 35 | //GPS 36 | 37 | // define the number of bytes to store 38 | #define EEPROM_SIZE 1 39 | #define EEPROM_SIZE 128 40 | 41 | #define MAX_SENSOR_VALUE 255 42 | 43 | // PINs 44 | const int triggerPin = 15; 45 | const int echoPin = 4; 46 | 47 | const int PushButton = 2; 48 | 49 | 50 | // VARs 51 | const int runs = 20; 52 | unsigned long measureInterval = 1000; 53 | unsigned long timeOfLastNotificationAttempt = millis(); 54 | unsigned long timeOfMinimum = millis(); 55 | unsigned long StartTime = millis(); 56 | unsigned long CurrentTime = millis(); 57 | unsigned long buttonPushedTime = millis(); 58 | 59 | int timeout = 15000; 60 | bool usingSD = false; 61 | String text = ""; 62 | uint8_t minDistanceToConfirm = MAX_SENSOR_VALUE; 63 | uint8_t confirmedMinDistance = MAX_SENSOR_VALUE; 64 | bool transmitConfirmedData = false; 65 | int lastButtonState = 0; 66 | int buttonState = 0; 67 | bool handleBarWidthReset = false; 68 | 69 | String filename; 70 | 71 | CircularBuffer dataBuffer; 72 | Vector sensorNames; 73 | 74 | #define TASK_SERIAL_RATE 1000 // ms 75 | 76 | uint32_t nextSerialTaskTs = 0; 77 | uint32_t nextOledTaskTs = 0; 78 | 79 | uint8_t handleBarWidth = 0; 80 | bool deviceConnected = false; 81 | 82 | class MyServerCallbacks: public BLEServerCallbacks { 83 | void onConnect(BLEServer* pServer) { 84 | deviceConnected = true; 85 | }; 86 | 87 | void onDisconnect(BLEServer* pServer) { 88 | deviceConnected = false; 89 | } 90 | 91 | }; 92 | 93 | class MyWriterCallbacks: public BLECharacteristicCallbacks { 94 | void onWrite(BLECharacteristic *pCharacteristic) { 95 | std::string value = pCharacteristic->getValue(); 96 | handleBarWidth = atoi(value.c_str()); 97 | timeout = 15000 + (int)(handleBarWidth * 29.1 * 2); 98 | EEPROM.write(0, handleBarWidth); 99 | EEPROM.commit(); 100 | } 101 | }; 102 | 103 | DisplayDevice* displayTest; 104 | //DisplayDevice* displayTest2; 105 | 106 | FileWriter* writer; 107 | 108 | DistanceSensor* sensor1; 109 | // See the following for generating UUIDs: 110 | // https://www.uuidgenerator.net/ 111 | 112 | 113 | void setup() { 114 | String sensorName1 = "DistanceLeft"; 115 | sensorNames.push_back(sensorName1); 116 | displayTest = new TM1637DisplayDevice; 117 | //displayTest2 = new SSD1306DisplayDevice; 118 | 119 | sensor1 = new HCSR04DistanceSensor; 120 | 121 | //GPS 122 | SerialGPS.begin(9600, SERIAL_8N1, 16, 17); 123 | while (!EEPROM.begin(EEPROM_SIZE)) { 124 | true; 125 | } 126 | 127 | readLastFixFromEEPROM(); 128 | 129 | Serial.begin(115200); 130 | while (!SD.begin()) 131 | { 132 | Serial.println("Card Mount Failed"); 133 | delay(1000); 134 | } 135 | 136 | { 137 | Serial.println("Card Mount Succeeded"); 138 | writer = new CSVFileWriter; 139 | writer->setFileName(); 140 | writer->writeHeader(); 141 | } 142 | Serial.println("File initialised"); 143 | 144 | // initialize EEPROM with predefined size 145 | EEPROM.begin(EEPROM_SIZE); 146 | 147 | sensor1->setOffset(EEPROM.read(0)); 148 | 149 | // PIN-Modes 150 | pinMode(PushButton, INPUT); 151 | 152 | while (gps.satellites.value() < 4) 153 | { 154 | readGPSData(); 155 | delay(1000); 156 | Serial.println("Waiting for GPS fix... \n"); 157 | } 158 | Serial.println("Got GPS Fix \n"); 159 | heartRateBLEInit(); 160 | Serial.println("Waiting a client connection to notify..."); 161 | } 162 | 163 | /* 164 | easily read and write EEPROM 165 | */ 166 | template int EEPROM_writeAnything(int ee, const T& value) 167 | { 168 | const byte* p = (const byte*)(const void*)&value; 169 | int i; 170 | for (i = 0; i < sizeof(value); i++) 171 | EEPROM.write(ee++, *p++); 172 | return i; 173 | } 174 | 175 | template int EEPROM_readAnything(int ee, T& value) 176 | { 177 | byte* p = (byte*)(void*)&value; 178 | int i; 179 | for (i = 0; i < sizeof(value); i++) 180 | *p++ = EEPROM.read(ee++); 181 | return i; 182 | } 183 | 184 | void loop() { 185 | 186 | DataSet* currentSet = new DataSet; 187 | writeLastFixToEEPROM(); 188 | // Todo: proceed only if gps is valid and updated 189 | readGPSData(); 190 | currentSet->location = gps.location; 191 | currentSet->altitude = gps.altitude; 192 | currentSet->date = gps.date; 193 | currentSet->time = gps.time; 194 | 195 | CurrentTime = millis(); 196 | uint8_t minDistance = MAX_SENSOR_VALUE; 197 | int measurements = 0; 198 | if ((CurrentTime - timeOfMinimum ) > 5000) 199 | { 200 | minDistanceToConfirm = MAX_SENSOR_VALUE; 201 | } 202 | 203 | while ((CurrentTime - StartTime) < measureInterval) 204 | { 205 | CurrentTime = millis(); 206 | sensor1->getMinDistance(minDistance); 207 | 208 | if (minDistance < minDistanceToConfirm) 209 | { 210 | minDistanceToConfirm = minDistance; 211 | timeOfMinimum = millis(); 212 | } 213 | //displayTest->showValue(minDistanceToConfirm); 214 | displayTest->showValue(gps.satellites.value()); 215 | //displayTest2->showValue(minDistanceToConfirm); 216 | 217 | if ((minDistanceToConfirm < MAX_SENSOR_VALUE) && !transmitConfirmedData) 218 | { 219 | buttonState = digitalRead(PushButton); 220 | if (buttonState != lastButtonState) 221 | { 222 | if (buttonState == LOW) 223 | { 224 | if (!handleBarWidthReset) transmitConfirmedData = true; 225 | else handleBarWidthReset = false; 226 | } 227 | else 228 | { 229 | buttonPushedTime = CurrentTime; 230 | } 231 | } 232 | else 233 | { 234 | if (buttonState == HIGH) 235 | { 236 | //Button state is high for longer than 5 seconds -> reset handlebar width 237 | //Todo: do it for all connected sensors 238 | if ((CurrentTime - buttonPushedTime > 5000)) 239 | { 240 | setHandleBarWidth(minDistanceToConfirm); 241 | displayTest->showValue(minDistanceToConfirm); 242 | //displayTest2->showValue(minDistanceToConfirm); 243 | delay(5000); 244 | handleBarWidthReset = true; 245 | transmitConfirmedData = false; 246 | } 247 | } 248 | } 249 | lastButtonState = buttonState; 250 | } 251 | measurements++; 252 | } 253 | currentSet->sensorValues.push_back(minDistance); 254 | 255 | //if nothing was detected, write the dataset to file, otherwise write it to the buffer for confirmation 256 | if ((minDistance == MAX_SENSOR_VALUE) && dataBuffer.isEmpty()) 257 | { 258 | if (writer) writer->writeData(currentSet); 259 | delete currentSet; 260 | } 261 | else 262 | { 263 | dataBuffer.unshift(currentSet); 264 | } 265 | 266 | Serial.write("min. distance: "); 267 | Serial.print(minDistance) ; 268 | Serial.write(" cm,"); 269 | Serial.print(measurements); 270 | Serial.write(" measurements \n"); 271 | 272 | uint8_t buffer[2]; 273 | uint8_t isit8or16bit = 0; 274 | buffer[0] = isit8or16bit; 275 | if (transmitConfirmedData) 276 | { 277 | buffer[1] = minDistanceToConfirm; 278 | // make sure the minimum distance is saved only once 279 | using index_t = decltype(dataBuffer)::index_t; 280 | index_t j; 281 | for (index_t i = 0; i < dataBuffer.size(); i++) 282 | { 283 | if (dataBuffer[i]->sensorValues[0] == minDistanceToConfirm) 284 | { 285 | j = i; 286 | } 287 | } 288 | for (index_t i = 0; i < dataBuffer.size(); i++) 289 | { 290 | if (i != j) 291 | { 292 | dataBuffer[i]->sensorValues[0] = MAX_SENSOR_VALUE; 293 | } 294 | } 295 | 296 | while (!dataBuffer.isEmpty()) 297 | { 298 | DataSet* dataset = dataBuffer.shift(); 299 | Serial.printf("Trying to write set to file\n"); 300 | if (writer) writer->writeData(dataset); 301 | Serial.printf("Wrote set to file\n"); 302 | delete dataset; 303 | } 304 | minDistanceToConfirm = MAX_SENSOR_VALUE; 305 | transmitConfirmedData = false; 306 | } 307 | else 308 | { 309 | buffer[1] = MAX_SENSOR_VALUE; 310 | } 311 | 312 | if (dataBuffer.isFull()) 313 | { 314 | DataSet* dataset = dataBuffer.shift(); 315 | dataset->sensorValues[0] = MAX_SENSOR_VALUE; 316 | Serial.printf("Buffer full, writing set to file\n"); 317 | if (writer) writer->writeData(dataset); 318 | Serial.printf("Deleting dataset\n"); 319 | delete dataset; 320 | } 321 | 322 | if (deviceConnected) { 323 | Serial.printf("*** NOTIFY: %d ***\n", buffer[1] ); 324 | heartRateBLENotify(buffer); 325 | } 326 | 327 | unsigned long ElapsedTime = CurrentTime - StartTime; 328 | StartTime = CurrentTime; 329 | Serial.write(" Time elapsed: "); 330 | Serial.print(ElapsedTime); 331 | Serial.write(" milliseconds\n"); 332 | } 333 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/ble.h: -------------------------------------------------------------------------------- 1 | #define DEVICE_INFORMATION_UUID "0000180A-0000-1000-8000-00805F9B34FB" 2 | #define SYSTEM_ID_UUID "00002a23-0000-1000-8000-00805f9b34fb" 3 | #define SYSTEM_ID_VALUE_HEX 0x0BBA2DFEFF1A9EA0 4 | #define MODEL_NUMBER_STRING_UUID "00002a24-0000-1000-8000-00805f9b34fb" 5 | #define MODEL_NUMBER_STRING_VALUE "H7" 6 | #define SERIAL_NUMBER_STRING_UUID "00002a25-0000-1000-8000-00805f9b34fb" 7 | #define SERIAL_NUMBER_STRING_VALUE 20182DBA0B 8 | #define SERIAL_NUMBER_STRING_VALUE_HEX 0x3230313832444241304200 9 | #define FIRMWARE_REVISON_UUID "00002a26-0000-1000-8000-00805f9b34fb" 10 | #define FIRMWARE_REVISON_VALUE "1.4.0" 11 | #define HARDWARE_REVISION_UUID "00002a27-0000-1000-8000-00805f9b34fb" 12 | #define HARDWARE_REVISION_VALUE_HEX 0x33393034343032342E313000 13 | #define SOFTWARE_REVISION_UUID "00002a28-0000-1000-8000-00805f9b34fb" 14 | #define SOFTWARE_REVISION_VALUE_HEX 0x483720332E312E3000 15 | #define MANUFACTURER_NAME_STRING_UUID "00002a29-0000-1000-8000-00805f9b34fb" 16 | #define MANUFACTURER_NAME_STRING_VALUE_HEX 0x506F6C617220456C656374726F204F7900 17 | 18 | #define HEART_RATE_SERVICE_UUID "0000180D-0000-1000-8000-00805F9B34FB" 19 | #define HEART_RATE_CHARACTERISTIC_UUID "00002a37-0000-1000-8000-00805f9b34fb" 20 | #define CLIENT_CHARCTERISTIC_CONFIG_DESCRIPTOR_UUID "00002902-0000-1000-8000-00805f9b34fb" 21 | 22 | #define BODY_SENDOR_LOCATION_UUID "00002a38-0000-1000-8000-00805f9b34fb" 23 | #define BODY_SENDOR_LOCATION_VALUE "1" 24 | 25 | #define BATTERY_SERVICE_UUID "0000180f-0000-1000-8000-00805f9b34fb" 26 | #define BATTERY_CHARACTERISTIC_UUID "00002A19-0000-1000-8000-00805F9B34FB" 27 | 28 | #define HEART_RATE_CONTROL_POINT_UUID "00002a39-0000-1000-8000-00805f9b34fb" 29 | #define HEART_RATE_CONTROL_POINT_VALUE "1" 30 | 31 | #define GENERIC_ACCESS_UUID "00001800-0000-1000-8000-00805F9B34FB" 32 | #define GENERIC_ACCESS_DEVICE_NAME_CHARACTERISTIC_UUID "00002a00-0000-1000-8000-00805f9b34fb" 33 | 34 | #define HANDLEBAR_WIDTH_SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" 35 | #define HANDLEBAR_WIDTH_CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" 36 | 37 | BLECharacteristic *pCharacteristic; 38 | BLECharacteristic *pSystemIDCharcateristic; 39 | BLECharacteristic *pModelNumberStringCharacteristic; 40 | BLECharacteristic *pSerialNumberStringCharacteristic; 41 | BLECharacteristic *pFirmwareRevisionCharacteristic; 42 | BLECharacteristic *pHardwareRevisionCharacteristic; 43 | BLECharacteristic *pSoftwareRevisionCharacteristic; 44 | BLECharacteristic *pManufacturerNameCharacteristic; 45 | BLECharacteristic *pSensorLocationCharacteristic; 46 | BLECharacteristic *pHeartRateControlPointCharacteristic; 47 | BLECharacteristic *pBatteryCharacteristics; 48 | BLECharacteristic *pHandleBarWidthCharacteristic; 49 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/ble.ino: -------------------------------------------------------------------------------- 1 | 2 | void heartRateBLEInit() { 3 | // Create the BLE Device 4 | BLEDevice::init("Polar H7 2DBA0B2F"); 5 | 6 | // Create the BLE Server 7 | BLEServer *pServer = BLEDevice::createServer(); 8 | pServer->setCallbacks(new MyServerCallbacks()); 9 | 10 | // Create the BLE Services 11 | BLEService *pDeviceInfoService = pServer->createService(DEVICE_INFORMATION_UUID); 12 | BLEService *pHeartRateService = pServer->createService(HEART_RATE_SERVICE_UUID); 13 | BLEService *pBatteryLevelService = pServer->createService(BATTERY_SERVICE_UUID); 14 | BLEService *pHandleBarWidthService = pServer->createService(HANDLEBAR_WIDTH_SERVICE_UUID); 15 | 16 | 17 | // Create a BLE Characteristic 18 | pCharacteristic = pHeartRateService->createCharacteristic( 19 | HEART_RATE_CHARACTERISTIC_UUID, 20 | BLECharacteristic::PROPERTY_READ | 21 | //BLECharacteristic::PROPERTY_WRITE | 22 | BLECharacteristic::PROPERTY_NOTIFY //| 23 | //BLECharacteristic::PROPERTY_INDICATE 24 | ); 25 | pHeartRateControlPointCharacteristic = pHeartRateService->createCharacteristic( HEART_RATE_CONTROL_POINT_UUID, 26 | BLECharacteristic::PROPERTY_READ | 27 | BLECharacteristic::PROPERTY_WRITE 28 | //BLECharacteristic::PROPERTY_NOTIFY //| 29 | //BLECharacteristic::PROPERTY_INDICATE 30 | ); 31 | 32 | pHandleBarWidthCharacteristic = pHandleBarWidthService->createCharacteristic(HANDLEBAR_WIDTH_CHARACTERISTIC_UUID, 33 | BLECharacteristic::PROPERTY_READ | 34 | BLECharacteristic::PROPERTY_WRITE 35 | //BLECharacteristic::PROPERTY_NOTIFY //| 36 | //BLECharacteristic::PROPERTY_INDICATE 37 | ); 38 | 39 | pSensorLocationCharacteristic = pHeartRateService->createCharacteristic(BODY_SENDOR_LOCATION_UUID, BLECharacteristic::PROPERTY_READ); 40 | uint8_t locationValue = 1; 41 | pSensorLocationCharacteristic->setValue(&locationValue, 1); 42 | 43 | 44 | pSystemIDCharcateristic = pDeviceInfoService->createCharacteristic(SYSTEM_ID_UUID, BLECharacteristic::PROPERTY_READ); 45 | uint8_t systemIDValueHex[8] = {0x0B, 0xBA, 0x2D, 0xFE, 0xFF, 0x1A, 0x9E, 0xA0}; 46 | pSystemIDCharcateristic->setValue(systemIDValueHex, 8); 47 | 48 | pModelNumberStringCharacteristic = pDeviceInfoService->createCharacteristic(MODEL_NUMBER_STRING_UUID, BLECharacteristic::PROPERTY_READ); 49 | pModelNumberStringCharacteristic->setValue(MODEL_NUMBER_STRING_VALUE); 50 | 51 | pSerialNumberStringCharacteristic = pDeviceInfoService->createCharacteristic(SERIAL_NUMBER_STRING_UUID, BLECharacteristic::PROPERTY_READ); 52 | uint8_t serialNumberStringValueHex[11] = {0x32, 0x30, 0x31, 0x38, 0x32, 0x44, 0x42, 0x41, 0x30, 0x42, 0x00}; 53 | pSerialNumberStringCharacteristic->setValue(serialNumberStringValueHex, 11); 54 | 55 | pFirmwareRevisionCharacteristic = pDeviceInfoService->createCharacteristic(FIRMWARE_REVISON_UUID, BLECharacteristic::PROPERTY_READ); 56 | pFirmwareRevisionCharacteristic->setValue(FIRMWARE_REVISON_VALUE); 57 | 58 | pHardwareRevisionCharacteristic = pDeviceInfoService->createCharacteristic(HARDWARE_REVISION_UUID, BLECharacteristic::PROPERTY_READ); 59 | uint8_t hardwareRevisionValueHex[12] = {0x33, 0x39, 0x30, 0x34, 0x34, 0x30, 0x32, 0x34, 0x2E, 0x31, 0x30, 0x00}; 60 | pHardwareRevisionCharacteristic->setValue(hardwareRevisionValueHex, 12); 61 | 62 | pSoftwareRevisionCharacteristic = pDeviceInfoService->createCharacteristic(SOFTWARE_REVISION_UUID, BLECharacteristic::PROPERTY_READ); 63 | uint8_t softwareRevisionValueHex[9] = {0x48, 0x37, 0x20, 0x33, 0x2E, 0x31, 0x2E, 0x30, 0x00}; 64 | pSoftwareRevisionCharacteristic->setValue(softwareRevisionValueHex, 9); 65 | 66 | pManufacturerNameCharacteristic = pDeviceInfoService->createCharacteristic(MANUFACTURER_NAME_STRING_UUID, BLECharacteristic::PROPERTY_READ); 67 | uint8_t manufacturerNameValueHex[17] = {0x50, 0x6F, 0x6C, 0x61, 0x72, 0x20, 0x45, 0x6C, 0x65, 0x63, 0x74, 0x72, 0x6F, 0x20, 0x4F, 0x79, 0x00}; 68 | pManufacturerNameCharacteristic->setValue(manufacturerNameValueHex, 17); 69 | 70 | #define MANUFACTURER_NAME_STRING_UUID "00002a29-0000-1000-8000-00805f9b34fb" 71 | #define MANUFACTURER_NAME_STRING_VALUE_HEX 0x506F6C617220456C656374726F204F7900 72 | //Battery Service 73 | pBatteryCharacteristics = pBatteryLevelService->createCharacteristic(BATTERY_CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ); 74 | pBatteryCharacteristics->setValue("90"); 75 | 76 | // https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.descriptor.gatt.client_characteristic_configuration.xml 77 | // Create a BLE Descriptor 78 | BLEDescriptor* pDescriptor = new BLEDescriptor(CLIENT_CHARCTERISTIC_CONFIG_DESCRIPTOR_UUID); 79 | 80 | 81 | pCharacteristic->addDescriptor(pDescriptor); 82 | uint8_t descriptorbuffer; 83 | descriptorbuffer = 1; 84 | pDescriptor->setValue(&descriptorbuffer, 1); 85 | 86 | pHandleBarWidthCharacteristic->setCallbacks(new MyWriterCallbacks()); 87 | char handleBarString[8]; 88 | itoa(handleBarWidth, handleBarString, 10); 89 | pHandleBarWidthCharacteristic->setValue(handleBarString); 90 | 91 | // Start the service 92 | pHeartRateService->start(); 93 | pDeviceInfoService->start(); 94 | pBatteryLevelService->start(); 95 | pHandleBarWidthService->start(); 96 | 97 | // Start advertising 98 | BLEAdvertisementData* data; 99 | pServer->getAdvertising()->addServiceUUID(pHeartRateService->getUUID()); 100 | pServer->getAdvertising()->start(); 101 | } 102 | 103 | 104 | void heartRateBLENotify(uint8_t buffer[2]) { 105 | pCharacteristic->setValue(buffer, 2); 106 | pCharacteristic->notify(); 107 | } 108 | 109 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/config.ino: -------------------------------------------------------------------------------- 1 | void setHandleBarWidth(int width) { 2 | handleBarWidth = width; 3 | timeout = 15000 + (int)(handleBarWidth * 29.1 * 2); 4 | EEPROM.write(0, handleBarWidth); 5 | EEPROM.commit(); 6 | } 7 | 8 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/displays.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include "SSD1306.h" 3 | #include "font.h" 4 | 5 | const int CLK = 33; //Set the CLK pin connection to the display 6 | const int DIO = 25; //Set the DIO pin connection to the display 7 | //Segments for line of dashes on display 8 | uint8_t segments[] = {64, 64, 64, 64}; 9 | 10 | /* 11 | 12 | 13 | */ 14 | 15 | class DisplayDevice 16 | { 17 | public: 18 | DisplayDevice() {} 19 | virtual ~DisplayDevice() {} 20 | virtual void showValue(uint8_t) = 0; 21 | 22 | protected: 23 | virtual void init() = 0; 24 | virtual void clear() = 0; 25 | virtual void setMaxBrightness() = 0; 26 | 27 | 28 | 29 | }; 30 | 31 | class TM1637DisplayDevice : public DisplayDevice 32 | { 33 | public: 34 | TM1637DisplayDevice() : DisplayDevice() { 35 | m_display = new TM1637Display(CLK, DIO); 36 | m_display->setBrightness(0x07); 37 | } 38 | ~TM1637DisplayDevice() { 39 | delete m_display; 40 | } 41 | void showValue(uint8_t value) 42 | { 43 | if (value == 255) 44 | { 45 | m_display->setSegments(segments); 46 | } 47 | else 48 | { 49 | m_display->showNumberDec(value); 50 | } 51 | } 52 | protected: 53 | void init() 54 | { 55 | m_display->setBrightness(0x07); 56 | } 57 | void clear() { 58 | 59 | } 60 | void setMaxBrightness() { 61 | 62 | } 63 | 64 | private: 65 | TM1637Display* m_display; 66 | 67 | }; 68 | 69 | class SSD1306DisplayDevice : public DisplayDevice 70 | { 71 | public: 72 | //SSD1306 displayOLED(0x3c, 21, 22); 73 | SSD1306DisplayDevice() : DisplayDevice() { 74 | m_display = new SSD1306(0x3c, 21, 22); 75 | m_display->init(); 76 | m_display->setBrightness(255); 77 | m_display->setFont(Dialog_plain_50); 78 | } 79 | ~SSD1306DisplayDevice() { 80 | delete m_display; 81 | } 82 | void showValue(uint8_t value) 83 | { 84 | m_display->clear(); 85 | if (value == 255) 86 | { 87 | m_display->drawString(0, 0, "---"); 88 | } 89 | else 90 | { 91 | m_display->drawString(0, 0, String(value)); 92 | } 93 | m_display->display(); 94 | } 95 | protected: 96 | void init() 97 | { 98 | m_display->init(); 99 | m_display->setBrightness(255); 100 | m_display->setFont(Dialog_plain_50); 101 | } 102 | void clear() { 103 | 104 | } 105 | void setMaxBrightness() { 106 | 107 | } 108 | private: 109 | SSD1306* m_display; 110 | uint8_t m_value; 111 | }; 112 | 113 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/gps.h: -------------------------------------------------------------------------------- 1 | #include // Library über http://arduiniana.org/libraries/tinygpsplus/ downloaden und installieren 2 | #include // sollte bereits mit Arduino IDE installiert sein 3 | 4 | //GPS 5 | TinyGPSPlus gps; 6 | HardwareSerial SerialGPS(1); 7 | struct GpsDataState_t { 8 | double originLat = 0; 9 | double originLon = 0; 10 | double originAlt = 0; 11 | double distMax = 0; 12 | double dist = 0; 13 | double altMax = -999999; 14 | double altMin = 999999; 15 | double spdMax = 0; 16 | double prevDist = 0; 17 | }; 18 | GpsDataState_t gpsState = {}; 19 | 20 | 21 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/gps.ino: -------------------------------------------------------------------------------- 1 | void readGPSData() { 2 | gpsState.distMax = 0; 3 | gpsState.altMax = -999999; 4 | gpsState.spdMax = 0; 5 | gpsState.altMin = 999999; 6 | 7 | while (SerialGPS.available() > 0) { 8 | gps.encode(SerialGPS.read()); 9 | } 10 | Serial.print(F("DIAGS Chars=")); 11 | Serial.print(gps.charsProcessed()); 12 | Serial.print(F(" Sentences-with-Fix=")); 13 | Serial.print(gps.sentencesWithFix()); 14 | Serial.print(F(" Failed-checksum=")); 15 | Serial.print(gps.failedChecksum()); 16 | Serial.print(F(" Passed-checksum=")); 17 | Serial.println(gps.passedChecksum()); 18 | 19 | if (gps.satellites.value() > 4) { 20 | gpsState.dist = TinyGPSPlus::distanceBetween(gps.location.lat(), gps.location.lng(), gpsState.originLat, gpsState.originLon); 21 | 22 | if (gpsState.dist > gpsState.distMax && abs(gpsState.prevDist - gpsState.dist) < 50) { 23 | gpsState.distMax = gpsState.dist; 24 | } 25 | gpsState.prevDist = gpsState.dist; 26 | 27 | if (gps.altitude.meters() > gpsState.altMax) { 28 | gpsState.altMax = gps.altitude.meters(); 29 | } 30 | 31 | if (gps.speed.kmph() > gpsState.spdMax) { 32 | gpsState.spdMax = gps.speed.kmph(); 33 | } 34 | 35 | if (gps.altitude.meters() < gpsState.altMin) { 36 | gpsState.altMin = gps.altitude.meters(); 37 | } 38 | } 39 | if (nextSerialTaskTs < millis()) { 40 | Serial.print("LAT="); Serial.println(gps.location.lat(), 6); 41 | Serial.print("LONG="); Serial.println(gps.location.lng(), 6); 42 | Serial.print("ALT="); Serial.println(gps.altitude.meters()); 43 | Serial.print("Sats="); Serial.println(gps.satellites.value()); 44 | Serial.print("DST: "); 45 | Serial.println(gpsState.dist, 1); 46 | nextSerialTaskTs = millis() + TASK_SERIAL_RATE; 47 | } 48 | 49 | } 50 | 51 | void writeLastFixToEEPROM() { 52 | // Aktuelle Position in nichtflüchtigen ESP32-Speicher schreiben 53 | long writeValue; 54 | writeValue = gpsState.originLat * 1000000; 55 | EEPROM_writeAnything(4, writeValue); 56 | writeValue = gpsState.originLon * 1000000; 57 | EEPROM_writeAnything(8, writeValue); 58 | writeValue = gpsState.originAlt * 1000000; 59 | EEPROM_writeAnything(12, writeValue); 60 | EEPROM.commit(); // erst mit commit() werden die Daten geschrieben 61 | } 62 | 63 | void readLastFixFromEEPROM() { 64 | /* 65 | Read last gps fix from EEPROM 66 | */ 67 | long readValue; 68 | EEPROM_readAnything(4, readValue); 69 | gpsState.originLat = (double)readValue / 1000000; 70 | 71 | EEPROM_readAnything(8, readValue); 72 | gpsState.originLon = (double)readValue / 1000000; 73 | 74 | EEPROM_readAnything(12, readValue); 75 | gpsState.originAlt = (double)readValue / 1000000; 76 | } 77 | 78 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/sd.ino: -------------------------------------------------------------------------------- 1 | void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ 2 | Serial.printf("Listing directory: %s\n", dirname); 3 | 4 | File root = fs.open(dirname); 5 | if(!root){ 6 | Serial.println("Failed to open directory"); 7 | return; 8 | } 9 | if(!root.isDirectory()){ 10 | Serial.println("Not a directory"); 11 | return; 12 | } 13 | 14 | File file = root.openNextFile(); 15 | while(file){ 16 | if(file.isDirectory()){ 17 | Serial.print(" DIR : "); 18 | Serial.println(file.name()); 19 | if(levels){ 20 | listDir(fs, file.name(), levels -1); 21 | } 22 | } else { 23 | Serial.print(" FILE: "); 24 | Serial.print(file.name()); 25 | Serial.print(" SIZE: "); 26 | Serial.println(file.size()); 27 | } 28 | file = root.openNextFile(); 29 | } 30 | } 31 | 32 | void createDir(fs::FS &fs, const char * path){ 33 | Serial.printf("Creating Dir: %s\n", path); 34 | if(fs.mkdir(path)){ 35 | Serial.println("Dir created"); 36 | } else { 37 | Serial.println("mkdir failed"); 38 | } 39 | } 40 | 41 | void removeDir(fs::FS &fs, const char * path){ 42 | Serial.printf("Removing Dir: %s\n", path); 43 | if(fs.rmdir(path)){ 44 | Serial.println("Dir removed"); 45 | } else { 46 | Serial.println("rmdir failed"); 47 | } 48 | } 49 | 50 | void readFile(fs::FS &fs, const char * path){ 51 | Serial.printf("Reading file: %s\n", path); 52 | 53 | File file = fs.open(path); 54 | if(!file){ 55 | Serial.println("Failed to open file for reading"); 56 | return; 57 | } 58 | 59 | Serial.print("Read from file: "); 60 | while(file.available()){ 61 | Serial.write(file.read()); 62 | } 63 | file.close(); 64 | } 65 | 66 | void writeFile(fs::FS &fs, const char * path, const char * message){ 67 | Serial.printf("Writing file: %s\n", path); 68 | 69 | File file = fs.open(path, FILE_WRITE); 70 | if(!file){ 71 | Serial.println("Failed to open file for writing"); 72 | return; 73 | } 74 | if(file.print(message)){ 75 | Serial.println("File written"); 76 | } else { 77 | Serial.println("Write failed"); 78 | } 79 | file.close(); 80 | } 81 | 82 | void appendFile(fs::FS &fs, const char * path, const char * message){ 83 | Serial.printf("Appending to file: %s\n", path); 84 | 85 | File file = fs.open(path, FILE_APPEND); 86 | if(!file){ 87 | Serial.println("Failed to open file for appending"); 88 | return; 89 | } 90 | if(file.print(message)){ 91 | Serial.println("Message appended"); 92 | } else { 93 | Serial.println("Append failed"); 94 | } 95 | file.close(); 96 | } 97 | 98 | void renameFile(fs::FS &fs, const char * path1, const char * path2){ 99 | Serial.printf("Renaming file %s to %s\n", path1, path2); 100 | if (fs.rename(path1, path2)) { 101 | Serial.println("File renamed"); 102 | } else { 103 | Serial.println("Rename failed"); 104 | } 105 | } 106 | 107 | void deleteFile(fs::FS &fs, const char * path){ 108 | Serial.printf("Deleting file: %s\n", path); 109 | if(fs.remove(path)){ 110 | Serial.println("File deleted"); 111 | } else { 112 | Serial.println("Delete failed"); 113 | } 114 | } 115 | 116 | void testFileIO(fs::FS &fs, const char * path){ 117 | File file = fs.open(path); 118 | static uint8_t buf[512]; 119 | size_t len = 0; 120 | uint32_t start = millis(); 121 | uint32_t end = start; 122 | if(file){ 123 | len = file.size(); 124 | size_t flen = len; 125 | start = millis(); 126 | while(len){ 127 | size_t toRead = len; 128 | if(toRead > 512){ 129 | toRead = 512; 130 | } 131 | file.read(buf, toRead); 132 | len -= toRead; 133 | } 134 | end = millis() - start; 135 | Serial.printf("%u bytes read for %u ms\n", flen, end); 136 | file.close(); 137 | } else { 138 | Serial.println("Failed to open file for reading"); 139 | } 140 | 141 | 142 | file = fs.open(path, FILE_WRITE); 143 | if(!file){ 144 | Serial.println("Failed to open file for writing"); 145 | return; 146 | } 147 | 148 | size_t i; 149 | start = millis(); 150 | for(i=0; i<2048; i++){ 151 | file.write(buf, 512); 152 | } 153 | end = millis() - start; 154 | Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end); 155 | file.close(); 156 | } 157 | 158 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/sensor.h: -------------------------------------------------------------------------------- 1 | class Sensor 2 | { 3 | public: 4 | Sensor() {} 5 | virtual ~Sensor() {} 6 | virtual void init() = 0; 7 | 8 | protected: 9 | 10 | private: 11 | }; 12 | 13 | class DistanceSensor : public Sensor 14 | { 15 | public: 16 | DistanceSensor() : Sensor() { 17 | } 18 | ~DistanceSensor() {} 19 | virtual void init() 20 | { 21 | 22 | } 23 | void getMinDistance(uint8_t& min_distance); 24 | virtual float getDistance() = 0; 25 | void setOffset(uint8_t offset) { 26 | m_offset = offset; 27 | } 28 | protected: 29 | uint8_t m_offset = 0; 30 | private: 31 | unsigned long m_measureInterval = 1000; 32 | 33 | }; 34 | 35 | class HCSR04DistanceSensor : public DistanceSensor 36 | { 37 | public: 38 | HCSR04DistanceSensor() : DistanceSensor() { 39 | pinMode(m_triggerPin, OUTPUT); 40 | pinMode(m_echoPin, INPUT); 41 | digitalWrite(m_triggerPin, HIGH); 42 | } 43 | ~HCSR04DistanceSensor() {} 44 | void init() { 45 | } 46 | float getDistance(); 47 | void setOffset(uint8_t offset) { 48 | m_offset = offset; 49 | m_timeout = 15000 + (int)(m_offset * 29.1 * 2); 50 | } 51 | protected: 52 | private: 53 | int m_triggerPin = 15; 54 | int m_echoPin = 4; 55 | int m_timeout = 15000; 56 | }; 57 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/sensor.ino: -------------------------------------------------------------------------------- 1 | void DistanceSensor::getMinDistance(uint8_t& min_distance) { 2 | float dist; 3 | dist = getDistance() - float(m_offset); 4 | if ((dist > 0.0) && (dist < float(min_distance))) 5 | { 6 | min_distance = uint8_t(dist); 7 | } 8 | else 9 | { 10 | dist = 0.0; 11 | } 12 | if (usingSD) 13 | { 14 | //text += String(dist); 15 | //text += ";"; 16 | } 17 | delay(20); 18 | } 19 | 20 | float HCSR04DistanceSensor::getDistance() { 21 | float duration = 0; 22 | float distance = 0; 23 | 24 | digitalWrite(m_triggerPin, LOW); 25 | delayMicroseconds(2); 26 | noInterrupts(); 27 | digitalWrite(m_triggerPin, HIGH); 28 | delayMicroseconds(10); 29 | digitalWrite(m_triggerPin, LOW); 30 | duration = pulseIn(m_echoPin, HIGH, m_timeout); // Erfassung - Dauer in Mikrosekunden 31 | interrupts(); 32 | 33 | distance = (duration / 2) / 29.1; // Distanz in CM 34 | return (distance); 35 | } 36 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/vector.h: -------------------------------------------------------------------------------- 1 | 2 | // Minimal class to replace std::vector 3 | template 4 | class Vector { 5 | size_t d_size; // Stores no. of actually stored objects 6 | size_t d_capacity; // Stores allocated capacity 7 | Data *d_data; // Stores data 8 | public: 9 | Vector() : d_size(0), d_capacity(0), d_data(0) {}; // Default constructor 10 | Vector(Vector const &other) : d_size(other.d_size), d_capacity(other.d_capacity), d_data(0) { d_data = (Data *)malloc(d_capacity*sizeof(Data)); memcpy(d_data, other.d_data, d_size*sizeof(Data)); }; // Copy constuctor 11 | ~Vector() { free(d_data); }; // Destructor 12 | Vector &operator=(Vector const &other) { free(d_data); d_size = other.d_size; d_capacity = other.d_capacity; d_data = (Data *)malloc(d_capacity*sizeof(Data)); memcpy(d_data, other.d_data, d_size*sizeof(Data)); return *this; }; // Needed for memory management 13 | void push_back(Data const &x) { if (d_capacity == d_size) resize(); d_data[d_size++] = x; }; // Adds new value. If needed, allocates more space 14 | size_t size() const { return d_size; }; // Size getter 15 | Data const &operator[](size_t idx) const { return d_data[idx]; }; // Const getter 16 | Data &operator[](size_t idx) { return d_data[idx]; }; // Changeable getter 17 | private: 18 | void resize() { d_capacity = d_capacity ? d_capacity*2 : 1; Data *newdata = (Data *)malloc(d_capacity*sizeof(Data)); memcpy(newdata, d_data, d_size * sizeof(Data)); free(d_data); d_data = newdata; };// Allocates double the old space 19 | }; 20 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/writer.h: -------------------------------------------------------------------------------- 1 | struct DataSet { 2 | TinyGPSLocation location; 3 | TinyGPSAltitude altitude; 4 | TinyGPSDate date; 5 | TinyGPSTime time; 6 | Vector sensorValues; 7 | }; 8 | 9 | 10 | class FileWriter 11 | { 12 | public: 13 | FileWriter() {} 14 | virtual ~FileWriter() {} 15 | void listDir(fs::FS &fs, const char * dirname, uint8_t levels); 16 | void createDir(fs::FS &fs, const char * path); 17 | void removeDir(fs::FS &fs, const char * path); 18 | void readFile(fs::FS &fs, const char * path); 19 | void writeFile(fs::FS &fs, const char * path, const char * message); 20 | void appendFile(fs::FS &fs, const char * path, const char * message); 21 | void renameFile(fs::FS &fs, const char * path1, const char * path2); 22 | void deleteFile(fs::FS &fs, const char * path); 23 | void setFileName(); 24 | virtual void init() = 0; 25 | virtual void writeHeader() = 0; 26 | virtual void writeData(DataSet*) = 0; 27 | 28 | protected: 29 | String m_fileExtension; 30 | String m_filename; 31 | 32 | private: 33 | 34 | }; 35 | 36 | class CSVFileWriter : public FileWriter 37 | { 38 | public: 39 | CSVFileWriter() : FileWriter() { 40 | m_fileExtension = ".csv"; 41 | } 42 | ~CSVFileWriter() {} 43 | void init() 44 | { 45 | } 46 | void writeHeader(); 47 | void writeData(DataSet*); 48 | protected: 49 | }; 50 | 51 | class GPXFileWriter : public FileWriter 52 | { 53 | public: 54 | GPXFileWriter() : FileWriter() { 55 | m_fileExtension = ".gpx"; 56 | } 57 | ~GPXFileWriter() {} 58 | void writeHeader(); 59 | void writeData(DataSet*); 60 | protected: 61 | private: 62 | }; 63 | -------------------------------------------------------------------------------- /BLE_DISTANCE_SENSOR_V2/writer.ino: -------------------------------------------------------------------------------- 1 | void FileWriter::listDir(fs::FS &fs, const char * dirname, uint8_t levels) { 2 | Serial.printf("Listing directory: %s\n", dirname); 3 | 4 | File root = fs.open(dirname); 5 | if (!root) { 6 | Serial.println("Failed to open directory"); 7 | return; 8 | } 9 | if (!root.isDirectory()) { 10 | Serial.println("Not a directory"); 11 | return; 12 | } 13 | 14 | File file = root.openNextFile(); 15 | while (file) { 16 | if (file.isDirectory()) { 17 | Serial.print(" DIR : "); 18 | Serial.println(file.name()); 19 | if (levels) { 20 | listDir(fs, file.name(), levels - 1); 21 | } 22 | } else { 23 | Serial.print(" FILE: "); 24 | Serial.print(file.name()); 25 | Serial.print(" SIZE: "); 26 | Serial.println(file.size()); 27 | } 28 | file = root.openNextFile(); 29 | } 30 | } 31 | 32 | void FileWriter::createDir(fs::FS &fs, const char * path) { 33 | Serial.printf("Creating Dir: %s\n", path); 34 | if (fs.mkdir(path)) { 35 | Serial.println("Dir created"); 36 | } else { 37 | Serial.println("mkdir failed"); 38 | } 39 | } 40 | 41 | void FileWriter::removeDir(fs::FS &fs, const char * path) { 42 | Serial.printf("Removing Dir: %s\n", path); 43 | if (fs.rmdir(path)) { 44 | Serial.println("Dir removed"); 45 | } else { 46 | Serial.println("rmdir failed"); 47 | } 48 | } 49 | 50 | void FileWriter::readFile(fs::FS &fs, const char * path) { 51 | Serial.printf("Reading file: %s\n", path); 52 | 53 | File file = fs.open(path); 54 | if (!file) { 55 | Serial.println("Failed to open file for reading"); 56 | return; 57 | } 58 | 59 | Serial.print("Read from file: "); 60 | while (file.available()) { 61 | Serial.write(file.read()); 62 | } 63 | file.close(); 64 | } 65 | 66 | void FileWriter::writeFile(fs::FS &fs, const char * path, const char * message) { 67 | Serial.printf("Writing file: %s\n", path); 68 | 69 | File file = fs.open(path, FILE_WRITE); 70 | if (!file) { 71 | Serial.println("Failed to open file for writing"); 72 | return; 73 | } 74 | if (file.print(message)) { 75 | Serial.println("File written"); 76 | } else { 77 | Serial.println("Write failed"); 78 | } 79 | file.close(); 80 | } 81 | 82 | void FileWriter::appendFile(fs::FS &fs, const char * path, const char * message) { 83 | Serial.printf("Appending to file: %s\n", path); 84 | 85 | File file = fs.open(path, FILE_APPEND); 86 | if (!file) { 87 | Serial.println("Failed to open file for appending"); 88 | return; 89 | } 90 | if (file.print(message)) { 91 | Serial.println("Message appended"); 92 | } else { 93 | Serial.println("Append failed"); 94 | } 95 | file.close(); 96 | } 97 | 98 | void FileWriter::renameFile(fs::FS &fs, const char * path1, const char * path2) { 99 | Serial.printf("Renaming file %s to %s\n", path1, path2); 100 | if (fs.rename(path1, path2)) { 101 | Serial.println("File renamed"); 102 | } else { 103 | Serial.println("Rename failed"); 104 | } 105 | } 106 | 107 | void FileWriter::deleteFile(fs::FS &fs, const char * path) { 108 | Serial.printf("Deleting file: %s\n", path); 109 | if (fs.remove(path)) { 110 | Serial.println("File deleted"); 111 | } else { 112 | Serial.println("Delete failed"); 113 | } 114 | } 115 | 116 | void FileWriter::setFileName() { 117 | int fileSuffix = 0; 118 | String base_filename = "/sensorData"; 119 | m_filename = base_filename + String(fileSuffix) + m_fileExtension; 120 | while (SD.exists(m_filename.c_str())) 121 | { 122 | fileSuffix++; 123 | m_filename = base_filename + String(fileSuffix) + m_fileExtension; 124 | } 125 | } 126 | 127 | void CSVFileWriter::writeHeader() { 128 | String headerString; 129 | headerString += "Date;Time;Latitude;Longitude"; 130 | for (size_t idx = 0; idx < sensorNames.size(); ++idx) 131 | { 132 | headerString += ";" + sensorNames[idx]; 133 | } 134 | this->appendFile(SD, m_filename.c_str(), headerString.c_str() ); 135 | } 136 | 137 | void CSVFileWriter::writeData(DataSet* set) { 138 | String dataString=""; 139 | 140 | char dateString[12]; 141 | sprintf(dateString, "%02d.%02d.%04d;", set->date.day(), set->date.month(), set->date.year()); 142 | dataString += dateString; 143 | 144 | char timeString[9]; 145 | sprintf(timeString, "%02d:%02d:%02d;", set->time.hour(), set->time.minute(), set->time.second()); 146 | dataString += timeString; 147 | 148 | String latitudeString = String(set->location.lat(), 6); 149 | dataString += latitudeString + ";"; 150 | 151 | String longitudeString = String(set->location.lng(), 6); 152 | dataString += longitudeString; 153 | 154 | for (size_t idx = 0; idx < set->sensorValues.size(); ++idx) 155 | { 156 | dataString += ";" + String(set->sensorValues[idx]); 157 | } 158 | dataString += "\n"; 159 | 160 | this->appendFile(SD, m_filename.c_str(), dataString.c_str() ); 161 | } 162 | 163 | void GPXFileWriter::writeHeader() { 164 | String headerString; 165 | headerString += F( 166 | "\n" 167 | "\n" 168 | "\t\n"); 169 | this->appendFile(SD, m_filename.c_str(), headerString.c_str() ); 170 | } 171 | 172 | void GPXFileWriter::writeData(DataSet* set) { 173 | String dataString; 174 | 175 | dataString += "\t\tlocation.lat(), 6); 178 | dataString += latitudeString; 179 | dataString += "\" lon=\""; 180 | String longitudeString = String(set->location.lng(), 6); 181 | dataString += longitudeString; 182 | dataString += "\">"; 183 | 184 | char dateTimeString[9]; 185 | sprintf( 186 | dateTimeString, 187 | "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ", 188 | set->date.year(), 189 | set->date.month(), 190 | set->date.day(), 191 | set->time.hour(), 192 | set->time.minute(), 193 | set->time.second(), 194 | set->time.centisecond()); 195 | dataString += F(""); 198 | 199 | dataString += F(""); 200 | dataString += String(set->altitude.meters(), 2); 201 | dataString += F(""); 202 | 203 | dataString += F("\n"); 204 | 205 | this->appendFile(SD, m_filename.c_str(), dataString.c_str() ); 206 | } 207 | -------------------------------------------------------------------------------- /Case/Battery.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/Battery.SLDPRT -------------------------------------------------------------------------------- /Case/TO-001.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/TO-001.SLDPRT -------------------------------------------------------------------------------- /Case/TO-001_v5.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/TO-001_v5.STL -------------------------------------------------------------------------------- /Case/TO-002_v5.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/TO-002_v5.STL -------------------------------------------------------------------------------- /Case/TO-003.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/TO-003.SLDPRT -------------------------------------------------------------------------------- /Case/TO-003_v5.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/TO-003_v5.STL -------------------------------------------------------------------------------- /Case/TO-003_v6.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/TO-003_v6.stl -------------------------------------------------------------------------------- /Case/TO-004.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/TO-004.SLDPRT -------------------------------------------------------------------------------- /Case/TO-004_v5.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/TO-004_v5.STL -------------------------------------------------------------------------------- /Case/TO-999.SLDASM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/TO-999.SLDASM -------------------------------------------------------------------------------- /Case/TP5000_placeholder.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/TP5000_placeholder.SLDPRT -------------------------------------------------------------------------------- /Case/To-002.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Case/To-002.SLDPRT -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. 166 | -------------------------------------------------------------------------------- /Pictures/radmesserS-Fritzing_ProtectionBoard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/Pictures/radmesserS-Fritzing_ProtectionBoard.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ESP32 BLE Distance Measurements 2 | 3 | Distance Measurement HC-SR04 sensors connected to ESP32 pretending to be heart rate sensor for logging with fitness apps. 4 | 5 | ## Description 6 | 7 | Inspired by the Berlin project Radmesser, this version connects to tracking apps by pretending to be a heart rate sensor. This enables you to write the distance to a gpx file and use it later in video editing software like [Dashware](http://www.dashware.net/) or [Garmin Virb Edit](https://buy.garmin.com/de-DE/DE/p/573412) to show the distance in your video. 8 | 9 | More information can be found in the project wiki, [see here](https://github.com/tobst/radmesserS/wiki). 10 | 11 | ## Getting Started 12 | 13 | ### Hardware 14 | 15 | ![](https://github.com/tobst/radmesserS/blob/master/images/device/device_case_1_800x800.jpg) 16 | 17 | ![](https://github.com/tobst/radmesserS/blob/master/images/mounting_1_800x800.jpg) 18 | 19 | The prototype by [Zweirat](https://zweirat-stuttgart.de/projekte/radmesser/) used the following: 20 | * [ESP32](https://www.az-delivery.de/products/esp32-developmentboard) 21 | * [LiFePo-Battery](https://www.akkuteile.de/lifepo-akkus/18650/a123-apr18650m-a1-1100mah-3-2v-3-3v-lifepo4-akku/a-1006861/) 22 | * [Battery-Protection-Board](https://www.ebay.de/itm/202033076322) 23 | * [LiFePo charging module](https://www.ebay.de/itm/MicroUSB-TP5000-3-6v-1A-Charger-Module-3-2v-LiFePO4-Lithium-Battery-Charging-/122164745507) 24 | * [HC-SR04P](https://www.ebay.de/itm/183610614563) 25 | 26 | With LiFePo Batteries you can power the device directly and avoid step-up/step-down losses that you have when using a powerbank. On the other hand you need the HC-SR04P instead of the HC-SR04 sensor if you don't have 5V power supply. 27 | 28 | ### Dependencies 29 | 30 | * ESP32 device driver 31 | * Neil Kolbans ESP32 BLE Library 32 | * Arduino IDE 33 | * [TM1637 Library](https://github.com/avishorp/TM1637) - installed through Arduino library manager 34 | * [SSD1306 Library](https://github.com/adafruit/Adafruit_SSD1306) - installed through Arduino library manager 35 | * [TinyGPSPlus Library](https://github.com/mikalhart/TinyGPSPlus) 36 | 37 | ### Installing 38 | 39 | * clone or download repository 40 | * open in Arduino IDE 41 | * compile and upload to ESP32 42 | * Connect sensor 43 | 44 | ### Executing program 45 | * power up device 46 | * Use [BLE Scanner](https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner) or your favorite BLE app to send ond permanently save offset (for example the distance from sensor to handlebar) 47 | * Start your favourite tracking app 48 | Good results were made with [RunnerUp](https://play.google.com/store/apps/details?id=org.runnerup&hl=de), Strava had some issues on Android, look here for [alternatives](https://play.google.com/store/apps/details?id=org.runnerup&hl=de), no experience with iOS so far. 49 | * Connect heart rate sensor 50 | 51 | ### ToDo 52 | * Write nice tutorial how to process video data and create synchronized overlays 53 | * Develop an own app to record videos in loop mode and only save short clips when distance is low. At the end of the ride, ask user to confirm that a car was overtaking. Possibility to create overlays for video and report anonymous metadata of overtaking incidents (good and bad ones) to open data platform. 54 | 55 | ## Acknowledgments 56 | 57 | Inspiration, code snippets, etc. 58 | * [Neil Kolbans ESP32 BLE Library](https://github.com/nkolban/ESP32_BLE_Arduino) 59 | * [Wiring up the Sensor](https://www.smarthomeng.de/entfernungsmessung-auf-basis-eines-esp32-und-smarthomeng) 60 | -------------------------------------------------------------------------------- /images/device/TP5000-Charger-and-LiFePo-Protection-Board.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/TP5000-Charger-and-LiFePo-Protection-Board.jpg -------------------------------------------------------------------------------- /images/device/TP5000-Charger-and-LiFePo-Protection-Board_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/TP5000-Charger-and-LiFePo-Protection-Board_800x800.jpg -------------------------------------------------------------------------------- /images/device/device_case_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/device_case_1.jpg -------------------------------------------------------------------------------- /images/device/device_case_1_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/device_case_1_800x800.jpg -------------------------------------------------------------------------------- /images/device/device_case_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/device_case_2.jpg -------------------------------------------------------------------------------- /images/device/device_case_2_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/device_case_2_800x800.jpg -------------------------------------------------------------------------------- /images/device/device_case_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/device_case_3.jpg -------------------------------------------------------------------------------- /images/device/device_case_3_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/device_case_3_800x800.jpg -------------------------------------------------------------------------------- /images/device/device_case_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/device_case_4.jpg -------------------------------------------------------------------------------- /images/device/device_case_4_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/device_case_4_800x800.jpg -------------------------------------------------------------------------------- /images/device/device_internals.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/device_internals.jpg -------------------------------------------------------------------------------- /images/device/device_internals_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/device_internals_800x800.jpg -------------------------------------------------------------------------------- /images/device/radmessers-fritzing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/device/radmessers-fritzing.png -------------------------------------------------------------------------------- /images/mounting_0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/mounting_0.jpg -------------------------------------------------------------------------------- /images/mounting_0_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/mounting_0_800x800.jpg -------------------------------------------------------------------------------- /images/mounting_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/mounting_1.jpg -------------------------------------------------------------------------------- /images/mounting_1_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/mounting_1_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/blescanner/ble_scanner_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/blescanner/ble_scanner_1.jpg -------------------------------------------------------------------------------- /images/screenshots/blescanner/ble_scanner_1_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/blescanner/ble_scanner_1_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/blescanner/ble_scanner_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/blescanner/ble_scanner_2.jpg -------------------------------------------------------------------------------- /images/screenshots/blescanner/ble_scanner_2_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/blescanner/ble_scanner_2_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/blescanner/ble_scanner_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/blescanner/ble_scanner_3.jpg -------------------------------------------------------------------------------- /images/screenshots/blescanner/ble_scanner_3_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/blescanner/ble_scanner_3_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/blescanner/ble_scanner_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/blescanner/ble_scanner_4.jpg -------------------------------------------------------------------------------- /images/screenshots/blescanner/ble_scanner_4_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/blescanner/ble_scanner_4_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/blescanner/ble_scanner_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/blescanner/ble_scanner_5.jpg -------------------------------------------------------------------------------- /images/screenshots/blescanner/ble_scanner_5_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/blescanner/ble_scanner_5_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/export/runnerup_export_to_directory_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/export/runnerup_export_to_directory_1.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/export/runnerup_export_to_directory_1_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/export/runnerup_export_to_directory_1_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/export/runnerup_export_to_directory_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/export/runnerup_export_to_directory_2.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/export/runnerup_export_to_directory_2_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/export/runnerup_export_to_directory_2_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/export/runnerup_export_to_directory_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/export/runnerup_export_to_directory_3.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/export/runnerup_export_to_directory_3_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/export/runnerup_export_to_directory_3_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/export/runnerup_export_to_directory_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/export/runnerup_export_to_directory_4.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/export/runnerup_export_to_directory_4_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/export/runnerup_export_to_directory_4_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_1.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_10.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_10_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_10_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_1_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_1_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_2.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_2_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_2_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_3.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_3_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_3_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_4.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_4_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_4_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_5.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_5_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_5_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_6.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_6_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_6_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_7.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_7_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_7_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_8.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_8_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_8_800x800.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_9.jpg -------------------------------------------------------------------------------- /images/screenshots/runnerup/runnerup_9_800x800.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/images/screenshots/runnerup/runnerup_9_800x800.jpg -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_--.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_--.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_001.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_002.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_003.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_004.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_005.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_006.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_007.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_008.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_009.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_010.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_011.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_012.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_013.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_014.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_015.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_016.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_017.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_018.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_019.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_020.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_021.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_022.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_023.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_024.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_025.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_026.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_027.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_028.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_029.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_030.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_031.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_032.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_033.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_034.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_035.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_036.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_037.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_038.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_039.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_040.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_041.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_042.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_043.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_044.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_045.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_046.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_047.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_048.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_049.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_050.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_051.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_052.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_053.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_054.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_055.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_056.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_057.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_058.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_059.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_060.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_061.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_062.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_063.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_064.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_065.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_066.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_067.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_068.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_068.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_069.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_069.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_070.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_071.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_072.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_072.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_073.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_074.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_075.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_075.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_076.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_076.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_077.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_077.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_078.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_078.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_079.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_079.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_080.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_081.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_081.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_082.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_082.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_083.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_083.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_084.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_084.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_085.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_085.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_086.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_086.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_087.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_087.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_088.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_088.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_089.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_089.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_090.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_091.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_091.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_092.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_092.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_093.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_093.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_094.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_094.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_095.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_095.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_096.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_096.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_097.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_097.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_098.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_098.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_099.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_099.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_100.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_101.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_102.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_103.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_104.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_105.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_106.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_107.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_108.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_109.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_110.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_111.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_112.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_113.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_114.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_115.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_116.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_117.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_118.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_119.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_120.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_121.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_122.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_123.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_124.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_125.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_126.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_127.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_128.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_129.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_130.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_131.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_132.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_133.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_134.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_135.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_136.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_137.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_138.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_139.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_140.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_141.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_142.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_143.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_144.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_145.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_146.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_147.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_148.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_149.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_149.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_150.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_151.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_151.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_152.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_153.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_153.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_154.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_154.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_155.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_155.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_156.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_156.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_157.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_157.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_158.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_158.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_159.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_159.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_160.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_161.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_161.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_162.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_162.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_163.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_163.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_164.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_164.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_165.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_165.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_166.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_166.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_167.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_168.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_168.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_169.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_169.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_170.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_171.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_171.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_172.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_173.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_173.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_174.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_174.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_175.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_175.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_176.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_176.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_177.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_177.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_178.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_178.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_179.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_179.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_180.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_181.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_181.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_182.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_182.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_183.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_183.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_184.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_184.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_185.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_185.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_186.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_186.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_187.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_187.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_188.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_188.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_189.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_189.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_190.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_191.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_191.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_192.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_193.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_193.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_194.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_194.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_195.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_195.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_196.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_197.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_197.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_198.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_198.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_199.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_199.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_200.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_201.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_201.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_202.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_202.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_203.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_203.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_204.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_204.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_205.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_205.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_206.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_206.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_207.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_207.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_208.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_208.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_209.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_209.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_210.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_211.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_211.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_212.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_212.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_213.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_213.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_214.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_214.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_215.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_215.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_216.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_217.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_217.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_218.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_218.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_219.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_219.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_220.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_221.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_221.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_222.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_222.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_223.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_223.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_224.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_224.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_225.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_225.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_226.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_226.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_227.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_227.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_228.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_228.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_229.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_229.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_230.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_231.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_231.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_232.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_232.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_233.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_233.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_234.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_234.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_235.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_235.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_236.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_236.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_237.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_237.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_238.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_238.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_239.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_239.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_240.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_241.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_241.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_242.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_242.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_243.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_243.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_244.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_244.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_245.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_245.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_246.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_246.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_247.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_247.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_248.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_248.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_249.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_249.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_250.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_251.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_251.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_252.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_252.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_253.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_253.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_254.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_254.png -------------------------------------------------------------------------------- /png_overlays_byVIRB/distance_255.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobst/radmesserS/ce72d2393b2a279b86fea2cfced402a295460c42/png_overlays_byVIRB/distance_255.png --------------------------------------------------------------------------------