├── .gitattributes ├── .gitignore ├── .travis.yml ├── ESP32LapTimer ├── .gitignore ├── ESP32LapTimer.ino ├── data │ ├── GetStaticVars.js │ ├── RFsymbol.svg │ ├── UpdateStatusVars.js │ ├── assets │ │ └── css │ │ │ ├── images │ │ │ ├── overlay1.png │ │ │ ├── overlay2.png │ │ │ ├── overlay3.svg │ │ │ └── overlay4.svg │ │ │ ├── main.css │ │ │ └── slider.css │ ├── err.html │ ├── flag.svg │ ├── index.html │ ├── index_.html │ ├── jquery-3.3.1.min.js │ ├── menu.html │ ├── redirect.html │ └── updateIndexVals.js ├── platformio.ini └── src │ ├── ADC.cpp │ ├── ADC.h │ ├── Beeper.cpp │ ├── Beeper.h │ ├── Bluetooth.cpp │ ├── Bluetooth.h │ ├── Buttons.cpp │ ├── Buttons.h │ ├── Calibration.cpp │ ├── Calibration.h │ ├── Comms.cpp │ ├── Comms.h │ ├── CrashDetection.cpp │ ├── CrashDetection.h │ ├── ESP32LapTimer.cpp │ ├── Filter.h │ ├── Font.h │ ├── HardwareConfig.cpp │ ├── HardwareConfig.h │ ├── Laptime.cpp │ ├── Laptime.h │ ├── OLED.cpp │ ├── OLED.h │ ├── Output.cpp │ ├── Output.h │ ├── RX5808.cpp │ ├── RX5808.h │ ├── Screensaver.h │ ├── Serial.cpp │ ├── Serial.h │ ├── TCP.cpp │ ├── TCP.h │ ├── Timer.cpp │ ├── Timer.h │ ├── TimerWebServer.cpp │ ├── TimerWebServer.h │ ├── UDP.cpp │ ├── UDP.h │ ├── Utils.cpp │ ├── Utils.h │ ├── Watchdog.c │ ├── Watchdog.h │ ├── Wireless.cpp │ ├── Wireless.h │ ├── crc.c │ ├── crc.h │ ├── settings_eeprom.cpp │ ├── settings_eeprom.h │ └── targets │ ├── config_default.h │ ├── config_old.h │ ├── config_ttgo_lora_v1.h │ ├── config_wroom.h │ └── target.h ├── LICENSE ├── README.md ├── _config.yml ├── bin └── ESP32LapTimer.ino.esp32.bin ├── data ├── laptimer comparison.pdf └── laptimer comparison.xlsx ├── gather_releases.sh ├── img ├── Comparison1.png ├── Comparison2.png ├── HardwareImage2.png ├── PCBv1.jpg ├── hardwareImage1.png ├── schematic2.png ├── vcommport.png └── wiring.png └── pcb ├── JyeSmith ├── PCBV2.1 │ ├── Gerber-2.1.zip │ ├── PCB-2.1 - Patch Wire.png │ ├── PCB-2.1.png │ └── Schematic-V2.1.png └── PCBV2.2 │ ├── Gerber-2.2.zip │ ├── PCB-2.2.png │ └── Schematic-V2.2.png └── smeat └── esp32-wroom-timer-v1 ├── .gitignore ├── README.md ├── cern_ohl_v_1_2.txt ├── esp32-wroom-timer-cache.lib ├── esp32-wroom-timer.kicad_pcb ├── esp32-wroom-timer.pdf ├── esp32-wroom-timer.pro ├── esp32-wroom-timer.sch └── img ├── esp32-wroom-timer_bottom.png ├── esp32-wroom-timer_top.png ├── pic_1.jpg └── pic_2.jpg /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | 3 | sudo: false 4 | cache: 5 | directories: 6 | - "~/.platformio" 7 | install: 8 | - pip install -U platformio 9 | - pio update 10 | script: 11 | - pushd ESP32LapTimer && pio run && pio run -t buildfs && popd 12 | before_deploy: 13 | - ./gather_releases.sh ./ESP32LapTimer/.pio/build /tmp/esp32timer_firmware firmware.bin 14 | - ./gather_releases.sh ./ESP32LapTimer/.pio/build /tmp/esp32timer_firmware spiffs.bin 15 | deploy: 16 | provider: releases 17 | file_glob: true 18 | api_key: $GH_TOKEN 19 | file: /tmp/esp32timer_firmware/* 20 | skip_cleanup: true 21 | on: 22 | tags: true 23 | -------------------------------------------------------------------------------- /ESP32LapTimer/.gitignore: -------------------------------------------------------------------------------- 1 | .pio 2 | .vscode 3 | -------------------------------------------------------------------------------- /ESP32LapTimer/ESP32LapTimer.ino: -------------------------------------------------------------------------------- 1 | /* 2 | We moved our build system to platformio. Take a look at the readme to see on how to use the new system. 3 | 4 | You are still able to use the Arduino IDE as you used to, but you won't be able to see the any other files. If you want to change the configuration you need to use an external editor. 5 | */ 6 | -------------------------------------------------------------------------------- /ESP32LapTimer/data/GetStaticVars.js: -------------------------------------------------------------------------------- 1 | requestData(); // get intial data straight away 2 | var StatusData; 3 | function requestData() { 4 | 5 | var xhr = new XMLHttpRequest(); 6 | xhr.open('GET', 'StaticVars'); 7 | 8 | xhr.onload = function() { 9 | if (xhr.status === 200) { 10 | if (xhr.responseText) { // if the returned data is not null, update the values 11 | StatusData = JSON.parse(JSON.stringify(xhr.responseText)); 12 | var data = JSON.parse(StatusData); //yeah not sure why I need to do this twice, but otherwise it doesn't work.... 13 | document.getElementById("NumRXs").selectedIndex = parseInt(data.NumRXs); 14 | document.getElementById("ADCVBATmode").selectedIndex = parseInt(data.ADCVBATmode); 15 | document.getElementById("RXFilter").selectedIndex = parseInt(data.RXFilter); 16 | document.getElementById('ADCcalibValue').value = parseFloat(data.ADCcalibValue); 17 | document.getElementById('RSSIthreshold').value = updateRSSIThreshold(parseInt(data.RSSIthreshold)) 18 | document.getElementById('WiFiProtocol').value = parseInt(data.WiFiProtocol); 19 | document.getElementById('WiFiChannel').value = parseInt(data.WiFiChannel); 20 | document.getElementById('displayTimeout').value = Math.floor(parseInt(data.displayTimeout) / 1000); 21 | 22 | createBandChannel(data.NumRXs) 23 | updateBandChannel(data) 24 | } 25 | }else{requestData() } 26 | }; 27 | 28 | xhr.send(); 29 | } 30 | function updateRSSIThreshold(rssi){ 31 | var result = rssi / 12; 32 | return Math.floor(result) 33 | } 34 | function createBandChannel(numRXs) { 35 | numRXs = numRXs +1; 36 | for(var i=1;i<=numRXs;i++){ // GENERATE HTML 37 | $("#bandChannel").append('