aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--workspace/ts100/inc/Font.h163
-rw-r--r--workspace/ts100/inc/Modes.h2
-rw-r--r--workspace/ts100/inc/Oled.h2
-rw-r--r--workspace/ts100/inc/Settings.h21
-rw-r--r--workspace/ts100/src/I2C.c2
-rw-r--r--workspace/ts100/src/Main.c43
-rw-r--r--workspace/ts100/src/Modes.c124
-rw-r--r--workspace/ts100/src/Oled.c119
-rw-r--r--workspace/ts100/src/Settings.c23
9 files changed, 297 insertions, 202 deletions
diff --git a/workspace/ts100/inc/Font.h b/workspace/ts100/inc/Font.h
index 791feca4..57415810 100644
--- a/workspace/ts100/inc/Font.h
+++ b/workspace/ts100/inc/Font.h
@@ -10,86 +10,91 @@
#ifndef FONT_H_
#define FONT_H_
-const u8 FONT[]={
- 0x00,0xF0,0xFC,0x0E,0x82,0xC2,0x62,0x1E,0xFC,0xF0,0x00,0x00,0x00,0x00,
- 0x00,0x03,0x0F,0x1F,0x11,0x10,0x10,0x1C,0x0F,0x03,0x00,0x00,0x00,0x00,/*0*/
- 0x00,0x08,0x04,0x02,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,/*1*/
- 0x00,0x04,0x02,0x02,0x02,0xC6,0xFC,0x78,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x18,0x1C,0x16,0x13,0x11,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,/*2*/
- 0x00,0x02,0x02,0x42,0x42,0x66,0xFE,0x9C,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x10,0x10,0x10,0x10,0x10,0x08,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,/*3*/
- 0x00,0x00,0x80,0xE0,0x30,0x1C,0x06,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x03,0x03,0x02,0x02,0x02,0x02,0x1F,0x1F,0x02,0x02,0x00,0x00,0x00,/*4*/
- 0x00,0x7E,0x7E,0x42,0x42,0x42,0xC2,0x82,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x10,0x10,0x10,0x10,0x10,0x08,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,/*5*/
- 0x00,0xE0,0xF8,0x8C,0x44,0x42,0x42,0xC2,0x82,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,0x00,0x00,/*6*/
- 0x00,0x02,0x02,0x02,0x02,0xC2,0xF2,0x1E,0x06,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x10,0x1C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*7*/
- 0x00,0x38,0x7C,0x66,0xC2,0x82,0xC2,0x66,0x7C,0x3C,0x00,0x00,0x00,0x00,
- 0x00,0x0E,0x0F,0x19,0x10,0x10,0x10,0x19,0x0F,0x0E,0x00,0x00,0x00,0x00,/*8*/
- 0x00,0x78,0x7C,0xC6,0x82,0x82,0x82,0x46,0xFC,0xF8,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x10,0x10,0x10,0x10,0x08,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,/*9*/
- 0x00,0x00,0x80,0xF0,0x1E,0x02,0x1E,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x1C,0x0F,0x03,0x02,0x02,0x02,0x03,0x0F,0x1C,0x00,0x00,0x00,0x00,/*A*/
- 0x00,0xFE,0xFE,0x42,0x42,0x42,0xE6,0xBE,0x9C,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x1F,0x1F,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,/*B*/
- 0x00,0xF0,0xF8,0x0C,0x06,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x08,0x00,0x00,0x00,0x00,0x00,/*C*/
- 0x00,0xFE,0xFE,0x02,0x02,0x02,0x06,0x0C,0xFC,0xF0,0x00,0x00,0x00,0x00,
- 0x00,0x1F,0x1F,0x10,0x10,0x10,0x18,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,/*D*/
- 0x00,0xFE,0xFE,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,/*E*/
- 0x00,0xFE,0xFE,0x82,0x82,0x82,0x82,0x82,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*F*/
- 0x00,0xF0,0xF8,0x0C,0x06,0x02,0x82,0x82,0x82,0x84,0x00,0x00,0x00,0x00,
- 0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x1F,0x1F,0x00,0x00,0x00,0x00,/*G*/
- 0x00,0xFE,0xFE,0x40,0x40,0x40,0x40,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,/*H*/
- 0x00,0x02,0x02,0x02,0xFE,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,/*I*/
- 0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x08,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,/*J*/
- 0x00,0xFE,0xFE,0xC0,0xE0,0x30,0x18,0x0C,0x06,0x02,0x00,0x00,0x00,0x00,
- 0x00,0x1F,0x1F,0x00,0x01,0x03,0x06,0x0C,0x18,0x10,0x00,0x00,0x00,0x00,/*K*/
- 0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,/*L*/
- 0x00,0x00,0xFE,0x06,0x3C,0xC0,0xC0,0x3C,0x06,0xFE,0x00,0x00,0x00,0x00,
- 0x00,0x10,0x1F,0x00,0x00,0x01,0x01,0x00,0x00,0x1F,0x18,0x00,0x00,0x00,/*M*/
- 0x00,0xFE,0xFE,0x1E,0x70,0x80,0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x1F,0x1F,0x00,0x00,0x03,0x1C,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,/*N*/
- 0x00,0xF0,0xFC,0x0C,0x02,0x02,0x02,0x0E,0xFC,0xF0,0x00,0x00,0x00,0x00,
- 0x00,0x03,0x0F,0x1C,0x10,0x10,0x10,0x0C,0x0F,0x03,0x00,0x00,0x00,0x00,/*O*/
- 0x00,0xFE,0xFE,0x02,0x02,0x02,0x86,0xFC,0x78,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x1F,0x1F,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*P*/
- 0x00,0xF0,0xF8,0x0C,0x02,0x02,0x02,0x02,0x0C,0xFC,0xF0,0x00,0x00,0x00,
- 0x00,0x03,0x0F,0x1C,0x10,0x30,0x70,0xD8,0x8C,0x8F,0x83,0x40,0x00,0x00,/*Q*/
- 0x00,0xFE,0xFE,0x42,0x42,0xC2,0xE6,0x3C,0x1C,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x1F,0x1F,0x00,0x00,0x00,0x01,0x0F,0x1C,0x10,0x00,0x00,0x00,0x00,/*R*/
- 0x00,0x38,0x7C,0x66,0xC2,0xC2,0x82,0x84,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x08,0x10,0x10,0x10,0x10,0x19,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,/*S*/
- 0x00,0x02,0x02,0x02,0x02,0xFE,0xFE,0x02,0x02,0x02,0x02,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*T*/
- 0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,
- 0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,0x00,0x00,/*U*/
- 0x00,0x0E,0x7E,0xE0,0x00,0x00,0x00,0xE0,0x7C,0x0E,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x1F,0x18,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,/*V*/
- 0x00,0x7E,0xFE,0x00,0x00,0xE0,0xE0,0x00,0x00,0xFE,0x7E,0x00,0x00,0x00,
- 0x00,0x00,0x1F,0x18,0x0F,0x01,0x01,0x0F,0x18,0x1F,0x00,0x00,0x00,0x00,/*W*/
- 0x00,0x02,0x06,0x1C,0x38,0xE0,0xE0,0x38,0x1C,0x06,0x02,0x00,0x00,0x00,
- 0x00,0x10,0x18,0x0E,0x07,0x01,0x01,0x07,0x0E,0x18,0x10,0x00,0x00,0x00,/*X*/
- 0x00,0x02,0x0E,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0E,0x02,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*Y*/
- 0x00,0x02,0x02,0x02,0xC2,0xE2,0x3A,0x0E,0x02,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x10,0x1C,0x17,0x11,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,/*Z*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* */
+#define FONT_WIDTH 12 /*How many pixels wide the font is*/
+const uint8_t FONT[]={
+ 0x00,0xF0,0xFC,0x0E,0x82,0xC2,0x62,0x1E,0xFC,0xF0,0x00,0x00,
+ 0x00,0x03,0x0F,0x1F,0x11,0x10,0x10,0x1C,0x0F,0x03,0x00,0x00,/*0*/
+ 0x00,0x08,0x04,0x02,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,/*1*/
+ 0x00,0x04,0x02,0x02,0x02,0xC6,0xFC,0x78,0x00,0x00,0x00,0x00,
+ 0x00,0x18,0x1C,0x16,0x13,0x11,0x10,0x10,0x10,0x00,0x00,0x00,/*2*/
+ 0x00,0x02,0x02,0x42,0x42,0x66,0xFE,0x9C,0x00,0x00,0x00,0x00,
+ 0x00,0x10,0x10,0x10,0x10,0x10,0x08,0x0F,0x07,0x00,0x00,0x00,/*3*/
+ 0x00,0x00,0x80,0xE0,0x30,0x1C,0x06,0xFE,0xFE,0x00,0x00,0x00,
+ 0x00,0x03,0x03,0x02,0x02,0x02,0x02,0x1F,0x1F,0x02,0x02,0x00,/*4*/
+ 0x00,0x7E,0x7E,0x42,0x42,0x42,0xC2,0x82,0x00,0x00,0x00,0x00,
+ 0x00,0x10,0x10,0x10,0x10,0x10,0x08,0x0F,0x07,0x00,0x00,0x00,/*5*/
+ 0x00,0xE0,0xF8,0x8C,0x44,0x42,0x42,0xC2,0x82,0x80,0x00,0x00,
+ 0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,/*6*/
+ 0x00,0x02,0x02,0x02,0x02,0xC2,0xF2,0x1E,0x06,0x00,0x00,0x00,
+ 0x00,0x00,0x10,0x1C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,/*7*/
+ 0x00,0x38,0x7C,0x66,0xC2,0x82,0xC2,0x66,0x7C,0x3C,0x00,0x00,
+ 0x00,0x0E,0x0F,0x19,0x10,0x10,0x10,0x19,0x0F,0x0E,0x00,0x00,/*8*/
+ 0x00,0x78,0x7C,0xC6,0x82,0x82,0x82,0x46,0xFC,0xF8,0x00,0x00,
+ 0x00,0x00,0x10,0x10,0x10,0x10,0x08,0x0C,0x07,0x03,0x00,0x00,/*9*/
- 0x00,0x60,0xF0,0x98,0x0C,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0x03,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*<*/
- 0x00,0x02,0x06,0x0C,0x98,0xF0,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x04,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*>*/
+ 0x00,0x00,0x80,0xF0,0x1E,0x02,0x1E,0xF0,0x80,0x00,0x00,0x00,
+ 0x00,0x1C,0x0F,0x03,0x02,0x02,0x02,0x03,0x0F,0x1C,0x00,0x00,/*A*/
+ 0x00,0xFE,0xFE,0x42,0x42,0x42,0xE6,0xBE,0x9C,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,0x00,/*B*/
+ 0x00,0xF0,0xF8,0x0C,0x06,0x02,0x02,0x02,0x04,0x00,0x00,0x00,
+ 0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x08,0x00,0x00,0x00,/*C*/
+ 0x00,0xFE,0xFE,0x02,0x02,0x02,0x06,0x0C,0xFC,0xF0,0x00,0x00,
+ 0x00,0x1F,0x1F,0x10,0x10,0x10,0x18,0x0C,0x07,0x03,0x00,0x00,/*D*/
+ 0x00,0xFE,0xFE,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,/*E*/
+ 0x00,0xFE,0xFE,0x82,0x82,0x82,0x82,0x82,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*F*/
+ 0x00,0xF0,0xF8,0x0C,0x06,0x02,0x82,0x82,0x82,0x84,0x00,0x00,
+ 0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x1F,0x1F,0x00,0x00,/*G*/
+ 0x00,0xFE,0xFE,0x40,0x40,0x40,0x40,0xFE,0xFE,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,/*H*/
+ 0x00,0x02,0x02,0x02,0xFE,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,
+ 0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,/*I*/
+ 0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0xFE,0x00,0x00,0x00,0x00,
+ 0x00,0x08,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,0x00,0x00,/*J*/
+ 0x00,0xFE,0xFE,0xC0,0xE0,0x30,0x18,0x0C,0x06,0x02,0x00,0x00,
+ 0x00,0x1F,0x1F,0x00,0x01,0x03,0x06,0x0C,0x18,0x10,0x00,0x00,/*K*/
+ 0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,/*L*/
+ 0x00,0x00,0xFE,0x06,0x3C,0xC0,0xC0,0x3C,0x06,0xFE,0x00,0x00,
+ 0x00,0x10,0x1F,0x00,0x00,0x01,0x01,0x00,0x00,0x1F,0x18,0x00,/*M*/
+ 0x00,0xFE,0xFE,0x1E,0x70,0x80,0x00,0xFE,0xFE,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x00,0x00,0x03,0x1C,0x1F,0x1F,0x00,0x00,0x00,/*N*/
+ 0x00,0xF0,0xFC,0x0C,0x02,0x02,0x02,0x0E,0xFC,0xF0,0x00,0x00,
+ 0x00,0x03,0x0F,0x1C,0x10,0x10,0x10,0x0C,0x0F,0x03,0x00,0x00,/*O*/
+ 0x00,0xFE,0xFE,0x02,0x02,0x02,0x86,0xFC,0x78,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,/*P*/
+ 0x00,0xF0,0xF8,0x0C,0x02,0x02,0x02,0x02,0x0C,0xFC,0xF0,0x00,
+ 0x00,0x03,0x0F,0x1C,0x10,0x30,0x70,0xD8,0x8C,0x8F,0x83,0x40,/*Q*/
+ 0x00,0xFE,0xFE,0x42,0x42,0xC2,0xE6,0x3C,0x1C,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x00,0x00,0x00,0x01,0x0F,0x1C,0x10,0x00,0x00,/*R*/
+ 0x00,0x38,0x7C,0x66,0xC2,0xC2,0x82,0x84,0x00,0x00,0x00,0x00,
+ 0x00,0x08,0x10,0x10,0x10,0x10,0x19,0x0F,0x07,0x00,0x00,0x00,/*S*/
+ 0x00,0x02,0x02,0x02,0x02,0xFE,0xFE,0x02,0x02,0x02,0x02,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,/*T*/
+ 0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x00,0x00,
+ 0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,/*U*/
+ 0x00,0x0E,0x7E,0xE0,0x00,0x00,0x00,0xE0,0x7C,0x0E,0x00,0x00,
+ 0x00,0x00,0x00,0x03,0x1F,0x18,0x1F,0x03,0x00,0x00,0x00,0x00,/*V*/
+ 0x00,0x7E,0xFE,0x00,0x00,0xE0,0xE0,0x00,0x00,0xFE,0x7E,0x00,
+ 0x00,0x00,0x1F,0x18,0x0F,0x01,0x01,0x0F,0x18,0x1F,0x00,0x00,/*W*/
+ 0x00,0x02,0x06,0x1C,0x38,0xE0,0xE0,0x38,0x1C,0x06,0x02,0x00,
+ 0x00,0x10,0x18,0x0E,0x07,0x01,0x01,0x07,0x0E,0x18,0x10,0x00,/*X*/
+ 0x00,0x02,0x0E,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0E,0x02,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,/*Y*/
+ 0x00,0x02,0x02,0x02,0xC2,0xE2,0x3A,0x0E,0x02,0x00,0x00,0x00,
+ 0x00,0x10,0x1C,0x17,0x11,0x10,0x10,0x10,0x10,0x00,0x00,0x00,/*Z*/
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* */
+
+ 0x00,0x60,0xF0,0x98,0x0C,0x06,0x02,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x01,0x03,0x06,0x04,0x00,0x00,0x00,0x00,0x00,/*<*/
+ 0x00,0x02,0x06,0x0C,0x98,0xF0,0x60,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x04,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*>*/
+
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,/*.*/
};
#endif /* FONT_H_ */
diff --git a/workspace/ts100/inc/Modes.h b/workspace/ts100/inc/Modes.h
index aa00fca8..38a97211 100644
--- a/workspace/ts100/inc/Modes.h
+++ b/workspace/ts100/inc/Modes.h
@@ -27,7 +27,7 @@ enum {
} operatingMode;
enum {
- UVLO = 0, SLEEP_TEMP, SLEEP_TIME,MOTIONDETECT,
+ UVCO = 0, SLEEP_TEMP, SLEEP_TIME, MOTIONDETECT, TEMPDISPLAY,LEFTY
} settingsPage;
diff --git a/workspace/ts100/inc/Oled.h b/workspace/ts100/inc/Oled.h
index 303fa320..9ca20a6e 100644
--- a/workspace/ts100/inc/Oled.h
+++ b/workspace/ts100/inc/Oled.h
@@ -16,7 +16,7 @@ void Oled_DisplayOff(void);
u8* Oled_DrawArea(u8 x0, u8 y0, u8 wide, u8 high, u8* ptr);
void Set_ShowPos(u8 x, u8 y);
-
+void Oled_DisplayFlip();
void GPIO_Init_OLED(void);
void Init_Oled(void);
u8* Data_Command(u8 len, u8* ptr);
diff --git a/workspace/ts100/inc/Settings.h b/workspace/ts100/inc/Settings.h
index a1ed28f7..9a88f4fb 100644
--- a/workspace/ts100/inc/Settings.h
+++ b/workspace/ts100/inc/Settings.h
@@ -11,16 +11,21 @@
#define SETTINGS_H_
#include <stdint.h>
#include "stm32f10x_flash.h"
-#define SETTINGSVERSION 0x01 /*Change this if you change the struct below to prevent people getting out of sync*/
+#define SETTINGSVERSION 0x02 /*Change this if you change the struct below to prevent people getting out of sync*/
+#define SETTINGSOPTIONSCOUNT 5 /*Number of settings in the settings menu*/
+/*
+ * This struct must be a multiple of 2 bytes as it is saved / restored from flash in uint16_t chunks
+ */
struct {
- uint32_t SolderingTemp; //current setpoint for the iron
- uint32_t SleepTemp; //temp to drop to in sleep
- uint8_t SleepTime; //minutes to sleep
- uint8_t cutoutVoltage; //X10 the voltage we cutout at for undervoltage
- uint8_t movementEnabled;
- uint8_t version;
+ uint32_t SolderingTemp; //current setpoint for the iron
+ uint32_t SleepTemp; //temp to drop to in sleep
+ uint8_t version; //Used to track if a reset is needed on firmware upgrade
+ uint8_t SleepTime; //minutes timeout to sleep
+ uint8_t cutoutVoltage; //The voltage we cutout at for undervoltage
+ uint8_t movementEnabled; //If movement is enabled
+ uint8_t displayTempInF; //If we need to convert the C reading to F
+ uint8_t flipDisplay; //If true we want to invert the display for lefties
} systemSettings;
-//Settings struct used for user settings
void saveSettings();
void restoreSettings();
diff --git a/workspace/ts100/src/I2C.c b/workspace/ts100/src/I2C.c
index bed47bf3..e03a7129 100644
--- a/workspace/ts100/src/I2C.c
+++ b/workspace/ts100/src/I2C.c
@@ -22,7 +22,7 @@ void I2C_Configuration(void) {
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
- I2C_InitStructure.I2C_ClockSpeed = 100000; //100k
+ I2C_InitStructure.I2C_ClockSpeed = 400000; //400k
I2C_Init(I2C1, &I2C_InitStructure);
I2C_Cmd(I2C1, ENABLE);
}
diff --git a/workspace/ts100/src/Main.c b/workspace/ts100/src/Main.c
index 8d4c9c85..c898c3ab 100644
--- a/workspace/ts100/src/Main.c
+++ b/workspace/ts100/src/Main.c
@@ -12,30 +12,31 @@
void setup();
int main(void) {
- setup();
+ setup();/*Setup the system*/
while (1) {
- Clear_Watchdog(); //reset the Watchdog
+ Clear_Watchdog(); //reset the Watchdog timer
ProcessUI();
DrawUI();
- delayMs(50);
+ delayMs(50); //Slow the system down a little bit
}
}
-void setup()
-{
- RCC_Config(); //setup system clock
- NVIC_Config(0x4000); //this shifts the NVIC table to be offset, for the usb bootloader's size
- GPIO_Config(); //setup all the GPIO pins
- Init_EXTI(); //init the EXTI inputs
- Init_Timer3(); //Used for the soldering iron tip
- Adc_Init(); //init adc and dma
- I2C_Configuration(); //Start the I2C hardware
- GPIO_Init_OLED(); //Init the GPIO ports for the OLED
- StartUp_Accelerometer(); //start the accelerometer
- Init_Oled(); //init the OLED display
- Clear_Screen(); //clear the display buffer to black
- setupPID(); //init the PID values
- readIronTemp(239, 0); //load the default calibration value
- restoreSettings(); //Load settings
-
- Start_Watchdog(1000); //start the system watchdog as 1 seconds timeout
+void setup() {
+ RCC_Config(); //setup system clock
+ NVIC_Config(0x4000); //this shifts the NVIC table to be offset, for the usb bootloader's size
+ GPIO_Config(); //setup all the GPIO pins
+ Init_EXTI(); //init the EXTI inputs
+ Init_Timer3(); //Used for the soldering iron tip
+ Adc_Init(); //init adc and dma
+ I2C_Configuration(); //Start the I2C hardware
+ GPIO_Init_OLED(); //Init the GPIO ports for the OLED
+ StartUp_Accelerometer(); //start the accelerometer
+ Init_Oled(); //init the OLED display
+ setupPID(); //init the PID values
+ readIronTemp(239, 0); //load the default calibration value
+ restoreSettings(); //Load settings
+ if (systemSettings.flipDisplay)
+ Oled_DisplayFlip();
+ OLED_DrawString("VER 1.01",8);
+ delayMs(800);
+ Start_Watchdog(1000); //start the system watchdog as 1 seconds timeout
}
diff --git a/workspace/ts100/src/Modes.c b/workspace/ts100/src/Modes.c
index 9936fb56..3999f87f 100644
--- a/workspace/ts100/src/Modes.c
+++ b/workspace/ts100/src/Modes.c
@@ -63,7 +63,7 @@ void ProcessUI() {
//If no buttons pushed we need to perform the PID loop for the iron temp
int32_t newOutput = computePID(systemSettings.SolderingTemp);
- setIronTimer(newOutput);
+ setIronTimer(newOutput);
}
break;
@@ -81,37 +81,37 @@ void ProcessUI() {
} else {
//we check the timeout for how long the buttons have not been pushed
//if idle for > 3 seconds then we return to soldering
- if (millis() - getLastButtonPress() > 3000)
+ if (millis() - getLastButtonPress() > 3000) {
operatingMode = SOLDERING;
+ saveSettings();
+ }
}
break;
case SETTINGS:
//Settings is the mode with the most logic
//Here we are in the menu so we need to increment through the sub menus / increase the value
- if (millis() - getLastButtonPress() < 400)
+ if (millis() - getLastButtonPress() < 300)
return;
if (Buttons & BUT_A) {
resetLastButtonPress();
//A key iterates through the menu
- if (settingsPage == 3) {
+ if (settingsPage == SETTINGSOPTIONSCOUNT) {
//Roll off the end
- settingsPage = 0; //reset
- operatingMode = STARTUP;
- saveSettings(); //Save the settings
+ settingsPage = 0; //reset
+ operatingMode = STARTUP; //reset back to the startup
+ saveSettings(); //Save the settings
} else
- ++settingsPage; //move to the next option
+ ++settingsPage; //move to the next option
} else if (Buttons & BUT_B) {
resetLastButtonPress();
//B changes the value selected
switch (settingsPage) {
- case UVLO:
+ case UVCO:
//we are incrementing the cutout voltage
systemSettings.cutoutVoltage += 1; //Go up 1V at a jump
if (systemSettings.cutoutVoltage > 24)
- systemSettings.cutoutVoltage = 9;
- else if (systemSettings.cutoutVoltage < 9)
- systemSettings.cutoutVoltage = 9; //cant set UVLO below 9V
+ systemSettings.cutoutVoltage = 10;
break;
case SLEEP_TEMP:
systemSettings.SleepTemp += 100; //Go up 10c at a time
@@ -120,14 +120,20 @@ void ProcessUI() {
break;
case SLEEP_TIME:
++systemSettings.SleepTime; //Go up 1 minute at a time
- if (systemSettings.SleepTime > 60)
- systemSettings.SleepTime = 2; //cant set time over an hour
+ if (systemSettings.SleepTime > 30)
+ systemSettings.SleepTime = 1; //cant set time over 30 mins
//Remember that ^ is the time of no movement
break;
case MOTIONDETECT:
systemSettings.movementEnabled =
!systemSettings.movementEnabled;
break;
+ case TEMPDISPLAY:
+ systemSettings.displayTempInF = !systemSettings.displayTempInF;
+ break;
+ case LEFTY:
+ systemSettings.flipDisplay = !systemSettings.flipDisplay;
+ break;
default:
break;
}
@@ -155,7 +161,7 @@ void ProcessUI() {
//else if nothing has been pushed we need to compute the PID to keep the iron at the sleep temp
int32_t newOutput = computePID(systemSettings.SleepTemp);
- setIronTimer(newOutput);
+ setIronTimer(newOutput);
break;
case COOLING: {
@@ -190,9 +196,20 @@ void ProcessUI() {
break;
}
}
+/*
+ * Draws the temp with temp conversion if needed
+ */
+void drawTemp(uint16_t temp, uint8_t x) {
+ if (systemSettings.displayTempInF)
+ temp = (temp * 9 + 1600) / 5;/*Convert to F -> T*(9/5)+32*/
+ OLED_DrawThreeNumber(temp / 10, x);
+}
+/*
+ * Performs all the OLED drawing for the current operating mode
+ */
void DrawUI() {
- uint16_t temp = readIronTemp(0, 0) / 10;
+ uint16_t temp = readIronTemp(0, 0);
switch (operatingMode) {
case STARTUP:
//We are chilling in the idle mode
@@ -203,60 +220,77 @@ void DrawUI() {
Oled_DisplayOff();
} else {
Oled_DisplayOn();
- OLED_DrawString("IDLE ", 7); //write the word IDLE
+ OLED_DrawString(" IDLE ", 8); //write the word IDLE
}
break;
case SOLDERING:
//The user is soldering
{
if (getIronTimer() == 0) {
- OLED_DrawChar('C', 14 * 4);
+ OLED_DrawChar('C', 5);
} else {
if (getIronTimer() < 500) {
- OLED_DrawChar(' ', 14 * 4);
+ OLED_DrawChar(' ', 5);
} else { //we are heating
- OLED_DrawChar('H', 14 * 4);
+ OLED_DrawChar('H', 5);
}
}
- OLED_DrawThreeNumber(temp, 0);
- OLED_DrawChar(' ', 14 * 3);
- OLED_DrawChar(' ', 14 * 5);
- OLED_DrawChar(' ', 14 * 6);
+ drawTemp(temp, 0);
+ OLED_DrawChar(' ', 3);
+ OLED_DrawChar(' ', 4);
+ OLED_DrawChar(' ', 6);
+ OLED_DrawChar(' ', 7);
+
}
break;
case TEMP_ADJ:
//We are prompting the user to change the temp so we draw the current setpoint temp
//With the nifty arrows
- OLED_DrawChar('<', 0);
- OLED_DrawThreeNumber(systemSettings.SolderingTemp / 10, 14 * 1);
- OLED_DrawChar(' ', 14 * 4);
- OLED_DrawChar('>', 14 * 5);
+
+ OLED_DrawChar(' ', 0);
+ OLED_DrawChar('<', 1);
+ drawTemp(systemSettings.SolderingTemp, 2);
+ OLED_DrawChar(' ', 5);
+ OLED_DrawChar(' ', 6);
+ OLED_DrawChar('>', 7);
+
break;
case SETTINGS:
//We are prompting the user the setting name
switch (settingsPage) {
- case UVLO:
- OLED_DrawString("UVLO", 4);
- OLED_DrawTwoNumber(systemSettings.cutoutVoltage, 14 * 4);
- //OLED_DrawChar('V', 14 * 5);
-
+ case UVCO:
+ OLED_DrawString("UVCO ", 5);
+ OLED_DrawTwoNumber(systemSettings.cutoutVoltage, 5);
+ OLED_DrawChar('V', 7);
break;
case SLEEP_TEMP:
- OLED_DrawString("STMP", 4);
- OLED_DrawThreeNumber(systemSettings.SleepTemp / 10, 14 * 4);
- //OLED_DrawChar('V', 14 * 5);
-
+ OLED_DrawString("STMP ", 5);
+ OLED_DrawThreeNumber(systemSettings.SleepTemp / 10, 5);
break;
case SLEEP_TIME:
- OLED_DrawString("STME ", 5);
- OLED_DrawTwoNumber(systemSettings.SleepTime, 14 * 5);
+ OLED_DrawString("STIME ", 6);
+ OLED_DrawTwoNumber(systemSettings.SleepTime, 6);
break;
case MOTIONDETECT:/*Toggle the mode*/
if (systemSettings.movementEnabled)
- OLED_DrawString("MOTN T", 7);
+ OLED_DrawString("MOTION T", 8);
+ else
+ OLED_DrawString("MOTION F", 8);
+ break;
+ case TEMPDISPLAY:/*Are we showing in C or F ?*/
+ if (systemSettings.displayTempInF)
+ OLED_DrawString("TMPUNT F", 8);
+ else
+ OLED_DrawString("TMPUNT C", 8);
+ break;
+
+ case LEFTY:
+
+ if (systemSettings.flipDisplay)
+ OLED_DrawString("FLPDSP T", 8);
else
- OLED_DrawString("MOTN F", 7);
+ OLED_DrawString("FLPDSP F", 8);
break;
default:
break;
@@ -266,15 +300,15 @@ void DrawUI() {
//The iron is in sleep temp mode
//Draw in temp and sleep
OLED_DrawString("SLP", 3);
- OLED_DrawThreeNumber(temp, 14 * 3);
+ drawTemp(temp, 3);
break;
case COOLING:
//We are warning the user the tip is cooling
- OLED_DrawString("COL", 3);
- OLED_DrawThreeNumber(temp, 14 * 3);
+ OLED_DrawString("COOL", 3);
+ drawTemp(temp, 4);
break;
case UVLOWARN:
- OLED_DrawString("UND VL", 6);
+ OLED_DrawString("LOW VOLT", 8);
break;
default:
break;
diff --git a/workspace/ts100/src/Oled.c b/workspace/ts100/src/Oled.c
index c578a793..c6943788 100644
--- a/workspace/ts100/src/Oled.c
+++ b/workspace/ts100/src/Oled.c
@@ -13,38 +13,70 @@
#include "I2C.h"
#include "Font.h"
+u8 displayOffset = 32;
/*Setup params for the OLED screen*/
-u8 OLED_Setup_Array[46] = { 0x80, 0xAE, 0x80, 0xD5, 0x80, 0x52, 0x80, 0xA8,
- 0x80, 0x0f, 0x80, 0xC0, 0x80, 0xD3, 0x80, 0x00, 0x80, 0x40, 0x80, 0xA0,
- 0x80, 0x8D, 0x80, 0x14, 0x80, 0xDA, 0x80, 0x02, 0x80, 0x81, 0x80, 0x33,
- 0x80, 0xD9, 0x80, 0xF1, 0x80, 0xDB, 0x80, 0x30, 0x80, 0xA4, 0x80, 0XA6,
- 0x80, 0xAF };
+/*http://www.displayfuture.com/Display/datasheet/controller/SSD1307.pdf*/
+/*All commands are prefixed with 0x80*/
+u8 OLED_Setup_Array[46] = { 0x80, 0xAE,/*Display off*/
+0x80, 0xD5,/*Set display clock divide ratio / osc freq*/
+0x80, 0b01010001,/**/
+0x80, 0xA8,/*Set Multiplex Ratio*/
+0x80, 16, /*16 == max brightness,39==dimmest*/
+0x80, 0xC0,/*Set COM Scan direction*/
+0x80, 0xD3,/*Set Display offset*/
+0x80, 0x00,/*0 Offset*/
+0x80, 0x40,/*Set Display start line to 0*/
+0x80, 0xA0,/*Set Segment remap to normal*/
+0x80, 0x8D,/*Unknown*/
+0x80, 0x14,/**/
+0x80, 0xDA,/*Set VCOM Pins hardware config*/
+0x80, 0x02,/*Combination 2*/
+0x80, 0x81,/*Contrast*/
+0x80, 0x33,/*51*/
+0x80, 0xD9,/*Set pre-charge period*/
+0x80, 0xF1,/**/
+0x80, 0xDB,/*Adjust VCOMH regulator ouput*/
+0x80, 0x30,/**/
+0x80, 0xA4,/*Enable the display GDDR*/
+0x80, 0XA6,/*Normal display*/
+0x80, 0xAF /*Dispaly on*/
+};
-/*******************************************************************************
+/*
Function: Oled_DisplayOn
Description:Turn on the Oled display
- *******************************************************************************/
+ */
void Oled_DisplayOn(void) {
u8 data[6] = { 0x80, 0X8D, 0x80, 0X14, 0x80, 0XAF };
I2C_PageWrite(data, 6, DEVICEADDR_OLED);
}
-/*******************************************************************************
+/*
Function: Oled_DisplayOff
Description:Turn off the Oled display
- *******************************************************************************/
+ */
void Oled_DisplayOff(void) {
u8 data[6] = { 0x80, 0X8D, 0x80, 0X10, 0x80, 0XAE };
I2C_PageWrite(data, 6, DEVICEADDR_OLED);
}
+/*
+ * This sets the OLED screen to invert the screen (flip it vertically)
+ * This is used if the unit is set to left hand mode
+ */
+void Oled_DisplayFlip() {
+ u8 data[2] = { 0x80, 0XC8 };
+ I2C_PageWrite(data, 2, DEVICEADDR_OLED);
+ data[1] = 0xA1;
+ I2C_PageWrite(data, 2, DEVICEADDR_OLED);
+ displayOffset=0;
-/*******************************************************************************
- Function: Data_Command
+}
+/*
Description: write a command to the Oled display
Input: number of bytes to write, array to write
Output:
- *******************************************************************************/
+ */
u8* Data_Command(u8 length, u8* data) {
int i;
u8 tx_data[128];
@@ -62,8 +94,9 @@ u8* Data_Command(u8 length, u8* data) {
Input:x,y co-ordinates
*******************************************************************************/
void Set_ShowPos(u8 x, u8 y) {
- u8 pos_param[8] = { 0x80, 0xB0, 0x80, 0x21, 0x80, 0x20, 0x80, 0x7F };
- pos_param[5] = x + 32;
+ u8 pos_param[8] = { 0x80, 0xB0, 0x80, 0x21, 0x80, 0x00, 0x80, 0x7F };
+ //page 0, start add = x(below) through to 0x7F (aka 127)
+ pos_param[5] = x + displayOffset;/*Display offset ==0 for Lefty, == 32 fo righty*/
pos_param[1] += y;
I2C_PageWrite(pos_param, 8, DEVICEADDR_OLED);
}
@@ -133,51 +166,67 @@ void Clear_Screen(void) {
Oled_DrawArea(0, i * 8, 128, 8, tx_data);
}
}
-
+/*
+ * Draws a string onto the screen starting at the left
+ */
void OLED_DrawString(char* string, uint8_t length) {
for (uint8_t i = 0; i < length; i++) {
- OLED_DrawChar(string[i], i * 14);
+ OLED_DrawChar(string[i], i);
}
}
+/*
+ * Draw a char onscreen at letter index x
+ */
void OLED_DrawChar(char c, uint8_t x) {
- if ((x) > (128 - 14))
- return; //Rudimentary clipping to not draw off screen
- u8* ptr;
- ptr = (u8*) FONT;
+ if (x > 7)
+ return; //clipping
+ x *= FONT_WIDTH; //convert to a x coordinate
+
+ u8* ptr = (u8*) FONT;
if (c >= 'A' && c <= 'Z') {
- ptr += (c - 'A' + 10) * (14 * 2); //alpha is ofset 10 chars into the array
+ ptr += (c - 'A' + 10) * (FONT_WIDTH * 2); //alpha is ofset 10 chars into the array
} else if (c >= '0' && c <= '9')
- ptr += (c - '0') * (14 * 2);
+ ptr += (c - '0') * (FONT_WIDTH * 2);
else if (c < 10)
- ptr += (c) * (14 * 2);
+ ptr += (c) * (FONT_WIDTH * 2);
else if (c == ' ') {
//blank on space bar
- ptr += (36) * (14 * 2);
+ ptr += (36) * (FONT_WIDTH * 2);
} else if (c == '<') {
- ptr += (37) * (14 * 2);
+ ptr += (37) * (FONT_WIDTH * 2);
} else if (c == '>') {
- ptr += (38) * (14 * 2);
+ ptr += (38) * (FONT_WIDTH * 2);
+ }else if (c=='.')
+ {
+ ptr += (39) * (FONT_WIDTH * 2);
}
- Oled_DrawArea(x, 0, 14, 16, (u8*) ptr);
+ Oled_DrawArea(x, 0, FONT_WIDTH, 16, (u8*) ptr);
}
/*
- * Draw a 2 digit number to the display
- * */
+ * Draw a 2 digit number to the display at letter slot x
+ */
void OLED_DrawTwoNumber(uint8_t in, uint8_t x) {
+
OLED_DrawChar((in / 10) % 10, x);
- OLED_DrawChar(in % 10, x + 14);
+ OLED_DrawChar(in % 10, x + 1);
}
+/*
+ * Draw a 3 digit number to the display at letter slot x
+ */
void OLED_DrawThreeNumber(uint16_t in, uint8_t x) {
OLED_DrawChar((in / 100) % 10, x);
- OLED_DrawChar((in / 10) % 10, x + 14);
- OLED_DrawChar(in % 10, x + 28);
+ OLED_DrawChar((in / 10) % 10, x + 1);
+ OLED_DrawChar(in % 10, x + 2);
}
+/*
+ * Draw a 4 digit number to the display at letter slot x
+ */
void OLED_DrawFourNumber(uint16_t in, uint8_t x) {
OLED_DrawChar((in / 1000) % 10, x);
- OLED_DrawChar((in / 100) % 10, x + 14);
- OLED_DrawChar((in / 10) % 10, x + 28);
- OLED_DrawChar(in % 10, x + 42);
+ OLED_DrawChar((in / 100) % 10, x + 1);
+ OLED_DrawChar((in / 10) % 10, x + 2);
+ OLED_DrawChar(in % 10, x + 3);
}
diff --git a/workspace/ts100/src/Settings.c b/workspace/ts100/src/Settings.c
index 849a6dc9..cfa60a76 100644
--- a/workspace/ts100/src/Settings.c
+++ b/workspace/ts100/src/Settings.c
@@ -8,9 +8,9 @@
*/
#include "Settings.h"
-#define FLASH_ADDR (0x8000000|48896)
+#define FLASH_ADDR (0x8000000|48896)/*Flash start OR'ed with the maximum amount of flash - 256 bytes*/
void saveSettings() {
-//First we erase the flash
+ //First we erase the flash
FLASH_Unlock(); //unlock flash writing
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
while (FLASH_ErasePage(FLASH_ADDR) != FLASH_COMPLETE)
@@ -26,9 +26,8 @@ void saveSettings() {
void restoreSettings() {
//We read the flash
uint16_t *data = (uint16_t*) &systemSettings;
- for(uint8_t i=0;i<(sizeof(systemSettings)/2);i++)
- {
- data[i] = *(uint16_t *)(FLASH_ADDR + (i*2));
+ for (uint8_t i = 0; i < (sizeof(systemSettings) / 2); i++) {
+ data[i] = *(uint16_t *) (FLASH_ADDR + (i * 2));
}
//if the version is correct were done
//if not we reset and save
@@ -42,11 +41,13 @@ void restoreSettings() {
void resetSettings() {
- systemSettings.SleepTemp = 900;
- systemSettings.SleepTime = 1;
- systemSettings.SolderingTemp = 3200;
- systemSettings.movementEnabled = 1; //we use movement detection
- systemSettings.cutoutVoltage = 9;
- systemSettings.version=SETTINGSVERSION;
+ systemSettings.SleepTemp = 1500; //Temperature the iron sleeps at - default 150.0 C
+ systemSettings.SleepTime = 1; //How many minutes we wait until going to sleep - default 1 min
+ systemSettings.SolderingTemp = 3200; //Default soldering temp is 320.0 C
+ systemSettings.movementEnabled = 1; //we use movement detection by default
+ systemSettings.cutoutVoltage = 10; //10V is the minium cutout voltage as the unit V measurement is unstable below 9.5V
+ systemSettings.version = SETTINGSVERSION; //Store the version number to allow for easier upgrades
+ systemSettings.displayTempInF =0; //default to C
+ systemSettings.flipDisplay=0; //Default to right handed mode
}