diff options
-rw-r--r-- | unologger/README.txt | 11 | ||||
-rw-r--r-- | unologger/config.h | 42 | ||||
-rw-r--r-- | unologger/datalogger.h | 201 | ||||
-rw-r--r-- | unologger/unologger.cbp | 598 | ||||
-rw-r--r-- | unologger/unologger.ino | 455 |
5 files changed, 0 insertions, 1307 deletions
diff --git a/unologger/README.txt b/unologger/README.txt deleted file mode 100644 index 217971f..0000000 --- a/unologger/README.txt +++ /dev/null @@ -1,11 +0,0 @@ -This is the source code for the Arduino OBD-II data logger, which displays (on a 128x64 OLED display module) and records (to a SD card) a selected set of OBD-II data. For hardware configuration and wiring guide, please refer to: -http://obd.arduinodev.com - -The recorded data is stored in CSV format and the file can be illustrated into a graphic chart by a free service at: -http://freematics.com/chart/ - -To compile the code with Arduino IDE, please copy all library files from the libraries directory to Arduino's libraries directory. - -To open the project file (obdlogger.cbp), please download CodeBlocks Arduino Edition (http://arduinodev.com/codeblocks). - -The source code is distributed under GPL license. diff --git a/unologger/config.h b/unologger/config.h deleted file mode 100644 index 76b4dbe..0000000 --- a/unologger/config.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef CONFIG_H_INCLUDED -#define CONFIG_H_INCLUDED - -/************************************** -* Choose model of OBD-II Adapter -**************************************/ -// OBD_MODEL_I2C for I2C version -// OBD_MODEL_UART for UART version -#define OBD_MODEL OBD_MODEL_UART -#define OBD_PROTOCOL PROTO_AUTO - -/************************************** -* Data logging options -**************************************/ -// enable(1)/disable(0) data logging (if SD card is present) -#define ENABLE_DATA_LOG 1 -#define SD_CS_PIN 10 - -/************************************** -* Data streaming options -**************************************/ -// data streaming is not supported on Arduino UNO -#define ENABLE_DATA_OUT 0 - -/************************************** -* Accelerometer & Gyro -**************************************/ -//#define USE_MPU6050 1 -//#define USE_MPU9150 1 - -/************************************** -* Timeout/interval options -**************************************/ -#define OBD_MIN_INTERVAL 20 /* ms */ - -/************************************** -* LCD module (uncomment only one) -**************************************/ -LCD_ILI9341 lcd; /* 2.4" ILI9341 based SPI TFT LCD */ -//LCD_Null lcd; - -#endif diff --git a/unologger/datalogger.h b/unologger/datalogger.h deleted file mode 100644 index 2a58bf3..0000000 --- a/unologger/datalogger.h +++ /dev/null @@ -1,201 +0,0 @@ -/************************************************************************* -* Arduino Data Logger Class -* Distributed under GPL v2.0 -* Copyright (c) 2013-2014 Stanley Huang <stanleyhuangyc@gmail.com> -* All rights reserved. -* Visit http://freematics.com for more information -*************************************************************************/ - -#define FORMAT_BIN 0 -#define FORMAT_CSV 1 - -typedef struct { - uint32_t time; - uint16_t pid; - uint8_t flags; - uint8_t checksum; - float value[3]; -} LOG_DATA_COMM; - -#define HEADER_LEN 128 /* bytes */ - -#define PID_GPS_LATITUDE 0xA -#define PID_GPS_LONGITUDE 0xB -#define PID_GPS_ALTITUDE 0xC -#define PID_GPS_SPEED 0xD -#define PID_GPS_HEADING 0xE -#define PID_GPS_SAT_COUNT 0xF -#define PID_GPS_TIME 0x10 -#define PID_GPS_DATE 0x11 - -#define PID_ACC 0x20 -#define PID_GYRO 0x21 -#define PID_COMPASS 0x22 -#define PID_MEMS_TEMP 0x23 -#define PID_BATTERY_VOLTAGE 0x24 - -#define FILE_NAME_FORMAT "/DAT%05d.CSV" - -#if ENABLE_DATA_OUT - -#if USE_SOFTSERIAL - -#if defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) - SoftwareSerial SerialBLE(A8, A9); /* for BLE Shield on MEGA*/ -#else - SoftwareSerial SerialBLE(A2, A3); /* for BLE Shield on UNO/leonardo*/ -#endif - -#else - -#define SerialBLE Serial3 - -#endif - -#endif - -#if ENABLE_DATA_LOG -static File sdfile; -#endif - -static const char* idstr = "FREEMATICS\r"; - -class CDataLogger { -public: - void initSender() - { -#if ENABLE_DATA_OUT - SerialBLE.begin(STREAM_BAUDRATE); - SerialBLE.print(idstr); -#endif -#if ENABLE_DATA_LOG - m_lastDataTime = 0; -#endif - } - void logTimeElapsed() - { -#if ENABLE_DATA_LOG - dataSize += sdfile.print(dataTime - m_lastDataTime); - sdfile.write(','); - dataSize++; - m_lastDataTime = dataTime; -#endif - } - void logData(char c) - { -#if ENABLE_DATA_OUT && STREAM_FORMAT == FORMAT_CSV - SerialBLE.write(c); -#endif -#if ENABLE_DATA_LOG - if (c >= ' ') { - sdfile.write(c); - dataSize++; - } -#endif - } - void logData(uint16_t pid, int value) - { - char buf[16]; - byte n = sprintf(buf, "%X,%d\r", pid, value); -#if ENABLE_DATA_OUT -#if STREAM_FORMAT == FORMAT_BIN - LOG_DATA_COMM ld = {dataTime, pid, 1, 0, value}; - ld.checksum = getChecksum((char*)&ld, 12); - SerialBLE.write((uint8_t*)&ld, 12); -#else - SerialBLE.write((uint8_t*)buf, n); -#endif -#endif -#if ENABLE_DATA_LOG - logTimeElapsed(); - dataSize += sdfile.write((uint8_t*)buf, n); -#endif - } - void logData(uint16_t pid, int32_t value) - { - char buf[20]; - byte n = sprintf(buf, "%X,%ld\r", pid, value); -#if ENABLE_DATA_OUT -#if STREAM_FORMAT == FORMAT_BIN - LOG_DATA_COMM ld = {dataTime, pid, 1, 0, value}; - ld.checksum = getChecksum((char*)&ld, 12); - SerialBLE.write((uint8_t*)&ld, 12); -#else - SerialBLE.write((uint8_t*)buf, n); -#endif -#endif -#if ENABLE_DATA_LOG - logTimeElapsed(); - dataSize += sdfile.write((uint8_t*)buf, n); -#endif - } - void logData(uint16_t pid, int value1, int value2, int value3) - { - char buf[24]; - byte n = sprintf(buf, "%X,%d,%d,%d\r", pid, value1, value2, value3); -#if ENABLE_DATA_OUT -#if STREAM_FORMAT == FORMAT_BIN - LOG_DATA_COMM ld = {dataTime, pid, 3, 0, {value1, value2, value3}}; - ld.checksum = getChecksum((char*)&ld, 20); - SerialBLE.write((uint8_t*)&ld, 20); -#else - SerialBLE.write((uint8_t*)buf, n); -#endif -#endif -#if ENABLE_DATA_LOG - logTimeElapsed(); - dataSize += sdfile.write((uint8_t*)buf, n); -#endif - } -#if ENABLE_DATA_LOG - uint16_t openFile(uint16_t logFlags = 0, uint32_t dateTime = 0) - { - uint16_t fileIndex; - char filename[24] = "/FRMATICS"; - - dataSize = 0; - if (SD.exists(filename)) { - for (fileIndex = 1; fileIndex; fileIndex++) { - sprintf(filename + 9, FILE_NAME_FORMAT, fileIndex); - if (!SD.exists(filename)) { - break; - } - } - if (fileIndex == 0) - return 0; - } else { - SD.mkdir(filename); - fileIndex = 1; - sprintf(filename + 9, FILE_NAME_FORMAT, 1); - } - - sdfile = SD.open(filename, FILE_WRITE); - if (!sdfile) { - return 0; - } - return fileIndex; - } - void closeFile() - { - sdfile.close(); - } - void flushFile() - { - sdfile.flush(); - } -#endif - uint32_t dataTime; - uint32_t dataSize; -private: - byte getChecksum(char* buffer, byte len) - { - uint8_t checksum = 0; - for (byte i = 0; i < len; i++) { - checksum ^= buffer[i]; - } - return checksum; - } -#if ENABLE_DATA_LOG - uint32_t m_lastDataTime; -#endif -}; diff --git a/unologger/unologger.cbp b/unologger/unologger.cbp deleted file mode 100644 index ad04efc..0000000 --- a/unologger/unologger.cbp +++ /dev/null @@ -1,598 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> -<CodeBlocks_project_file> - <FileVersion major="1" minor="6" /> - <Project> - <Option title="UnoLogger" /> - <Option pch_mode="2" /> - <Option compiler="avrgcc" /> - <Build> - <Target title="Simulator"> - <Option output="bin/Release/obdlogger_sim.exe" prefix_auto="1" extension_auto="0" /> - <Option object_output="obj/Release/" /> - <Option type="1" /> - <Option compiler="GCC" /> - <Compiler> - <Add option="-Os" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-DARDUSIM" /> - <Add option="-D__AVR_ATmega2560__" /> - <Add option="-x c++" /> - <Add directory="$(ARDUINO_DIR)/arduino/cores" /> - <Add directory="$(ARDUINO_DIR)/arduino/variants/standard" /> - <Add directory="$(ARDUINO_DIR)/include" /> - </Compiler> - <Linker> - <Add option="-lardusim" /> - </Linker> - <Environment> - <Variable name="ARDUINO_DIR" value="$(APP_PATH)\ardusim" /> - </Environment> - </Target> - <Target title="Arduino Uno"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-Os" /> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega328P__" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/standard" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Uno" /> - <Variable name="BOARD_ID" value="uno" /> - <Variable name="MCU" value="atmega328p" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="115200" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Leonardo"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega32U4__" /> - <Add option="-DUSB_VID=0x2341" /> - <Add option="-DUSB_PID=0x8036" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/leonardo" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Leonardo" /> - <Variable name="BOARD_ID" value="leonardo" /> - <Variable name="MCU" value="atmega32u4" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="57600" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Esplora"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega32U4__" /> - <Add option="-DUSB_VID=0x2341" /> - <Add option="-DUSB_PID=0x8037" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/leonardo" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Esplora" /> - <Variable name="BOARD_ID" value="esplora" /> - <Variable name="MCU" value="atmega32u4" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="57600" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Micro"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega32U4__" /> - <Add option="-DUSB_VID=0x2341" /> - <Add option="-DUSB_PID=0x803C" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/micro" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Micro" /> - <Variable name="BOARD_ID" value="micro" /> - <Variable name="MCU" value="atmega32u4" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="57600" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Duemilanove (328)"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega328P__" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/standard" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Duemilanove (328)" /> - <Variable name="BOARD_ID" value="duemilanove328" /> - <Variable name="MCU" value="atmega328p" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="57600" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Duemilanove (168)"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega168__" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/standard" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Duemilanove (168)" /> - <Variable name="BOARD_ID" value="duemilanove168" /> - <Variable name="MCU" value="atmega168" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="19200" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Nano (328)"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega328P__" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/eightanaloginputs" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Nano (328)" /> - <Variable name="BOARD_ID" value="nano328" /> - <Variable name="MCU" value="atmega328p" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="57600" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Nano (168)"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega168__" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/eightanaloginputs" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Nano (168)" /> - <Variable name="BOARD_ID" value="nano168" /> - <Variable name="MCU" value="atmega168" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="19200" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Mini (328)"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega328P__" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/eightanaloginputs" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Mini (328)" /> - <Variable name="BOARD_ID" value="mini328" /> - <Variable name="MCU" value="atmega328p" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="57600" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Mini (168)"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega168__" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/eightanaloginputs" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Mini (168)" /> - <Variable name="BOARD_ID" value="mini168" /> - <Variable name="MCU" value="atmega168" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="19200" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Pro Mini (328)"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega328P__" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/standard" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Pro Mini (328)" /> - <Variable name="BOARD_ID" value="promini328" /> - <Variable name="MCU" value="atmega328p" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="57600" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Pro Mini (168)"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega168__" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/standard" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Pro Mini (168)" /> - <Variable name="BOARD_ID" value="promini168" /> - <Variable name="MCU" value="atmega168" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="19200" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Mega 2560/ADK"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-O3" /> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega2560__" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/mega" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Mega 2560\ADK" /> - <Variable name="BOARD_ID" value="mega2560" /> - <Variable name="MCU" value="atmega2560" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="115200" /> - <Variable name="UPLOAD_PORT" value="COM37" /> - </Environment> - </Target> - <Target title="Arduino Mega 1280"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega1280__" /> - <Add option="-O2" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/mega" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Mega 1280" /> - <Variable name="BOARD_ID" value="mega1280" /> - <Variable name="MCU" value="atmega1280" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="57600" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Arduino Mega 8"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega328P__" /> - <Add option="-Os" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/standard" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Arduino Mega 8" /> - <Variable name="BOARD_ID" value="mega8" /> - <Variable name="MCU" value="atmega8" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="19200" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - <Target title="Microduino Core+ (644P)"> - <Option output="bin/Release/obdlogger_${BOARD_ID}.elf" prefix_auto="1" extension_auto="0" /> - <Option type="1" /> - <Option compiler="avrgcc" /> - <Compiler> - <Add option="-O3" /> - <Add option="-x c++" /> - <Add option="-mmcu=$(MCU)" /> - <Add option="-DF_CPU=16000000L" /> - <Add option="-D__AVR_ATmega644P__" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/cores/arduino" /> - <Add directory="$(ARDUINO_DIR)/libraries" /> - <Add directory="$(ARDUINO_DIR)/hardware/arduino/variants/plus" /> - </Compiler> - <Linker> - <Add option="-mmcu=$(MCU)" /> - <Add option='"$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add option='"$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - </Linker> - <ExtraCommands> - <Add before='$(TARGET_COMPILER_DIR)ArduinoUploader "$(PROJECT_DIR)." $(BOARD_ID) - $(MCU_CLOCK) 0 "$(PROJECT_DIR)bin/lib_${BOARD_ID}_${MCU_CLOCK}.a" "$(PROJECT_DIR)bin/core_${BOARD_ID}_${MCU_CLOCK}.a"' /> - <Add after='avr-objcopy -O ihex -R .eeprom -R .eesafe "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).hex"' /> - <Add after='avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex "$(TARGET_OUTPUT_FILE)" "$(TARGET_OUTPUT_FILE).eep.hex"' /> - <Add after='avr-size --mcu=$(MCU) --format=avr "$(TARGET_OUTPUT_FILE)"' /> - </ExtraCommands> - <Environment> - <Variable name="BOARD" value="Microduino Core+ (644P)" /> - <Variable name="BOARD_ID" value="uduino644p" /> - <Variable name="MCU" value="atmega644p" /> - <Variable name="MCU_CLOCK" value="16" /> - <Variable name="UPLOAD_BAUDRATE" value="115200" /> - <Variable name="UPLOAD_PORT" value="" /> - </Environment> - </Target> - </Build> - <Compiler> - <Add directory="." /> - </Compiler> - <Unit filename="config.h" /> - <Unit filename="datalogger.h" /> - <Unit filename="images.h" /> - <Unit filename="unologger.ino"> - <Option compile="1" /> - <Option link="1" /> - </Unit> - <Extensions> - <code_completion /> - <debugger /> - <envvars /> - </Extensions> - </Project> -</CodeBlocks_project_file> diff --git a/unologger/unologger.ino b/unologger/unologger.ino deleted file mode 100644 index ba7f0a7..0000000 --- a/unologger/unologger.ino +++ /dev/null @@ -1,455 +0,0 @@ -/************************************************************************* -* Arduino OBD-II/G-Force Data Logger -* Distributed under GPL v2.0 -* Copyright (c) 2013 Stanley Huang <stanleyhuangyc@gmail.com> -* All rights reserved. -*************************************************************************/ - -#include <Arduino.h> -#include <OBD.h> -#include <SPI.h> -#include <SD.h> -#include <Wire.h> -#include <I2Cdev.h> -#include <MPU9150.h> -#include "MultiLCD.h" -#include "config.h" -#include "datalogger.h" - -#define STATE_SD_READY 0x1 -#define STATE_OBD_READY 0x2 -#define STATE_MEMS_READY 0x10 -#define STATE_SLEEPING 0x20 - -#define OBD_MODEL_UART 0 -#define OBD_MODEL_I2C 1 - -static uint32_t lastFileSize = 0; -static int speed = 0; -static uint32_t distance = 0; -static uint16_t fileIndex = 0; -static uint32_t startTime = 0; -static uint16_t elapsed = 0; -static uint8_t lastPid = 0; -static int lastValue = 0; - -#if USE_MPU6050 || USE_MPU9150 -MPU6050 accelgyro; -#endif - -static byte pidTier1[]= {PID_RPM, PID_SPEED, PID_ENGINE_LOAD, PID_THROTTLE, PID_INTAKE_MAP}; -static byte pidTier2[] = {PID_COOLANT_TEMP, PID_INTAKE_TEMP, PID_AMBIENT_TEMP, PID_FUEL_LEVEL, PID_DISTANCE}; - -#define TIER_NUM1 sizeof(pidTier1) -#define TIER_NUM2 sizeof(pidTier2) - -#if OBD_MODEL == OBD_MODEL_UART -class COBDLogger : public COBD, public CDataLogger -#else -class COBDLogger : public COBDI2C, public CDataLogger -#endif -{ -public: - COBDLogger():state(0) {} - void setup() - { - showStates(); - -#if USE_MPU6050 || USE_MPU9150 - Wire.begin(); - accelgyro.initialize(); - if (accelgyro.testConnection()) state |= STATE_MEMS_READY; -#endif - - do { - showStates(); - } while (!init(OBD_PROTOCOL)); - - state |= STATE_OBD_READY; - - showStates(); - - benchmark(); - delay(5000); - -#if ENABLE_DATA_LOG - // open file for logging - if (!(state & STATE_SD_READY)) { - lcd.setFontSize(FONT_SIZE_MEDIUM); - lcd.setCursor(0, 10); - if (checkSD()) { - state |= STATE_SD_READY; - uint16_t index = openFile(); - lcd.setCursor(0, 12); - if (index) { - lcd.print("File ID: "); - lcd.print(index); - } else { - lcd.print("No File"); - } - delay(1000); - } - } -#endif - - initScreen(); - } - void benchmark() - { - lcd.setFontSize(FONT_SIZE_MEDIUM); - - char buf[OBD_RECV_BUF_SIZE]; - uint8_t count = 0; - startTime = millis(); - for (uint8_t n = 0; n < TIER_NUM1; n++) { - sendQuery(pidTier1[n]); - lcd.write('['); - lcd.print(millis()); - lcd.write(']'); - lcd.println(pidTier1[n], HEX); - memset(buf, 0, sizeof(buf)); - if (receive(buf) > 0) { - lcd.println(buf); - count++; - } - } - lcd.setCursor(0, 28); - if (count) { - lcd.print("OBD Time: "); - lcd.printInt((millis() - startTime) / count); - lcd.print("ms"); - } else { - lcd.print("No PID!"); - } - } - void loop() - { - static byte index = 0; - static byte index2 = 0; - static byte index3 = 0; - - logOBDData(pidTier1[index++]); - if (index == TIER_NUM1) { - index = 0; - if (index2 == TIER_NUM2) { - index2 = 0; - } else { - logOBDData(pidTier2[index2++]); - } - } - -#if USE_MPU6050 - if (state & STATE_MEMS_READY) { - processAccelerometer(); - } -#endif - if (errors >= 5) { - reconnect(); - } - } -#if ENABLE_DATA_LOG - bool checkSD() - { - Sd2Card card; - SdVolume volume; - state &= ~STATE_SD_READY; - pinMode(SD_CS_PIN, OUTPUT); - if (card.init(SPI_FULL_SPEED, SD_CS_PIN)) { - const char* type; - - lcd.print("SD"); - switch(card.type()) { - case SD_CARD_TYPE_SD1: - type = "1"; - break; - case SD_CARD_TYPE_SD2: - type = "2"; - break; - case SD_CARD_TYPE_SDHC: - type = "HC"; - break; - default: - type = "x"; - } - - lcd.print(type); - lcd.write(' '); - if (!volume.init(card)) { - lcd.print("No FAT"); - return false; - } - - uint32_t volumesize = volume.blocksPerCluster(); - volumesize >>= 1; // 512 bytes per block - volumesize *= volume.clusterCount(); - volumesize >>= 10; - - lcd.print((int)((volumesize + 511) / 1000)); - lcd.print("GB"); - } else { - lcd.print("SD: No"); - digitalWrite(SD_CS_PIN, HIGH); - return false; - } - - if (!SD.begin(SD_CS_PIN)) { - lcd.print("Bad"); - return false; - } - - state |= STATE_SD_READY; - return true; - } -#endif - void initScreen() - { - initLoggerScreen(); - } -private: - void dataIdleLoop() - { - if (lastPid) { - showData(lastPid, lastValue); - lastPid = 0; - } - uint16_t t = (millis() - startTime) >> 10; - if (t != elapsed) { - lcd.setFontSize(FONT_SIZE_MEDIUM); - lcd.setCursor(260, 8); - lcd.printInt(elapsed / 60, 2); - lcd.write(':'); - lcd.setFlags(FLAG_PAD_ZERO); - lcd.printInt(elapsed % 60, 2); - lcd.setFlags(0); - elapsed = t; - } - -#if ENABLE_DATA_LOG - // flush SD data every 1KB - if (dataSize - lastFileSize >= 1024) { - flushFile(); - lastFileSize = dataSize; - // display logged data size - lcd.setCursor(260, 11); - lcd.printInt(dataSize >> 10, 4); - } -#endif - } -#if USE_MPU6050 - void processAccelerometer() - { -#if USE_MPU6050 || USE_MPU9150 - int16_t ax, ay, az; - int16_t gx, gy, gz; -#if USE_MPU9150 - int16_t mx, my, mz; -#endif - -#if USE_MPU9150 - accelgyro.getMotion9(&ax, &ay, &az, &gx, &gy, &gz, &mx, &my, &mz); -#else - accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); -#endif - - dataTime = millis(); - - // log x/y/z of accelerometer - logData(PID_ACC, ax, ay, az); - // log x/y/z of gyro meter - logData(PID_GYRO, gx, gy, gz); -#if USE_MPU9150 - // log x/y/z of compass - logData(PID_COMPASS, mx, my, mz); -#endif -#endif - } -#endif - void logOBDData(byte pid) - { - int value; - // send a query to OBD adapter for specified OBD-II pid - - // receive and parse the response - if (read(pid, value)) { - dataTime = millis(); - // log data to SD card - logData(0x100 | pid, value); - lastValue = value; - lastPid = pid; - errors = 0; - } else { - errors++; - return; - } - } - void reconnect() - { -#if ENABLE_DATA_LOG - closeFile(); -#endif - lcd.clear(); - lcd.setFontSize(FONT_SIZE_MEDIUM); - lcd.print("Reconnecting"); - startTime = millis(); - state &= ~(STATE_OBD_READY | STATE_MEMS_READY); - state |= STATE_SLEEPING; - //digitalWrite(SD_CS_PIN, LOW); - for (uint16_t i = 0; ; i++) { - if (i == 5) { - lcd.setBackLight(0); - lcd.clear(); - } - if (init()) { - int value; - if (read(PID_RPM, value) && value > 0) - break; - } - } - state &= ~STATE_SLEEPING; - fileIndex++; - lcd.setBackLight(255); - setup(); - } - // screen layout related stuff - void showStates() - { - lcd.setFontSize(FONT_SIZE_MEDIUM); - lcd.setCursor(0, 6); - lcd.print("OBD "); - if (state & STATE_OBD_READY) lcd.print("OK"); -#if USE_MPU6050 || USE_MPU9150 - lcd.setCursor(0, 8); - lcd.print("MEMS "); - if (state & STATE_MEMS_READY) lcd.print("OK"); -#endif - } - void showData(byte pid, int value) - { - switch (pid) { - case PID_RPM: - lcd.setCursor(0, 2); - lcd.setFontSize(FONT_SIZE_XLARGE); - lcd.printInt((unsigned int)value % 10000, 4); - showChart(value); - break; - case PID_SPEED: - lcd.setCursor(90, 2); - lcd.setFontSize(FONT_SIZE_XLARGE); - lcd.printInt((unsigned int)value % 1000, 3); - break; - case PID_ENGINE_LOAD: - lcd.setCursor(164, 2); - lcd.setFontSize(FONT_SIZE_XLARGE); - lcd.printInt(value % 100, 3); - break; - case PID_INTAKE_TEMP: - if ((uint16_t)value < 1000) { - lcd.setCursor(248, 2); - lcd.setFontSize(FONT_SIZE_XLARGE); - lcd.printInt(value, 3); - } - break; - case PID_INTAKE_MAP: - lcd.setCursor(164, 9); - lcd.setFontSize(FONT_SIZE_XLARGE); - lcd.printInt((uint16_t)value % 1000, 3); - break; - case PID_COOLANT_TEMP: - lcd.setCursor(8, 9); - lcd.setFontSize(FONT_SIZE_XLARGE); - lcd.printInt((uint16_t)value % 1000, 3); - break; - case PID_DISTANCE: - lcd.setFontSize(FONT_SIZE_XLARGE); - lcd.setCursor(90, 9); - lcd.printInt((uint16_t)value % 1000, 3); - break; - } - } - void showChart(int value) - { - static uint16_t pos = 0; - if (value >= 500) { - byte n = (value - 600) / 30; - if (n > 130) n = 130; - lcd.fill(pos, pos, 239 - n, 239, RGB16_CYAN); - } - pos = (pos + 1) % 320; - lcd.fill(pos, pos, 110, 239); - } - void initLoggerScreen() - { - lcd.clear(); - lcd.setBackLight(255); - lcd.setFontSize(FONT_SIZE_SMALL); - lcd.setColor(RGB16_CYAN); - lcd.setCursor(4, 0); - lcd.print("ENGINE RPM"); - lcd.setCursor(104, 0); - lcd.print("SPEED"); - lcd.setCursor(164, 0); - lcd.print("ENGINE LOAD"); - lcd.setCursor(248, 0); - lcd.print("INTAKE TEMP"); - - lcd.setCursor(4, 7); - lcd.print("COOLANT TEMP"); - lcd.setCursor(104, 7); - lcd.print("DISTANCE"); - lcd.setCursor(164, 7); - lcd.print("INTAKE MAP"); - - lcd.setCursor(260, 7); - lcd.print("ELAPSED"); - lcd.setCursor(260, 10); - lcd.print("LOG SIZE"); - - lcd.setColor(RGB16_YELLOW); - lcd.setCursor(24, 5); - lcd.print("rpm"); - lcd.setCursor(110, 5); - lcd.print("km/h"); - lcd.setCursor(216, 4); - lcd.print("%"); - lcd.setCursor(304, 4); - lcd.print("C"); - lcd.setCursor(64, 11); - lcd.print("C"); - lcd.setCursor(110, 12); - lcd.print("km"); - lcd.setCursor(200, 12); - lcd.print("kpa"); - lcd.setCursor(296, 12); - lcd.print("KB"); - - lcd.setColor(RGB16_WHITE); - - - //lcd.setCursor(0, 5); - //lcd.print("THR: %"); - //lcd.setCursor(80, 5); - //lcd.print("AIR: C"); - } - byte state; -}; - -static COBDLogger logger; - -void setup() -{ - lcd.begin(); - lcd.setFontSize(FONT_SIZE_MEDIUM); - lcd.setColor(RGB16_YELLOW); - lcd.println("UNOLOGGER"); - lcd.setColor(RGB16_WHITE); - - logger.begin(); - logger.initSender(); - - logger.setup(); -} - -void loop() -{ - logger.loop(); -} |