
11u24 Eeprom utility.
Diff: main.cpp
- Revision:
- 0:e2b0ee19db2b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Sep 26 09:22:57 2014 +0000 @@ -0,0 +1,156 @@ + + +#include "mbed.h" +#include "IAP.h" +#include "TextLCD.h" +#include "stdlib.h" +#include <stdio.h> + +#define FLOAT_SIZE 4 +#define TARGET_ADDRESS 64 +#define NEXT_PLACE 1 +#define PLACE 0 + +IAP iap; +float getEepromFloat(int place); +void teletype(char* text, int row); + +typedef char * string; + +// ====== Pins ========= + +DigitalOut gLED(P1_18); +DigitalOut rLED(P1_24); + + +TextLCD lcd(P1_22, P1_14, P0_9, P0_8, P1_21, P1_2); // rs, e, d4-d7 + + +//Tie unused analogue pins LOW + +DigitalOut a1(P0_15); +DigitalOut a2(P0_16); +DigitalOut a3(P0_22); +DigitalOut a4(P0_23); + +// ====== Variables ========= + +float test_float = 12.5; +float display_float = 0.0; + +int twodp =0; + +float _ON; +float _OFF; + +float calib; +float voltage; +float displayVoltage; +float displaySet; + +float difference = 0; +float calibrate=0.0; + + + + +// ====== CODE BEGINS========= + +typedef union _data { + float f; + char s[4]; +} myData; + + +float getEepromFloat(int place) +{ + myData returnedFloat; + char someBytes[4]; + + iap.read_eeprom( (char*)(TARGET_ADDRESS+(place*4)), someBytes, FLOAT_SIZE ); + + returnedFloat.s[0] = someBytes[0]; + returnedFloat.s[1] = someBytes[1]; + returnedFloat.s[2] = someBytes[2]; + returnedFloat.s[3] = someBytes[3]; + return returnedFloat.f; + +} + +void setEepromFloat(int place, float incomingFloat) +{ + char theBytes[4]; + myData aFloat; + + aFloat.f = incomingFloat; + + theBytes[0] = aFloat.s[0]; + theBytes[1] = aFloat.s[1]; + theBytes[2] = aFloat.s[2]; + theBytes[3] = aFloat.s[3]; + + iap.write_eeprom( theBytes, (char*) (TARGET_ADDRESS+(place*4)), FLOAT_SIZE ); + +} + + +int main() +{ + + teletype("Hello", 0); + float aValue=0.0; + float theReturned=99.99; + + while (1) { + wait(2.0); + + aValue++; // increment it + + setEepromFloat(PLACE,aValue); //put it in place 0 (Global variable) + + theReturned = getEepromFloat(PLACE); //get it back + + lcd.cls(); + teletype("Value: %f", theReturned); //output it to the screen + + + }; +} + + + + +char* left(string Source,int NewLen) +{ + + char* result; + char* temp; + if (NewLen <=0) + NewLen =1; /* Minimum length */ + + result = (char*)malloc(NewLen + 1); /* +1 = DFTTZ! */ + *result=' '; /* default for unassigned strings */ + temp=result; + if (Source && *Source) { /* don't copy an empty string */ + while (NewLen-- >0) + *temp++=*Source++; + } else temp++; + *temp='\0'; + return result; +} + +void teletype(char* text, int row) +{ + lcd.locate(0,row); + lcd.printf(" "); + + int whole=strlen(text); + + for (int i=1; i<=whole; i++) { + lcd.locate(0,row); + lcd.printf(left(text,i)); + wait(0.15); + } +} + +