Dave Tech
/
EepromTest
11u24 Eeprom utility.
main.cpp@0:e2b0ee19db2b, 2014-09-26 (annotated)
- Committer:
- kstech
- Date:
- Fri Sep 26 09:22:57 2014 +0000
- Revision:
- 0:e2b0ee19db2b
11u24 Eeprom utility
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kstech | 0:e2b0ee19db2b | 1 | |
kstech | 0:e2b0ee19db2b | 2 | |
kstech | 0:e2b0ee19db2b | 3 | #include "mbed.h" |
kstech | 0:e2b0ee19db2b | 4 | #include "IAP.h" |
kstech | 0:e2b0ee19db2b | 5 | #include "TextLCD.h" |
kstech | 0:e2b0ee19db2b | 6 | #include "stdlib.h" |
kstech | 0:e2b0ee19db2b | 7 | #include <stdio.h> |
kstech | 0:e2b0ee19db2b | 8 | |
kstech | 0:e2b0ee19db2b | 9 | #define FLOAT_SIZE 4 |
kstech | 0:e2b0ee19db2b | 10 | #define TARGET_ADDRESS 64 |
kstech | 0:e2b0ee19db2b | 11 | #define NEXT_PLACE 1 |
kstech | 0:e2b0ee19db2b | 12 | #define PLACE 0 |
kstech | 0:e2b0ee19db2b | 13 | |
kstech | 0:e2b0ee19db2b | 14 | IAP iap; |
kstech | 0:e2b0ee19db2b | 15 | float getEepromFloat(int place); |
kstech | 0:e2b0ee19db2b | 16 | void teletype(char* text, int row); |
kstech | 0:e2b0ee19db2b | 17 | |
kstech | 0:e2b0ee19db2b | 18 | typedef char * string; |
kstech | 0:e2b0ee19db2b | 19 | |
kstech | 0:e2b0ee19db2b | 20 | // ====== Pins ========= |
kstech | 0:e2b0ee19db2b | 21 | |
kstech | 0:e2b0ee19db2b | 22 | DigitalOut gLED(P1_18); |
kstech | 0:e2b0ee19db2b | 23 | DigitalOut rLED(P1_24); |
kstech | 0:e2b0ee19db2b | 24 | |
kstech | 0:e2b0ee19db2b | 25 | |
kstech | 0:e2b0ee19db2b | 26 | TextLCD lcd(P1_22, P1_14, P0_9, P0_8, P1_21, P1_2); // rs, e, d4-d7 |
kstech | 0:e2b0ee19db2b | 27 | |
kstech | 0:e2b0ee19db2b | 28 | |
kstech | 0:e2b0ee19db2b | 29 | //Tie unused analogue pins LOW |
kstech | 0:e2b0ee19db2b | 30 | |
kstech | 0:e2b0ee19db2b | 31 | DigitalOut a1(P0_15); |
kstech | 0:e2b0ee19db2b | 32 | DigitalOut a2(P0_16); |
kstech | 0:e2b0ee19db2b | 33 | DigitalOut a3(P0_22); |
kstech | 0:e2b0ee19db2b | 34 | DigitalOut a4(P0_23); |
kstech | 0:e2b0ee19db2b | 35 | |
kstech | 0:e2b0ee19db2b | 36 | // ====== Variables ========= |
kstech | 0:e2b0ee19db2b | 37 | |
kstech | 0:e2b0ee19db2b | 38 | float test_float = 12.5; |
kstech | 0:e2b0ee19db2b | 39 | float display_float = 0.0; |
kstech | 0:e2b0ee19db2b | 40 | |
kstech | 0:e2b0ee19db2b | 41 | int twodp =0; |
kstech | 0:e2b0ee19db2b | 42 | |
kstech | 0:e2b0ee19db2b | 43 | float _ON; |
kstech | 0:e2b0ee19db2b | 44 | float _OFF; |
kstech | 0:e2b0ee19db2b | 45 | |
kstech | 0:e2b0ee19db2b | 46 | float calib; |
kstech | 0:e2b0ee19db2b | 47 | float voltage; |
kstech | 0:e2b0ee19db2b | 48 | float displayVoltage; |
kstech | 0:e2b0ee19db2b | 49 | float displaySet; |
kstech | 0:e2b0ee19db2b | 50 | |
kstech | 0:e2b0ee19db2b | 51 | float difference = 0; |
kstech | 0:e2b0ee19db2b | 52 | float calibrate=0.0; |
kstech | 0:e2b0ee19db2b | 53 | |
kstech | 0:e2b0ee19db2b | 54 | |
kstech | 0:e2b0ee19db2b | 55 | |
kstech | 0:e2b0ee19db2b | 56 | |
kstech | 0:e2b0ee19db2b | 57 | // ====== CODE BEGINS========= |
kstech | 0:e2b0ee19db2b | 58 | |
kstech | 0:e2b0ee19db2b | 59 | typedef union _data { |
kstech | 0:e2b0ee19db2b | 60 | float f; |
kstech | 0:e2b0ee19db2b | 61 | char s[4]; |
kstech | 0:e2b0ee19db2b | 62 | } myData; |
kstech | 0:e2b0ee19db2b | 63 | |
kstech | 0:e2b0ee19db2b | 64 | |
kstech | 0:e2b0ee19db2b | 65 | float getEepromFloat(int place) |
kstech | 0:e2b0ee19db2b | 66 | { |
kstech | 0:e2b0ee19db2b | 67 | myData returnedFloat; |
kstech | 0:e2b0ee19db2b | 68 | char someBytes[4]; |
kstech | 0:e2b0ee19db2b | 69 | |
kstech | 0:e2b0ee19db2b | 70 | iap.read_eeprom( (char*)(TARGET_ADDRESS+(place*4)), someBytes, FLOAT_SIZE ); |
kstech | 0:e2b0ee19db2b | 71 | |
kstech | 0:e2b0ee19db2b | 72 | returnedFloat.s[0] = someBytes[0]; |
kstech | 0:e2b0ee19db2b | 73 | returnedFloat.s[1] = someBytes[1]; |
kstech | 0:e2b0ee19db2b | 74 | returnedFloat.s[2] = someBytes[2]; |
kstech | 0:e2b0ee19db2b | 75 | returnedFloat.s[3] = someBytes[3]; |
kstech | 0:e2b0ee19db2b | 76 | return returnedFloat.f; |
kstech | 0:e2b0ee19db2b | 77 | |
kstech | 0:e2b0ee19db2b | 78 | } |
kstech | 0:e2b0ee19db2b | 79 | |
kstech | 0:e2b0ee19db2b | 80 | void setEepromFloat(int place, float incomingFloat) |
kstech | 0:e2b0ee19db2b | 81 | { |
kstech | 0:e2b0ee19db2b | 82 | char theBytes[4]; |
kstech | 0:e2b0ee19db2b | 83 | myData aFloat; |
kstech | 0:e2b0ee19db2b | 84 | |
kstech | 0:e2b0ee19db2b | 85 | aFloat.f = incomingFloat; |
kstech | 0:e2b0ee19db2b | 86 | |
kstech | 0:e2b0ee19db2b | 87 | theBytes[0] = aFloat.s[0]; |
kstech | 0:e2b0ee19db2b | 88 | theBytes[1] = aFloat.s[1]; |
kstech | 0:e2b0ee19db2b | 89 | theBytes[2] = aFloat.s[2]; |
kstech | 0:e2b0ee19db2b | 90 | theBytes[3] = aFloat.s[3]; |
kstech | 0:e2b0ee19db2b | 91 | |
kstech | 0:e2b0ee19db2b | 92 | iap.write_eeprom( theBytes, (char*) (TARGET_ADDRESS+(place*4)), FLOAT_SIZE ); |
kstech | 0:e2b0ee19db2b | 93 | |
kstech | 0:e2b0ee19db2b | 94 | } |
kstech | 0:e2b0ee19db2b | 95 | |
kstech | 0:e2b0ee19db2b | 96 | |
kstech | 0:e2b0ee19db2b | 97 | int main() |
kstech | 0:e2b0ee19db2b | 98 | { |
kstech | 0:e2b0ee19db2b | 99 | |
kstech | 0:e2b0ee19db2b | 100 | teletype("Hello", 0); |
kstech | 0:e2b0ee19db2b | 101 | float aValue=0.0; |
kstech | 0:e2b0ee19db2b | 102 | float theReturned=99.99; |
kstech | 0:e2b0ee19db2b | 103 | |
kstech | 0:e2b0ee19db2b | 104 | while (1) { |
kstech | 0:e2b0ee19db2b | 105 | wait(2.0); |
kstech | 0:e2b0ee19db2b | 106 | |
kstech | 0:e2b0ee19db2b | 107 | aValue++; // increment it |
kstech | 0:e2b0ee19db2b | 108 | |
kstech | 0:e2b0ee19db2b | 109 | setEepromFloat(PLACE,aValue); //put it in place 0 (Global variable) |
kstech | 0:e2b0ee19db2b | 110 | |
kstech | 0:e2b0ee19db2b | 111 | theReturned = getEepromFloat(PLACE); //get it back |
kstech | 0:e2b0ee19db2b | 112 | |
kstech | 0:e2b0ee19db2b | 113 | lcd.cls(); |
kstech | 0:e2b0ee19db2b | 114 | teletype("Value: %f", theReturned); //output it to the screen |
kstech | 0:e2b0ee19db2b | 115 | |
kstech | 0:e2b0ee19db2b | 116 | |
kstech | 0:e2b0ee19db2b | 117 | }; |
kstech | 0:e2b0ee19db2b | 118 | } |
kstech | 0:e2b0ee19db2b | 119 | |
kstech | 0:e2b0ee19db2b | 120 | |
kstech | 0:e2b0ee19db2b | 121 | |
kstech | 0:e2b0ee19db2b | 122 | |
kstech | 0:e2b0ee19db2b | 123 | char* left(string Source,int NewLen) |
kstech | 0:e2b0ee19db2b | 124 | { |
kstech | 0:e2b0ee19db2b | 125 | |
kstech | 0:e2b0ee19db2b | 126 | char* result; |
kstech | 0:e2b0ee19db2b | 127 | char* temp; |
kstech | 0:e2b0ee19db2b | 128 | if (NewLen <=0) |
kstech | 0:e2b0ee19db2b | 129 | NewLen =1; /* Minimum length */ |
kstech | 0:e2b0ee19db2b | 130 | |
kstech | 0:e2b0ee19db2b | 131 | result = (char*)malloc(NewLen + 1); /* +1 = DFTTZ! */ |
kstech | 0:e2b0ee19db2b | 132 | *result=' '; /* default for unassigned strings */ |
kstech | 0:e2b0ee19db2b | 133 | temp=result; |
kstech | 0:e2b0ee19db2b | 134 | if (Source && *Source) { /* don't copy an empty string */ |
kstech | 0:e2b0ee19db2b | 135 | while (NewLen-- >0) |
kstech | 0:e2b0ee19db2b | 136 | *temp++=*Source++; |
kstech | 0:e2b0ee19db2b | 137 | } else temp++; |
kstech | 0:e2b0ee19db2b | 138 | *temp='\0'; |
kstech | 0:e2b0ee19db2b | 139 | return result; |
kstech | 0:e2b0ee19db2b | 140 | } |
kstech | 0:e2b0ee19db2b | 141 | |
kstech | 0:e2b0ee19db2b | 142 | void teletype(char* text, int row) |
kstech | 0:e2b0ee19db2b | 143 | { |
kstech | 0:e2b0ee19db2b | 144 | lcd.locate(0,row); |
kstech | 0:e2b0ee19db2b | 145 | lcd.printf(" "); |
kstech | 0:e2b0ee19db2b | 146 | |
kstech | 0:e2b0ee19db2b | 147 | int whole=strlen(text); |
kstech | 0:e2b0ee19db2b | 148 | |
kstech | 0:e2b0ee19db2b | 149 | for (int i=1; i<=whole; i++) { |
kstech | 0:e2b0ee19db2b | 150 | lcd.locate(0,row); |
kstech | 0:e2b0ee19db2b | 151 | lcd.printf(left(text,i)); |
kstech | 0:e2b0ee19db2b | 152 | wait(0.15); |
kstech | 0:e2b0ee19db2b | 153 | } |
kstech | 0:e2b0ee19db2b | 154 | } |
kstech | 0:e2b0ee19db2b | 155 | |
kstech | 0:e2b0ee19db2b | 156 |