diff --git a/lambda-test/.cproject b/lambda-test/.cproject
new file mode 100644
index 0000000..668c34f
--- /dev/null
+++ b/lambda-test/.cproject
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lambda-test/.gitignore b/lambda-test/.gitignore
new file mode 100644
index 0000000..9f963cf
--- /dev/null
+++ b/lambda-test/.gitignore
@@ -0,0 +1 @@
+/Release/
diff --git a/lambda-test/.project b/lambda-test/.project
new file mode 100644
index 0000000..d072cdc
--- /dev/null
+++ b/lambda-test/.project
@@ -0,0 +1,28 @@
+
+
+ lambda-test
+
+
+ lambda
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+ clean,full,incremental,
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+ de.innot.avreclipse.core.avrnature
+
+
diff --git a/lambda-test/.settings/de.innot.avreclipse.core.prefs b/lambda-test/.settings/de.innot.avreclipse.core.prefs
new file mode 100644
index 0000000..7fa4086
--- /dev/null
+++ b/lambda-test/.settings/de.innot.avreclipse.core.prefs
@@ -0,0 +1,23 @@
+avrtarget/ClockFrequency=1000000
+avrtarget/ExtRAMSize=0
+avrtarget/ExtendedRAM=false
+avrtarget/MCUType=atmega328p
+avrtarget/UseEEPROM=false
+avrtarget/UseExtendedRAMforHeap=true
+avrtarget/avrdude/BitBangDelay=
+avrtarget/avrdude/Bitclock=
+avrtarget/avrdude/EEPROMFile=
+avrtarget/avrdude/EEPROMFromConfig=true
+avrtarget/avrdude/FlashFile=
+avrtarget/avrdude/FlashFromConfig=true
+avrtarget/avrdude/NoChipErase=false
+avrtarget/avrdude/NoSigCheck=false
+avrtarget/avrdude/NoVerify=false
+avrtarget/avrdude/NoWrite=false
+avrtarget/avrdude/OtherOptions=
+avrtarget/avrdude/ProgrammerID=programmerconfig.1
+avrtarget/avrdude/UseCounter=false
+avrtarget/avrdude/WriteEEPROM=false
+avrtarget/avrdude/WriteFlash=true
+avrtarget/perConfig=false
+eclipse.preferences.version=1
diff --git a/lambda-test/.settings/org.eclipse.cdt.codan.core.prefs b/lambda-test/.settings/org.eclipse.cdt.codan.core.prefs
new file mode 100644
index 0000000..77386c2
--- /dev/null
+++ b/lambda-test/.settings/org.eclipse.cdt.codan.core.prefs
@@ -0,0 +1,67 @@
+eclipse.preferences.version=1
+org.eclipse.cdt.codan.checkers.errnoreturn=Warning
+org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false}
+org.eclipse.cdt.codan.checkers.errreturnvalue=Error
+org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.checkers.noreturn=Error
+org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false}
+org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error
+org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error
+org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error
+org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false}
+org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning
+org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},unknown\=>false,exceptions\=>()}
+org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error
+org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning
+org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},skip\=>true}
+org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error
+org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error
+org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error
+org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error
+org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info
+org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},pattern\=>"^[a-z]",macro\=>true,exceptions\=>()}
+org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error
+org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error
+org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>()}
+org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},paramNot\=>false}
+org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},else\=>false,afterelse\=>false}
+org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true}
+org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true}
+org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>("@(\#)","$Id")}
+org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
diff --git a/lambda-test/Makefile b/lambda-test/Makefile
new file mode 100644
index 0000000..6122789
--- /dev/null
+++ b/lambda-test/Makefile
@@ -0,0 +1,194 @@
+
+##########------------------------------------------------------##########
+########## Project-specific Details ##########
+########## Check these every time you start a new project ##########
+##########------------------------------------------------------##########
+
+MCU = atmega328p
+F_CPU = 1000000
+BAUD = 9600
+## Also try BAUD = 19200 or 38400 if you're feeling lucky.
+
+## This is where your main() routine lives
+MAIN = lambda-test.c
+
+## If you've split your program into multiple .c / .h files,
+## include the additional source (in same directory) here
+LOCAL_SOURCE =
+
+## Here you can link to one more directory (and multiple .c files)
+EXTRA_SOURCE_DIR = /data/Work/AVR/AVR-Programming-master/AVR-Programming-Library/
+EXTRA_SOURCE_FILES = USART.c
+
+## Link to directory of project under test and its source files
+TEST_SOURCE_DIR = /data/Job/git/lambda-avr/lambda/
+TEST_SOURCE_FILES = sensors.c
+
+##########------------------------------------------------------##########
+########## Programmer Defaults ##########
+########## Set up once, then forget about it ##########
+########## (Can override. See bottom of file.) ##########
+##########------------------------------------------------------##########
+
+PROGRAMMER_TYPE = avrisp
+# extra arguments to avrdude: baud rate, chip type, -F flag, etc.
+PROGRAMMER_ARGS = -b 19200 -P /dev/ttyACM3
+
+##########------------------------------------------------------##########
+########## Makefile Magic! ##########
+########## Summary: ##########
+########## We want a .hex file ##########
+########## Compile source files into .elf ##########
+########## Convert .elf file into .hex ##########
+########## You shouldn't need to edit below. ##########
+##########------------------------------------------------------##########
+
+## Defined programs / locations
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+AVRSIZE = avr-size
+AVRDUDE = avrdude
+
+## Compilation options, type man avr-gcc if you're curious.
+CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU)UL -DBAUD=$(BAUD) -Os -I. -I$(EXTRA_SOURCE_DIR) -I$(TEST_SOURCE_DIR)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -g -ggdb
+CFLAGS += -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,--relax
+CFLAGS += -std=gnu99
+## CFLAGS += -Wl,-u,vfprintf -lprintf_flt -lm ## for floating-point printf
+## CFLAGS += -Wl,-u,vfprintf -lprintf_min ## for smaller printf
+
+## Lump target and extra source files together
+TARGET = $(strip $(basename $(MAIN)))
+SRC = $(TARGET).c
+EXTRA_SOURCE = $(addprefix $(EXTRA_SOURCE_DIR), $(EXTRA_SOURCE_FILES))
+TEST_SOURCE = $(addprefix $(TEST_SOURCE_DIR), $(TEST_SOURCE_FILES))
+SRC += $(EXTRA_SOURCE)
+SRC += $(TEST_SOURCE)
+SRC += $(LOCAL_SOURCE)
+
+## List of all header files
+HEADERS = $(SRC:.c=.h)
+
+## For every .c file, compile an .o object file
+OBJ = $(SRC:.c=.o)
+
+## Generic Makefile targets. (Only .hex file is necessary)
+all: $(TARGET).hex
+
+%.hex: %.elf
+ $(OBJCOPY) -R .eeprom -O ihex $< $@
+
+%.elf: $(SRC)
+ $(CC) $(CFLAGS) $(SRC) --output $@
+
+%.eeprom: %.elf
+ $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@
+
+debug:
+ @echo
+ @echo "Source files:" $(SRC)
+ @echo "MCU, F_CPU, BAUD:" $(MCU), $(F_CPU), $(BAUD)
+ @echo
+
+# Optionally create listing file from .elf
+# This creates approximate assembly-language equivalent of your code.
+# Useful for debugging time-sensitive bits,
+# or making sure the compiler does what you want.
+disassemble: $(TARGET).lst
+
+disasm: disassemble
+
+eeprom: $(TARGET).eeprom
+
+%.lst: %.elf
+ $(OBJDUMP) -S $< > $@
+
+# Optionally show how big the resulting program is
+size: $(TARGET).elf
+ $(AVRSIZE) -C --mcu=$(MCU) $(TARGET).elf
+
+clean:
+ rm -f $(TARGET).elf $(TARGET).hex $(TARGET).obj \
+ $(TARGET).o $(TARGET).d $(TARGET).eep $(TARGET).lst \
+ $(TARGET).lss $(TARGET).sym $(TARGET).map $(TARGET)~ \
+ $(TARGET).eeprom
+
+squeaky_clean:
+ rm -f *.elf *.hex *.obj *.o *.d *.eep *.lst *.lss *.sym *.map *~
+
+##########------------------------------------------------------##########
+########## Programmer-specific details ##########
+########## Flashing code to AVR using avrdude ##########
+##########------------------------------------------------------##########
+
+flash: $(TARGET).hex
+ $(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -U flash:w:$<
+
+## An alias
+program: flash
+
+flash_eeprom: $(TARGET).eeprom
+ $(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -U eeprom:w:$<
+
+avrdude_terminal:
+ $(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -nt
+
+## If you've got multiple programmers that you use,
+## you can define them here so that it's easy to switch.
+## To invoke, use something like `make flash_arduinoISP`
+flash_usbtiny: PROGRAMMER_TYPE = usbtiny
+flash_usbtiny: PROGRAMMER_ARGS = # USBTiny works with no further arguments
+flash_usbtiny: flash
+
+flash_usbasp: PROGRAMMER_TYPE = usbasp
+flash_usbasp: PROGRAMMER_ARGS = # USBasp works with no further arguments
+flash_usbasp: flash
+
+flash_arduinoISP: PROGRAMMER_TYPE = avrisp
+flash_arduinoISP: PROGRAMMER_ARGS = -b 19200 -P /dev/ttyACM0
+## (for windows) flash_arduinoISP: PROGRAMMER_ARGS = -b 19200 -P com5
+flash_arduinoISP: flash
+
+flash_109: PROGRAMMER_TYPE = avr109
+flash_109: PROGRAMMER_ARGS = -b 9600 -P /dev/ttyUSB0
+flash_109: flash
+
+##########------------------------------------------------------##########
+########## Fuse settings and suitable defaults ##########
+##########------------------------------------------------------##########
+
+## Mega 48, 88, 168, 328 default values
+LFUSE = 0x62
+HFUSE = 0xdf
+EFUSE = 0x00
+
+## Generic
+FUSE_STRING = -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m -U efuse:w:$(EFUSE):m
+
+fuses:
+ $(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) \
+ $(PROGRAMMER_ARGS) $(FUSE_STRING)
+show_fuses:
+ $(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -nv
+
+## Called with no extra definitions, sets to defaults
+set_default_fuses: FUSE_STRING = -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m -U efuse:w:$(EFUSE):m
+set_default_fuses: fuses
+
+## Set the fuse byte for full-speed mode
+## Note: can also be set in firmware for modern chips
+set_fast_fuse: LFUSE = 0xE2
+set_fast_fuse: FUSE_STRING = -U lfuse:w:$(LFUSE):m
+set_fast_fuse: fuses
+
+## Set the EESAVE fuse byte to preserve EEPROM across flashes
+set_eeprom_save_fuse: HFUSE = 0xD7
+set_eeprom_save_fuse: FUSE_STRING = -U hfuse:w:$(HFUSE):m
+set_eeprom_save_fuse: fuses
+
+## Clear the EESAVE fuse byte
+clear_eeprom_save_fuse: FUSE_STRING = -U hfuse:w:$(HFUSE):m
+clear_eeprom_save_fuse: fuses
diff --git a/lambda-test/lambda-test.c b/lambda-test/lambda-test.c
new file mode 100644
index 0000000..f841d91
--- /dev/null
+++ b/lambda-test/lambda-test.c
@@ -0,0 +1,45 @@
+/*
+ * sensors-test.c
+ *
+ * Created on: 04.03.2015
+ * Author: dode@luniks.net
+ *
+ */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "USART.h"
+#include "sensors.h"
+
+void testToTempI(void) {
+ int temp = toTempI(100);
+
+ if (temp == 20) {
+ printString("testToTempI(): passed\r\n");
+ } else {
+ printString("testToTempI(): failed!\r\n");
+ }
+}
+
+void testToTempO(void) {
+ int temp = toTempO(454);
+
+ if (temp == 0) {
+ printString("testToTempO(): passed\r\n");
+ } else {
+ printString("testToTempO(): failed!\r\n");
+ }
+}
+
+int main(void) {
+
+ initUSART();
+ testToTempI();
+ testToTempO();
+
+ return 0;
+}
diff --git a/lambda-test/lambda-test.elf b/lambda-test/lambda-test.elf
new file mode 100755
index 0000000..a4e4bce
--- /dev/null
+++ b/lambda-test/lambda-test.elf
Binary files differ
diff --git a/lambda-test/lambda-test.hex b/lambda-test/lambda-test.hex
new file mode 100644
index 0000000..faacfa3
--- /dev/null
+++ b/lambda-test/lambda-test.hex
@@ -0,0 +1,130 @@
+:1000000033C0000044C0000042C0000040C00000F7
+:100010003EC000003CC000003AC0000038C00000F4
+:1000200036C0000034C0000032C0000030C0000004
+:100030002EC000002CC000002AC0000028C0000014
+:1000400026C0000024C0000022C0000020C0000024
+:100050001EC000001CC000001AC0000018C0000034
+:1000600016C0000014C0000011241FBECFEFD8E05E
+:10007000DEBFCDBF11E0A0E0B1E0E6E7F7E002C0EF
+:1000800005900D92A638B107D9F71CD072C3B8CF2E
+:1000900060E070E088EC92E445D0449719F480E089
+:1000A00091E002C088E191E02BC060E070E083EE57
+:1000B00093E4F2D0892B19F481E391E002C089E442
+:1000C00091E01EC005D0E4DFF0DF80E090E008950D
+:1000D0001092C5008CE08093C400E0ECF0E08081D9
+:1000E0008260808388E18093C10086E08093C200B3
+:1000F00008959091C00095FFFCCF8093C6000895AD
+:100100001F93CF93DF93EC0110E0FE01E10FF11D8F
+:100110008081882319F0EDDF1F5FF7CFDF91CF914A
+:100120001F91089520E030E040EA50E427D1D8D272
+:100130008DD1CB0108958F929F92AF92BF92CF92B3
+:10014000DF92EF92FF920F931F93CF93DF934B01B8
+:100150005C01EA01690168817981882777FD8095D2
+:10016000982FA7D19B01AC01C501B40103D187FF32
+:1001700005C06A817B818C819D8181C086E08C9DD8
+:1001800080018D9D100D1124065011090C0F1D1FAB
+:10019000F80160817181882777FD8095982F89D13A
+:1001A0009B01AC01C501B40134D218160CF462C035
+:1001B0008E0180E090E0F1E0CF1AD1089C012F5F22
+:1001C0003F4F79018C159D0584F4F8016681778194
+:1001D000882777FD8095982F6CD10A5F1F4FA50166
+:1001E000940117D218160CF043C086E08E9DF001E2
+:1001F0008F9DF00D11248E010E0F1F1F3697EC0FEF
+:10020000FD1FC081D181C280D380E480F580BE0112
+:10021000882777FD8095982F4CD19B01AC01C501B3
+:10022000B40143D04B015C01A7019601F801628142
+:1002300073818481958139D09B01AC01C501B401E2
+:10024000ECD14B015C01F801608171816C1B7D0B6D
+:10025000882777FD8095982F2CD19B01AC01C50193
+:10026000B4018CD09B01AC01C701B6011FD007C0FF
+:10027000C701A4CFF8016281738184819581DF91E8
+:10028000CF911F910F91FF90EF90DF90CF90BF9093
+:10029000AF909F908F90089526E030E042E651E0C5
+:1002A0004ADF1ED2D3D0CB0108955058BB27AA27CE
+:1002B0000ED075C166D130F06BD120F031F49F3F84
+:1002C00011F41EF45BC10EF4E095E7FB51C1E92F78
+:1002D00077D180F3BA17620773078407950718F080
+:1002E00071F49EF58FC10EF4E0950B2EBA2FA02D60
+:1002F0000B01B90190010C01CA01A0011124FF27D3
+:10030000591B99F0593F50F4503E68F11A16F040CD
+:10031000A22F232F342F4427585FF3CF46953795CC
+:100320002795A795F0405395C9F77EF41F16BA0B91
+:10033000620B730B840BBAF09150A1F0FF0FBB1F3F
+:10034000661F771F881FC2F70EC0BA0F621F731F88
+:10035000841F48F4879577956795B795F7959E3FE5
+:1003600008F0B3CF9395880F08F09927EE0F979573
+:1003700087950895D9D008F481E008950CD00FC175
+:1003800007D140F0FED030F021F45F3F19F0F0C00B
+:10039000511139C1F3C014D198F39923C9F35523EE
+:1003A000B1F3951B550BBB27AA2762177307840768
+:1003B00038F09F5F5F4F220F331F441FAA1FA9F31E
+:1003C00033D00E2E3AF0E0E830D091505040E69510
+:1003D000001CCAF729D0FE2F27D0660F771F881F71
+:1003E000BB1F261737074807AB07B0E809F0BB0B60
+:1003F000802DBF01FF2793585F4F2AF09E3F510584
+:1004000068F0B6C000C15F3FECF3983EDCF3869520
+:1004100077956795B795F7959F5FC9F7880F911DF9
+:100420009695879597F90895E1E0660F771F881FE5
+:10043000BB1F621773078407BA0720F0621B730B98
+:10044000840BBA0BEE1F88F7E095089504D06894EA
+:10045000B111D9C00895BCD088F09F5790F0B92F42
+:100460009927B751A0F0D1F0660F771F881F991F09
+:100470001AF0BA95C9F712C0B13081F0C3D0B1E01B
+:100480000895C0C0672F782F8827B85F39F0B93F2B
+:10049000CCF3869577956795B395D9F73EF490950B
+:1004A0008095709561957F4F8F4F9F4F0895E89489
+:1004B00009C097FB3EF490958095709561957F4FAC
+:1004C0008F4F9F4F9923A9F0F92F96E9BB2793955A
+:1004D000F695879577956795B795F111F8CFFAF46A
+:1004E000BB0F11F460FF1BC06F5F7F4F8F4F9F4F9B
+:1004F00016C0882311F096E911C0772321F09EE8F9
+:10050000872F762F05C0662371F096E8862F70E05E
+:1005100060E02AF09A95660F771F881FDAF7880F38
+:100520009695879597F90895990F0008550FAA0B8E
+:10053000E0E8FEEF16161706E807F907C0F01216F6
+:100540001306E407F50798F0621B730B840B950BF9
+:1005500039F40A2661F0232B242B252B21F408954E
+:100560000A2609F4A140A6958FEF811D811D0895EB
+:1005700097F99F6780E870E060E008959FEF80EC56
+:10058000089500240A9416161706180609060895F9
+:1005900000240A9412161306140605060895092E5F
+:1005A0000394000C11F4882352F0BB0F40F4BF2BCE
+:1005B00011F460FF04C06F5F7F4F8F4F9F4F08950E
+:1005C00057FD9058440F551F59F05F3F71F0479504
+:1005D000880F97FB991F61F09F3F79F087950895E9
+:1005E000121613061406551FF2CF4695F1DF08C008
+:1005F000161617061806991FF1CF86957105610525
+:1006000008940895E894BB2766277727CB0197F9CC
+:1006100008958ADF08F48FEF08950BD0C0CFB1DFC3
+:1006200028F0B6DF18F0952309F0A2CFA7CF112448
+:10063000EACFC6DFA0F3959FD1F3950F50E0551F89
+:10064000629FF001729FBB27F00DB11D639FAA2727
+:10065000F00DB11DAA1F649F6627B00DA11D661F76
+:10066000829F2227B00DA11D621F739FB00DA11D97
+:10067000621F839FA00D611D221F749F3327A00D51
+:10068000611D231F849F600D211D822F762F6A2FED
+:1006900011249F5750408AF0E1F088234AF0EE0F72
+:1006A000FF1FBB1F661F771F881F91505040A9F77F
+:1006B0009E3F510570F05CCFA6CF5F3FECF3983EB4
+:1006C000DCF3869577956795B795F795E7959F5FE6
+:1006D000C1F7FE2B880F911D9695879597F9089580
+:1006E00077DFE0F09E37D8F09639B8F49E3848F4BA
+:1006F000672F782F8827985FF9CF8695779567952C
+:1007000093959539D0F3B62FB1706B0F711D811D84
+:1007100020F4879577956795939502C01CC073CF99
+:10072000882371F4772321F09850872B762F07C008
+:10073000662311F499270DC09051862B70E060E07C
+:100740002AF09A95660F771F881FDAF7880F96951B
+:10075000879597F908959F3F31F0915020F4879540
+:1007600077956795B795880F911D9695879597F919
+:060770000895F894FFCF8C
+:1007760074657374546F54656D704928293A2070F6
+:1007860061737365640D0A0074657374546F546500
+:100796006D704928293A206661696C6564210D0AE5
+:1007A6000074657374546F54656D704F28293A2030
+:1007B6007061737365640D0A0074657374546F54C5
+:1007C600656D704F28293A206661696C6564210D54
+:1007D6000A00C7FF000048C2C601000000007B05F2
+:1007E6000000C842D80800004843E70B00009643C3
+:0607F600B20E0000C84332
+:00000001FF
diff --git a/lambda/lambda.c b/lambda/lambda.c
index 0c62441..fee76b1 100644
--- a/lambda/lambda.c
+++ b/lambda/lambda.c
@@ -1,5 +1,5 @@
/*
- * lambda.h
+ * lambda.c
*
* Created on: 22.02.2015
* Author: dode@luniks.net
diff --git a/lambda/sensors.c b/lambda/sensors.c
index cf87b12..1b42962 100644
--- a/lambda/sensors.c
+++ b/lambda/sensors.c
@@ -48,7 +48,7 @@
static const tableEntry tempOTable[] = {
{ -57, -50 },
- { 455, 0 },
+ { 454, 0 },
{ 1403, 100 },
{ 2264, 200 },
{ 3047, 300 },